python连接sap并调用 SAP RFC接口


前言

        Python 在我们工作中的作用还是有很多的,尤其是在数据处理方面和自动化等等,可以说是无所不能,这篇文章来给大家介绍一下 Python 如何连接 SAP 并调用 SAP 的 RFC 接口。首先给大家简单介绍一下 Pyrfc 这个包,Pyrfc 是 Python 语言的一个包,是用于连接 SAP 系统并执行 SAP 的 RFC 函数模块。这包为我们提供了 Python 语言与 SAP 系统之间的桥梁,使得 Python 开发者可以在 Python 中方便地调用 SAP 的 RFC 函数模块,我们也可以配合 django 或者其他 web 框架搭建一个 web 网站实现与sap系统的集成。


一、案例介绍/笔者需求

        这个案例我们会先进行依赖的下载和环境的配置,以及 Python 所需包的下载。然后再使用 Python 连接 SAP 并调用 SAP 的一个标准函数。至于笔者为什么会研究学习这个是因为我本身就是 Python 和 .Net 出身对 BS 架构的软件很感兴趣,后来因为领导有想对 SAP 数据可视化的需求,所以我个人第一时间想到的就是 Python。因为它搭建 web 服务的速度非常快,我的想法是用 Python 提取 SAP 中的数据,并对数据进行处理然后再使用 ECharts 对数据进行可视化展示。ECharts官网


二、依赖 包 下载 环境配置

          这篇文章中的这个步骤二是最重要的,因为这个个案例主要就是介绍如何下载资源如何配置,我在最刚开始的时候就在环境的配置上踩了好多坑。所以下面环境的配置大家还是要仔细的看一看,代码的话其实都很简单的。

            a.下载连接SAP所需的SDK

                      这个依赖的全称叫做 SAP Netweaver RFC SDK <版本号>,它的下载方式有很多种 如果有SAP账号的还是建议去官网下载的。笔者这里也为大家介绍多种下载方式。

                       1.资源绑定下载
                            笔者的这篇文章已经绑定了这个资源大家可以免费下载。

                       2.SAP官网下载
                            下载链接 点击下方图片箭头的地方可以跳转对应下载页面首先会让你登录。
点击箭头的地方可以跳转对应下载页面首先会让你登录

                       3.直接找现成的
                            我们也可以在各大搜索引擎中直接找现成的下载。或者在 Github 和 Gitee 中也有,Gitee的下载连接在这 Gitee下载

            b.SDK环境变量的配置

                       1.需要配置的目录
                            我们需要将下载的 sdk 文件中的 bin 目录和 lib 目录配置到环境变量中。如下图所示
目录详情
                       2.环境变量的配置
                            这里需要注意的是配置这两个目录的环境变量不像我们配置 Python 的环境变量哪样直接到系统变量的 path 下新建,而是先要在系统变量中新建一个 SAPNWRFC_HOME 变量,变量值就是 nwrfcsdk 目录也就是 bin 或者 lib 的上级目录,再去系统变量 path 中依据我们刚才在系统变量新建的 SAPNWRFC_HOME 变量基础上再去新建 bin 变量 和 lib 变量。具体原因稍后解释。

                            a.首先配置系统变量
首先配置系统变量

                            b.在path中配置bin和lib目录变量
在path中配置bin和lib目录变量

                       3.这样配置的具体原因
                            为什么要这样配置?直接在系统变量 path 中配置 lib bin目录的绝对路径不行吗?这个原因和 Pyrfc 这个包的源码有关系,具体原因如下图所示。

                            a.查看源码
                                 我们可以按住 ctrl 鼠标左键点击 pyrfc 这个包跳入源码界面。
点击进入源码
                            b.源码如何引入的组件
                                 我们可以看到这一行代码是依据 SAPNWRFC_HOME 系统变量引入了这个 lib 目录中的 dll 组件,所以我们配置环境变量的时候要像上面那样配置才可以成功使用此sdk。
源码详解

                       4.加载模块包出错的解决方法
                            注意如果这样配置完成之后跑代码出现加载模块包错误 ImportError: DLL load failed: 找不到指定的模块。 就重启电脑让环境变量重置然后再试一下,笔者亲测有用。

            c.Pyfrc包的下载

                      包的下载还是比较简单的也不用你自己配置只要使用了对应 python 虚拟环境即可,包的下载 主要就是镜像源的使用 和 pip 版本的问题。如果没有镜像源那么下载速度就会很慢,因为它默认是从国外的服务器下载资源的,如果pip版本比较低的话也会下载失败。有些冷门包是很难下载的大家可以去网上看看如何手动下载并导入虚拟环境的文章教程。
                       1.国内的镜像源
                            个人平时喜欢使用 中国科技大学的镜像源 因为我觉得这个没出现过什么问题。

