Python для получения данных из SAP через RFC

Недавно я планирую использовать 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, сообщение =

Расположение 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

СИСТЕМНЫЙ ВЫЗОВ

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 терпит неудачу.

Кто-нибудь может решить это для меня, так как я застрял здесь на несколько дней?

Благодаря ~

1 ответ

"В соединении отказано" - это стандартное сообщение об ошибке TCP/IP, которое означает, что номер порта неверен. Дважды проверьте, действительно ли SystemNumber вашей серверной системы равен "00".

Это сообщение выглядит как проблема с сетью:

В соединении отказано

Другие вопросы по тегам