PyRFC 服务器端编程要点

news2024/11/24 2:38:42

PyRFC 支持服务器端编程。什么是服务器端编程?有哪些技术要求?可以参考我的另外一篇博客:SAP接口编程 之JCo3.0系列(06) 。本篇主要介绍 PyRFC 的技术实现。

要点

  • 服务器端编程的主要作用是实现 ABAP 主动调用
  • 服务器端编程需要首先在 ABAP 中定义函数,该函数可以是一个空函数。外部服务器 (本质是 nwrfc sdk 的封装)需要对该函数进行注册。如果 ABAP 函数有实现代码,其实也不会运行 ABAP 代码
  • SAP 需要在 SM59 中定义 RFC destination,包括 网关 (Gateway host)、网关服务号(Gateway service number ) 以及 Program Id。其中 gateway host 和 gateway service number 通过事务码 SMGW 查看和设置。

SM59 设置

1)RFC destination 是设置的目标,call function 时指定的 destination 与此一致
2)Connection Type 需要为 TCP/IP

工具栏中有 Connection Test 按钮,可以测试连接是否成功。


因为现在 Python 服务器还没有启动,测试失败。界面如下:

PyRFC 设置

PyRFC 需要有server parameters 的设置以及 SAP logon 参数的设置。server parameters 包括刚才的 gateway host, service name 和 program id。PyRFC 支持将这些参数写在 sapnwrfc.ini 文件中。比如,在我的测试机器上,这些配置参数如下:

根据我的测试, REG_COUNT 参数不能少,否则 Python 服务器不能成功连接到 SAP。

函数处理器

对 ABAP 调用的函数,需要在 pyrfc 中定义相应的处理器,在这里实现相应的功能。比如,对 ABAP 中 STFC_CONNECTION 函数,定义如下的处理器:

def my_stfc_connection(request_context=None, REQUTEXT=""):
    """Server function my_stfc_connection with the signature of ABAP function module STFC_CONNECTION."""

    print("stfc connection invoked")
    print("request_context", request_context)
    print(f"REQUTEXT: {REQUTEXT}")

    return {
        "ECHOTEXT": REQUTEXT,
        "RESPTEXT": "消息发送自 Python 服务器"
    }

Python 服务器

接下来,实现 Python 服务器,在 Python 服务器中,注册刚才编写的函数处理器。

from threading import Thread
from pyrfc import Server, set_ini_file_directory
import os

def launch_server():
    """Start server."""

    dir_path = os.path.dirname(os.path.realpath(__file__))
    set_ini_file_directory(dir_path)

    server = Server(
        {"dest": "gateway"},
        {"dest": "D01"},
        {"check_date": False, "check_time": False, "port": 8081, "server_log": False}
    )
    print(server.get_server_attributes())

    # expose python function my_stfc_connection as ABAP function STFC_CONNECTION, to be called by ABAP system
    server.add_function("STFC_CONNECTION", my_stfc_connection )

    # start server
    server.serve()

    # get server attributes
    print(server.get_server_attributes())

在这里,set_ini_file_directory 函数的作用,是根据前面代码设置的路径,在该路径下查找 sapnwrfc.ini 文件,并且用 ini 文件中的信息创建 Server:


参数根据 gateway 和 D01 从 sapnwrfc.ini 文件获取相关参数:

启动服务器

server_thread = Thread(target=launch_server)
server_thread.start()

input("Press Enter to stop server...\n")  # WPS110

# stop server
server_thread.join()
print("Server stoped")

在 SAP 启动的情况下,运行该代码。并且测试 SM59 的连接,已经成功:


SMGW 查看连接的客户端 (菜单:Goto -> Logged on Clients) :

ABAP 测试 STFC_CONNECTION 函数

测试:


也可以写一段代码来测试:

report  znwrfc_server_test.

data: requtext like sy-lisel,
      resp_text like sy-lisel,
      echo_text like sy-lisel.

data: rfcdest like rfcdes-rfcdest value 'NONE'.
data: rfc_mess(128).

requtext = '你好,我是来自ABAP的消息!'.
rfcdest = 'NWRFC_SERVER'. " corresponds to the destination name defined in SM59

