SAP 接口编程 - PyRFC

之前我有比较系统地讲解过 SAP 接口编程,但没有使用 Python 语言的,主要是因为没有一个合适的 package。偶见几篇介绍 PyRFC 的文章,看到 pyrfc 对 unicode 的支持实在不敢恭维,没有任何尝试的欲望。现在 PyRFC 已经演进到了 2.1 版(https://pypi.org/project/pynwrfc/),感觉 1.9 版后出现了质的飞跃,代码在 Github 上开源(https://github.com/SAP/PyRFC)。由于 Python 语言的简洁,是开发 SAP 接口编程一个不错的选择了。

Windows 安装 PyRFC 的方法

安装 SAP NW RFC SDK

PyRFC 的主要难点在安装,我以 Windows 10 系统为例介绍安装的方法。PyRFC 是用 Python 语言对 SAP NW RFC SDK 的一个封装,使得 Python 可以方便地调用 SAP 的 BAPI。SAP NW RFC SDK 是 C 语言编写的用于访问 SAP BAPI 的开发工具包 (Development kit),在安装 PyRFC 之前,要先安装 SAP NW RFC SDK,这个开发工具包是向后兼容的,安装的时候,可以选择最新的版本。SAP 官方(https://support.sap.com/ ) 提供下载,但需要有下载权限。为了方便小伙伴们学习,我在附件源码的 lib 文件夹下面提供了这个 SDK。

这是一个压缩包,解压之后,里面的文件夹结构是这样的:

把 META-INF 文件夹和 SIGNATURE.SMF 文件移入 nwrfcsdk 文件夹,这样 nwrfcsdk 文件夹的结构应该是这样的:

然后配置环境变量。首先配置 SAPNWRFC_HOME 环境变量:


接下来配置 Path 环境变量,将 nwrfcsdk 文件夹下面的 lib 和 bin 文件夹加入到 Path 环境变量:


这里有一个细节,我前面刻意改变了 META-INF 文件夹和 SIGNATURE.SMF 文件 的位置,是因为我安装 PyRFC 后,出现 DLL 加载错误:

ImportError: DLL load failed: 找不到指定的模块。

刚开始以为是环境变量配置错误的原因,经检查环境变量配置没有问题但还是出错,经查看 pyrfc 的源码,看到代码文件 _init_.py 有一段关于加载 dll 的代码:


这说明, lib 文件夹应该是 SAPNWRFC_HOME 环境变量指向文件夹直接下层文件夹。

安装 PyRFC

PyRFC 支持 pip 方式安装,但这里大家可能碰到两个比较棘手的问题。首先 pip install pyrfc 只支持 0.12 版本的安装,这个版本太老,不适合使用。第二是 pip install pynwrfc 安装 pyrfc 现在最新版是 2.1,可能与 SAP NW RFC SDK 版本冲突,出现找不到 DLL 错误。这个时候,大家要尝试 pyrfc 选择一个合适的pyrfc 版本。我测试的时候,nwrfc750P_0-70002755 和 pyrfc1 .9.9 版本没有问题。大家在这里可以找到 pyrfc 的各个版本:https://github.com/SAP/PyRFC/tags

根据操作系统和 Python 的版本,选择合适的包下载,用 pip install pyrfc-1.9.99-cp37-cp37m-win_amd64.whl 进行本地 wheel 文件的安装。

安装完成后,进入 Python 环境,查看 pyrfc 和 NW RFC SDK 的版本:

import pyrfc
print (pyrfc.__version__) # 检查 pyrfc 的版本
print (pyrfc.get_nwrfclib_version()) # 检查 SAP NW RFC SDK 的版本

PyRFC 使用示例

PyRFC 的使用比较简单:

  • 设置登录参数,通过 Connection() 方法获取 SAP 的连接,PyRFC 自动管理连接,不需要手工打开和关闭,登录参数可以是字典类型的参数,见下面示例
  • 通过 connection.call() 方法调用 SAP BAPI,不区分 Import, Export 和 Table 等参数类型,用关键字参数对应 SAP 的参数
  • Table 参数通过列表(list) 和字典(dict) 的组合来表达,参见下面的 OPTIONS 参数

以 RFC_READ_TABLE 函数为例,下面的代码展示了如何使用 PyRFC 获取 SAP 示例数据 SPFLI 表的内容。输出显示用到了 Python 第三方 tablib 库。

import pyrfc
import tablib

conn_params = {
    "user": "stone",
    "passwd": "123456",
    "ashost": "192.168.44.100",
    "sysnr": "00",
    "lang": "EN",
    "client": "001"
}
def read_table():
    conn = pyrfc.Connection(**conn_params)

    option_parameter = [
        {"TEXT": "COUNTRYFR EQ 'US' "}
    ]

    result = conn.call('RFC_READ_TABLE', 
                        QUERY_TABLE = "SPFLI",  
                        DELIMITER = ",",
                        OPTIONS = option_parameter)

    # 获取 FIELDS 表参数
    fields = tablib.Dataset()
    fields.dict = result['FIELDS']
    print(fields)

    # 获取 DATA 表参数
    data = tablib.Dataset()
    data.dict = result['DATA']
    print(data)    


if __name__ == "__main__":
    read_table()

运行程序的结果如下:

源码

github - pyrfc test

参考

Installation — pyrfc 2.0.2 documentation

Using Python to insert data into SAP with PyRFC

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
kettle-sap-plugin-core是一个针对Kettle(现在被称为Pentaho Data Integration)的插件核心库。Kettle是一种用于数据集成和转换的开源工具,拥有强大的ETL(Extract, Transform, Load)功能。而kettle-sap-plugin-core则是Kettle插件的核心库之一,专门用于与SAP系统进行集成。 SAP(Systems, Applications and Products in Data Processing)是一家全球领先的企业级软件公司,其产品广泛应用于各种业务领域,包括财务会计、供应链管理、人力资源管理等。kettle-sap-plugin-core提供了一系列用于连接和与SAP系统交互的功能组件,方便用户在Kettle中进行SAP数据的抽取、转换和加载。 这个插件核心库支持与SAP系统的各种模块进行集成,如SAP ERP(Enterprise Resource Planning)、SAP BW(Business Warehouse)、SAP HANA等。用户可以通过kettle-sap-plugin-core,使用Kettle的图形化界面来配置和管理与SAP系统之间的数据传输、转换和同步任务。 kettle-sap-plugin-core具有以下特点: 1. 支持SAP系统的多种连接方式,包括JCo(Java Connector)、BAPI(Business Application Programming Interface)等。 2. 提供了丰富的连接器,用于与SAP系统的不同模块进行交互,如SAP输入、SAP数据输出、SAP函数调用等。 3. 支持对SAP数据的抽取、转换和加载,提供了多种数据转换和处理操作,如数据映射、过滤、排序、聚合等。 4. 具有高度可扩展性,用户可以根据自己的需求进行插件的定制和扩展。 总之,kettle-sap-plugin-core是一个在Kettle中实现与SAP系统集成的重要插件核心库,方便用户进行ETL任务的开发和管理,实现SAP数据的快速、高效地处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值