SAP和Python集成或如何从SAP轻松获取数据

下午好,哈伯!

我想分享一个有趣的任务的经验,即如何使用Python轻松与SAP系统进行交互-平台的哪个模块或版本都没有关系。

如果仅技术解决方案很有趣,请跳过所有歌词,然后查看示例实现。

歌词


归根结底,一个客户需要通过操纵已经创建的报告并通过电子邮件以及其他操作将邮件发送给感兴趣的人,从而从其SAP ERP系统下载数据。

实际上,在讨论解决此问题的方法时,我们作为承包商,提出了各种选择,最明显的选择之一就是借助内部SAP功能,以简单的方式在ABAP的Zed所有人的“购物者”中完成所有这些选择。

我们遇到的第一件事是选择从客户的话说并不完全透明的数据的标准,即哪些表的数据,为什么,为什么以及对它们执行什么操作。 如果您举一个例子,那么客户需要利用时间表和假期中的数据来减轻办公室员工的出勤负担。 还有必要使用员工在工作场所的时间分析创建绩效报告,我不会详细介绍,但是我要说的是,花费的时间会影响生产力,但是要找出答案,您需要计算工作时间以及工作成果另一个。 这只是报告的一个示例,客户在讨论中产生了很多。

经过长时间的交谈,我们意识到SAP Query或BI \ BO可以成为这样的解决方案,但是客户对解决方案的估计成本以及最不方便的灵活性并不满意。

Python解决方案


然后我想到了关于pyrfc库资源的文章,因为我不是Python程序员,但是读过一次之后,我决定在家学习它,令我惊讶的是,我是一名业余爱好者通过这种编程语言,我发现连接到任何SAP系统非常简单;而且,这需要20分钟。

二十分钟卡尔!

试想一下,您可以在如此短的时间内不使用数据总线和各种PI \ XI的情况下,就可以配置与SAP ERP系统的连接接口。

实作


最终确保这是一个可行的解决方案并满足客户需求之后,我研究了几个平台(研究了这个平台,大约每10分钟阅读一次),选择了Odoo平台,因为它更易于部署并且具有所有必要的属性,例如:良好界面,访问权限系统,移动应用程序,邮件服务器,良好的数据库界面(psql)。

此外,一切都非常简单。

在客户的虚拟机上安装Odoo (我使用的是版本8),因为 目前,这是最简单的,我知道版本12已经存在,但是该任务并不需要所有很酷的新产品。

安装了所有必需的库,尤其是pyrfc- 有关安装和连接的文章链接

此外,仅需在Odoo平台本身中编写一个小的模块即可实现连接,并且它具有大量的工具可用于可视化数据。

连接到客户系统:

from pyrfc import Connection user = 'user' passwd = 'secretuser' saprouter = '/H/192.168.0.140/S/3297' conn = Connection(user=user, passwd=password, mshost='CLient', msserv='192.168.0.140', sysid='01', group="SPACE", saprouter=saprouter, client='900') 

调用BAPI获取用户信息

 b_result = conn.call('BAPI_USER_GET_DETAIL', USERNAME = 'user', CACHE_RESULTS = ' ') 

用户变更

 updated_address['CITY'] = u'Moscow' r = conn.call('BAPI_USER_CHANGE', USERNAME='user', ADDRESS=updated_address) 

关于表,从SAP获取数据的最重要工具是功能模块RFC_READ_TABLE,SAP平台中还有其他模块可以调用,必须在其上进行设置以表明可以使用RFC调用它们。

例如:

 from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError from ConfigParser import ConfigParser from pprint import PrettyPrinter def main(): try: config = ConfigParser() config.read('sapnwrfc.cfg') - # ,        SAP ERP params_connection = config._sections['connection'] conn = Connection(**params_connection) #    options = [{ 'TEXT': "FCURR = 'USD'"}] pp = PrettyPrinter(indent=4) ROWS_AT_A_TIME = 10 rowskips = 0 while True: print u"----Begin of Batch---" result = conn.call('RFC_READ_TABLE', \ QUERY_TABLE = 'TCURR', \ OPTIONS = options, \ ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME) pp.pprint(result['DATA']) rowskips += ROWS_AT_A_TIME if len(result['DATA']) < ROWS_AT_A_TIME: break except CommunicationError: print u"Could not connect to server." raise except LogonError: print u"Could not log in. Wrong credentials?" raise except (ABAPApplicationError, ABAPRuntimeError): print u"An error occurred." raise 

结果


在此图片中,列出了通过此方法卸载的报告,以及其中一个示例。



总结


总的来说,这种方法为用非常灵活和开放的工具代替非常昂贵的SAP工具和其他工具提供了巨大的机会。

代码示例来自开源。 我没有使用本文中的客户代码的权利,而且我不是Python程序员,我可能在某个地方犯了错误。

我想补充一点,我们已经在与KPI计算相关的大量任务中使用了此工具,将数据输出到其他来源(网站,供应商和客户数据库),基于SAP数据从系统发送信息,等等。
总的来说,这样的机会对我来说是一个发现,如果有人有类似的经历,我很想听听。

PS:我没有解决许可问题,因此我不能肯定地说出任何有关此问题的信息。
谢谢你

哈伯链接
真诚的SAP顾问

Source: https://habr.com/ru/post/zh-CN422681/


All Articles