NameUrl
中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/
阿 里 云http://mirrors.aliyun.com/pypi/simple/
清华大学https://pypi.tuna.tsinghua.edu.cn/simple
豆 瓣http://pypi.douban.com/simple/
华中理工大学http://pypi.hustunique.com/
山东理工大学http://pypi.sdutlinux.org/

                       2.使用镜像源下载
                            直接在终端中输入 pip install pyrfc -i https://pypi.mirrors.ustc.edu.cn/simple/

三、连接SAP调用RFC

            a.直接上代码

                       这里的先直接上全部代码 稍后再详细解释。代码中的注释也写的很清楚。
                       1.源码

import pyrfc

ASHOST = 'xx.xx.xx.xx'
CLIENT = 'xxx'
SYSNR = 'xx'
USER = 'xxxxxxx'
PASSWD = 'xxxxxxx'
# 创建链接Connection方法的参数 ashost=应用服务器 sysnr=实例编号 client=客户端 user=登录对应客户端的用户名 passwd=密码
conn = pyrfc.Connection(ashost=ASHOST, sysnr=SYSNR, client=CLIENT, user=USER, passwd=PASSWD)
# 使用call方法调用RFC 第一个参数是需要调用的函数模块,后面是RFC导入的参数,注意一定要用参数名=参数值的方式
# call方法的返回值是字典形式键值对是:{'ET_DATA':[],'DATA':[], 'FIELDS': [],'OPTIONS':[]}
result = conn.call("RFC_READ_TABLE", QUERY_TABLE='TCURR')
# print(result)
# 数据简单展示一下
for i in result['DATA']:
    print(i)

                       2.运行效果
在这里插入图片描述

            b.代码实现的详细解释

                       1.连接参数的查看
                            Connection这个类实例化对象的时候传入的参数其实就是我们SAP系统连接的参数,我们可以在sap的登录界面右击登录条目点击属性即可查看到 如下图所示
Connection方法的参数

                       2.call方法多参数使用
                           上面案例我们 call 方法我们调用的是 sap 中的标准函数 RFC_READ_TABLE 这个函数是用来读取 SAP 透明表的一个函数,我们查的是 TCURR 这个表。这个表是存储了各个货币之间的汇率的数据。
                           a.se37查看函数
                               下图所示是这个函数的一些入参出参的介绍,query_table 是我们需要查询的表名,表传入传出的 fields 是我们要查询对应表的字段、option 是我们的查询条件、data 是查询最终返回的数据。输入完了之后点击左上角的执行我们数据就可以被我们所设置的条件取到data中。
se37
在这里插入图片描述

                           b.call方法设置调用条件
                               这里的 option 以及 fields 参数我们可以在代码中这样写。示例 1,2 运行结果就是只取 TCURR 表中的 FCURR 字段并且 FCURR 字段还必须等于 USD,示例2 跟 示例1 效果一样 只是把运算符 = 换为了 EQ,其中示 例3 需要注意一下,我看其他文章都是逗号分隔每个筛选条件,但是我试过了不行,也可能跟包的版本有关系,我的 pyrfc 包版本是__version__ = “2.7.0”,后来我还是在se37里面发现是要用 and 连接在 python 这里我也试了一下确实是需要用 and 去连接多个条件。

#示例1
options = [{'TEXT': "FCURR = 'USD'"}]
fields = ['FCURR']

#示例2
options = [{'TEXT': "FCURR EQ 'USD'"}]
fields = ['FCURR']

#示例3
options = [
    {'TEXT': "FCURR = 'USD'"} and
    {'TEXT': "TCURR = 'RMB'"}
]
fields = ['FCURR', 'TCURR']

#使用call方法并传入相应参数
result = conn.call("RFC_READ_TABLE", QUERY_TABLE='TCURR', OPTIONS=options, FIELDS=fields)

                           c.运行效果
                                示例1 2
示例1,2运行效果
                                示例3
示例3运行效果

四、数据格式化

           如果对数据打印格式有要求的大家可以去了解 python 中 tablib 这个包,这个包是专门格式化数据的,打印出来的数据格式是比较规整的,如果有 web 开发经验的可以直接使用 html 配合 js 做成表格也可以,或者用一些前端的框架,我们只需要处理成对应的数据格式传给前端就可以了。

            a.tablib 包

                       1.tablib包 数据处理效果展示
tablib 包数据处理效果展示

五、总结

           以上就是今天要讲的内容,本文仅仅简单介绍了python如何去连接我们的sap并如何调用sap中的RFC函数模块,大家也可以尝试着和web开发结合起来,也可以和处理 excel 的包 openpyxl 结合起来直接从表中取的我们的数据,再处理成我们想要的数据结果,等等,本文有说错或者不好的地方还请大家多多指教,如果觉得写的可以对您有帮助的话还麻烦点赞转发一下,也欢迎大家再评论区一起讨论,谢谢大家。感谢。

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao贱贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值