python连接sap并调用 SAP RFC接口

文章目录

  • 前言
  • 一、我们需要使用到那些工具?
  • 二、具体步骤
    • 1.下载pyrfc包
    • 2.引入包
    • 3.下载 netweaver rfc 的 sdk
    • 4.配置下载的SDK
    • 5.代码实现
    • 6.数据展示
  • 总结

前言

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

提示:以下是本篇文章正文内容,下面案例可供参考

一、我们需要使用到那些工具?

  1.python的pyrfc包
  2.sap netweaver rfc 的 sdk

二、具体步骤

1.下载pyrfc包

  在终端中输入 pip install pyrfc -i https://pypi.mirrors.ustc.edu.cn/simple/
  这里笔者使用了中国科学技术大学的镜像源不然下载就会很慢

2.引入包

代码如下(示例):

import pyrfc

3.下载 netweaver rfc 的 sdk

  a.下载的方式有两种
    1.官网下载
      a. 一种是有sap账号权限的可以去官网中下载 下载链接
      b. 点击下方图片箭头的地方可以跳转对应下载页面首先会让你登录点击箭头的地方可以跳转对应下载页面首先会让你登录
    2.找现成的
      a.还有一种就是在百度中搜索找现成的下载
      b.这里我给大家也提供一个下载链接 https://pan.baidu.com/s/1HVX6syxZiWcfed-kb6CcFQ 提取码:afp7
      c.https://gitee.com/wwsheng009/nwrfcsdk 这里还有gitee的下载地方
    3.如果有sap权限的最好建议去官网下载最新版。

4.配置下载的SDK

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

  3.为什么要这样配置?直接在path中配置lib bin目录的绝对路径不行吗?
    a.这个原因和pyrfc这个模块包的源码有关系,我们可以按住ctrl鼠标点击pyrfc这个包跳入源码界面。
点击进入源码
    b.我们可以看到这一行是依据SAPNWRFC_HOME系统变量引入了这个lib目录中的dll组件,所以我们配置环境变量的时候要像上面那样配置才可以成功使用此sdk。
源码详解
  4.注意如果这样配置完成之后跑代码出现加载模块包错误就重启电脑让环境变量重置然后再试一下,笔者亲测。

5.代码实现

  直接上源码后面再详细解释

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方法调用SAP BAPI:第一个参数是需要调用的函数模块,后面是bapi的参数,注意一定要用参数名=参数值的方式
# call方法的返回值是字典形式键值对是:{'ET_DATA':[],'DATA':[], 'FIELDS': [],'OPTIONS':[]}
result = conn.call("RFC_READ_TABLE", QUERY_TABLE='TCURR')
# print(result)
# 数据简单展示一下
for i in result['DATA']:
    print(i)

  代码运行效果

  1.这里我们只是简单调用以及展示了一下,call方法还可以写些许参数,稍后详解。
    a.Connection方法的参数的参数如何查看
      1.我们可以在sap的登录界面右击登录条目点击属性即可查看 如图所示
Connection方法的参数
    b.call方法我们调用的是sap中的函数模块RFC_READ_TABLE方法,查看的是TCURR表。
      1.我们可以在sap中输入事务码se37去查找或者测试相应的函数模块,如图所示
se37
  2.这里的quer_table输入我们需要查询的表名,下方的option可以输入我们的查询条件等等。输入完了之后点击左上角的执行我们想要的数据就可以被取到,执行完必要点击下方数据展示的哪个图标才可以查看我们的数据。
  3.这里的option以及fields参数我们可以在代码中这样写
    a.

#示例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)

  4.示例1,2运行结果就是只取TCURR表中的FCURR字段并且FCURR字段还必须等于USD,示例2中的EQ就是等于的意思和示例1是一个意思,其中示例3需要注意一下,我看其他文章都是逗号分隔每个筛选条件,但是我试过了不行,在se37里面我发现是要用and连接在python这里我也试了一下确实是需要用and连接。
    a.示例1,2运行效果
示例1,2运行效果
    b.示例3运行效果图片,这里只有一条是符合我们筛选条件的,我的pyrfc包版本是__version__ = “2.7.0”
示例3运行效果
  5.这里再给大家附上一张abap OPTIONS筛选条件的一张表,以供大家参考。
OPTIONS

6.数据展示

   1.如果对打印格式有要求的大家可以去了解学习 python 中 tablib 这个包,这个包可以专门格式化数据的,打印出来的数据格式是比较规整的,如果是做web那么就自己写循环或者用前端框架,我们只需要处理成对应的数据格式传给前端就可以了。
   2.tablib 包数据处理效果展示
tablib 包数据处理效果展示

总结

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年9月8日
下一篇 2023年9月8日

相关推荐