write: 'Call function STFC_CONNECTION using ', rfcdest.

call function 'STFC_CONNECTION' destination rfcdest
  exporting
    requtext = requtext
  importing
    echotext = echo_text
    resptext = resp_text.

if sy-subrc is initial.
  write: / 'Call STFC_CONNECTION'.
  write: / resp_text.
endif.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1260927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习黎明时期的LeNet:揭开卷积神经网络的序幕

在深度学习的历史长河中,Yann LeCun 的 LeNet 是一个里程碑式的研究成果,它为后来的卷积神经网络(Convolutional Neural Networks,CNN)的发展奠定了基础。LeNet 的诞生标志着深度学习黎明时期的到来,为人工…

11.22数电第四次报告

《数字逻辑》实验报告 姓名 贾轲 年级 22 学号 20220669 专业、班级 计算机科学与技术计卓01 实验名称 实验十五 摩尔状态机序列检测器&实验十六 米利状态机序列检测器 实验时间 2023.11.23 实验地点 DS1410 实验成绩 实验性质 □验证性 □设计性 □…

oracle查询开始时间和结束时间之间的连续月份

SELECT TO_CHAR(ADD_MONTHS(TO_DATE(2023-01,YYYY-MM), ROWNUM - 1), YYYY-MM) AS fmonth FROM DUALCONNECT BY ROWNUM < CEIL(MONTHS_BETWEEN(TO_DATE(2023-11, YYYY-MM), TO_DATE(2023-01,YYYY-MM))1)

入侵redis之准备---Centos7上面部署redis

入侵redis之准备—Centos7上面部署redis 编写这个部署redis&#xff0c;只是为了另一个文章入侵redis做准备&#xff0c;网上还有好多类似的文章&#xff0c;这个单纯的就是部署安装&#xff0c;并简单的测试使用以下 关联其他文章 [1]VMware上面安装部署centos7镜像系统【详细…

解决:ValueError: binary mode doesn‘t take an encoding argument

解决&#xff1a;ValueError: binary mode doesn’t take an encoding argument 文章目录 解决&#xff1a;ValueError: binary mode doesnt take an encoding argument背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#…

淼一科技为互联网企业销毁硬盘数据 拆除机房设备

在上海这座繁华的大都市&#xff0c;淼一科技以其专业的服务和卓越的技术&#xff0c;为众多互联网企业提供硬盘数据销毁和机房设备拆除服务。作为业界领先的数据安全解决方案提供商&#xff0c;淼一科技致力于保障客户数据的安全与隐私&#xff0c;为客户创造更高的商业价值。…

公网穿透和RTC

RTC RTC 是 Real-Time Communication 的简写&#xff0c;正如其中文名称 “即时通讯” 的意思一样&#xff0c;RTC 协议被广泛用于各种即时通讯领域&#xff0c;诸如&#xff1a; 在线教育&#xff1b;直播中的主播连麦 PK&#xff1b;日常生活的音视频电话&#xff1b;.....…

KaiwuDB 多模数据库-时序性能优化

随着物联网领域的快速发展&#xff0c;时序数据的产生和处理需求不断增长。为了满足实时性、高效性和准确性的要求&#xff0c;数据库需要进行时序性能优化&#xff0c;以提供快速的数据写入、实时查询和高效的数据存储与处理能力。 本期直播介绍了时序数据和时序数据库特征以…

ESP32-Web-Server编程-CSS 基础 2

ESP32-Web-Server编程-CSS 基础 2 概述 如上节所述&#xff0c;可以使用外部 CSS 文件来修饰指定的 HTML 文件。 外部引用 - 使用外部 CSS 文件。 当样式需要被应用到很多页面的时候&#xff0c;外部样式表将是理想的选择。使用外部样式表&#xff0c;就可以通过更改一个文件…

NV040C语音芯片:让自助ATM机使用更加安全快捷

近年来&#xff0c;移动支付方式的兴起、银行加强线上化服务、数字人民币项目推进等因素的影响&#xff0c;人们使用ATM机的频率呈现小幅度的下降趋势。然而&#xff0c;自助ATM机并未从我们的视野中消失&#xff0c;它们仍然在金融领域发挥着重要的作用。未来&#xff0c;ATM机…

