Python通过RFC从SAP提取数据

时间:2018-11-14 05:06:08

标签: python vba sap saprfc pyrfc

最近,我计划使用Python通过RFC从SAP提取数据。我在互联网上搜索并选择PyRFC库来完成任务。除连接外,其他一切正常。该代码停止并在连接到SAP时显示错误消息。代码如下:

import pyrfc
def get_connection(connmeta):
print('Connecting ...', connmeta['ashost'])
return Connection(**connmeta)

TEST = { 'user' : 'XX',
'passwd' : 'XX',
'ashost' : 'XXX.XXX.XXX.XXX',
'sysnr' : '00',
'client' : '400',
'lang' : 'EN' }

conn = get_connection(TEST)
  

错误消息

     

pyrfc._exception.CommunicationError:RFC_COMMUNICATION_FAILURE(rc = 1):key = RFC_COMMUNICATION_FAILURE,message =

     

具有Unicode的本地主机XXX-XXXXXXX上的LOCATION CPIC(TCP / IP)

     

未达到错误的合作伙伴“ XXX.XXX.XXX.XXX:3300”

     

TIME Tue Nov 13 13 16:33:59 2018

     

发布721

     

COMPONENT NI(网络接口)

     

版本40

     

RC -10

     

MODULE nixxi.cpp

     

LINE 3283

     

详细信息NiPConnect2:XXX.XXX.XXX.XXX:3300

     

系统调用连接

     

ERRNO 10061

     

错误文本WSAECONNREFUSED:连接被拒绝

     

COUNTER 2

     

[MSG:class =,type =,number =,v1-4:= ;;;]

似乎问题出在服务器的防火墙中。而且我在互联网(包括SAP社区)上搜索了大多数此类答案。

然后我远程登录SAP IP的端口并超时。似乎关闭的端口会导致连接失败。

但是在使用Python之前,我曾使用VBA从SAP获取数据。 VBA中的配置与Python中的配置几乎相同

Set R3 = CreateObject("SAP.Functions")  
    R3.Connection.System = "PRT"  
    R3.Connection.ApplicationServer = "XXX.XX.XX.XX" 
    R3.Connection.Client = "400" 
    R3.Connection.SystemNumber = "00" 
    R3.Connection.User = "XX"
    R3.Connection.Password = "XX" 
    R3.Connection.Language = "EN" 
    R3.Connection.Codepage = "1100"

retcd = R3.Connection.Logon(1, True) 
If retcd <> True Then  
   MsgBox "Logon failure" 
Else 
   MsgBox "Logon success" 
End If

它工作正常,但效率低下,这就是为什么我选择Python作为解决方法。

我很困惑为什么VBA成功但python失败了。

我被困在这里几天,有人能为我解决吗?

谢谢〜

2 个答案:

答案 0 :(得分:0)

此消息似乎是网络问题:

  

连接被拒绝

答案 1 :(得分:0)

“拒绝连接”是标准的TCP / IP错误消息,表示端口号不正确。仔细检查您的后端系统的SystemNumber是否真的为“ 00”。