В последнее время я планирую использовать Python для выборки из SAP через RFC. Я ищу в интернете и выбираю библиотеку 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): ключ = RFC_COMMUNICATION_FAILURE, сообщение =
LOCATION CPIC (TCP / IP) на локальном хосте XXX-XXXXXXX с Unicode
Ошибка партнера "XXX.XXX.XXX.XXX:3300" не достигнута
ВРЕМЯ Вторник 13 ноября 16:33:59 2018
РЕЛИЗ 721
КОМПОНЕНТ NI (сетевой интерфейс)
ВЕРСИЯ 40
RC -10
МОДУЛЬ nixxi.cpp
ЛИНИЯ 3283
ДЕТАЛИ NiPConnect2: XXX.XXX.XXX.XXX:3300
SYSTEM CALL connect
ERRNO 10061
ERRNO TEXT WSAECONNREFUSED: соединение отклонено
СЧЕТЧИК 2
[MSG: класс =, тип =, число =, v1-4: = ;;;]
Кажется, проблема заключается в брандмауэре сервера. И я нашел большинство таких ответов в интернете, включая сообщество SAP.
Затем я telnet порт IP-адреса SAP и получил тайм-аут. Кажется, закрытый порт вызывает сбой соединения.
Но прежде чем использовать 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 терпит неудачу.
Кто-нибудь может решить это для меня, так как я застрял здесь на несколько дней?
спасибо ~