分类预测 | Matlab实现NGO-KELM北方苍鹰算法优化核极限学习机分类预测

分类预测 | Matlab实现NGO-KELM北方苍鹰算法优化核极限学习机分类预测 目录 分类预测 | Matlab实现NGO-KELM北方苍鹰算法优化核极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-KELM北方苍鹰算法优化核极限学习机分类预测&#xff08;完…

成都爱尔樊映川院长讲解常见眼底病有哪些

一提到“眼底”这个眼科常用词汇&#xff0c;许多非医疗行业人士认为在眼球下方&#xff0c;其实不然&#xff0c;那眼底在哪呢?眼底其实是眼球内后部的组织&#xff0c;即眼球的内膜——视网膜、视乳头、黄斑和视网膜中央动静脉。 眼底病是一种病种繁多&#xff0c;病因复杂&…

Python Subprocess教程:创建和管理子进程的完整指南

更多Python学习内容&#xff1a;ipengtao.com 在Python中&#xff0c;Subprocess模块为我们提供了强大的工具&#xff0c;使得创建和管理子进程变得十分便捷。本文将深入探讨Subprocess的各种功能和用法&#xff0c;通过丰富的示例代码&#xff0c;带你领略其强大的子进程管理能…

Compensated Summation/Kahan‘s Summation的理解

阅读《Efficient Generation of Error-Inducing Floating-Point Inputs via Symbolic Execution》这篇论文时&#xff0c;文中提到的Commpensated Summation没看太懂&#xff0c;代码如下&#xff1a; 查阅资料发现Compensated Summation也叫Kahan’s Summation&#xff0c;该…

自己动手实现一个深度学习算法——七、卷积神经网络

文章目录 1.整体结构2.卷积层1&#xff09;全连接层存在的问题2&#xff09;卷积运算3&#xff09;填充4&#xff09;步幅5&#xff09;3维数据的卷积运算6&#xff09;结合方块思考7&#xff09;批处理 3.池化层1&#xff09;池化层的特征 4.卷积层和池化层的实现1&#xff09…

C Primer Plus讲解前置说明

说明 本来是准备接着写下去&#xff0c;写着就发现思路整理的有点杂乱无章。果然是“想一千次&#xff0c;不如去做一次”。所以这次准备基于《C Primer Plus》第六版给大家分享一下&#xff0c;也是自己梳理的一个过程。有关C语言的书很多&#xff0c;我选这本也恰巧是因为以前…

7种SQL进阶用法【转】

1.自定义排序(ORDER BY FIELD) 在MySQL中ORDER BY排序除了可以用ASC和DESC之外,还可以使使用自定义排序方式来实现 CREATE TABLE movies ( id INT PRIMARY KEY AUTO_INCREMENT, movie_name VARCHAR(255), actors VARCHAR(255), price DECIMAL(10,2) DEFAULT 50, release date…

L4级智能驾驶公交量产方案

1、自动驾驶分级 2、L4级自动驾驶技术方案 3、线控底盘 4、整车传感器方案 5、自动驾驶能力 6、运控平台

在Linux中对Docker中的服务设置自启动

先在Linux中安装docker&#xff0c;然后对docker中的服务设置自启动。 安装docker 第一步&#xff0c;卸载旧版本docker。 若系统中已安装旧版本docker&#xff0c;则需要卸载旧版本docker以及与旧版本docker相关的依赖项。 命令&#xff1a;yum -y remove docker docker-c…

【Docker】python flask 项目如何打包成 Docker images镜像 上传至阿里云ACR私有(共有)镜像仓库 集成Drone CI

一、Python环境编译 1、处理好venv环境 要生成正常的 requirements.txt 文件&#xff0c;我们就需要先将虚拟环境处理好 创建虚拟环境&#xff08;可选&#xff09;&#xff1a; 在项目目录中&#xff0c;你可以选择使用虚拟环境&#xff0c;这样你的项目依赖将被隔离在一个…