Как обновить электронную почту с BAPI_USER_CHANGE в pyrf c? - PullRequest
1 голос
/ 26 марта 2020

Мне удалось написать код для получения подробностей от SAP через BAPI_USER_GET_DETAIL, вот прикрепленный код для получения электронной почты от бэкэнда SAP:

import pyrfc
from pyrfc import Connection
setup= pyrfc.Connection(user=X , passwd=Y , mshost=Z , sysid=A , client=B , msserv= C , group=D )
result=setup.call(BAPI_USER_GET_DETAIL, USERNAME=abc)
print (result['ADDRESS']['E_MAIL'])

Ожидаемый результат: abc@xyz.com

Мне нужно обновить адрес электронной почты для конкретного пользователя в SAP, после того как исследование показало, что с помощью BAPI_USER_CHANGE мы можем обновить новый адрес электронной почты, но пытались много раз, но безуспешно!

Может кто-нибудь помочь с правильным синтаксисом для запуска BAPI_USER_CHANGE в Python?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Прежде всего, ваш get BAPI также немного неправильный, возможно, на старых версиях PyRF C он работал, но теперь модуль pyrf c имеет объект Connection, а не connection, и ваш код вызывает компиляцию ошибка. Это должно быть следующим образом:

import pyrfc
from pyrfc import Connection
RIS=pyrfc.Connection(user='USER', passwd='pw', ashost='hostey.com', sysid='KEK', sysnr='00', client='200', lang='EN', trace='3')
result=RIS.call("BAPI_USER_GET_DETAIL", USERNAME='MUELLER')
print(result['ADDRESS']['FULLNAME'])

Во-вторых, изменение BAPI называется так же, как get BAPI, для меня этот код работал

ADDR = { "E_MAIL": 'wazawaza@mail.com'}
ADDX = { "E_MAIL": 'X'}
changed=RIS.call("BAPI_USER_CHANGE", USERNAME='MUELLER', ADDRESS=ADDR, ADDRESSX=ADDX)
print(changed["RETURN"])

, он должен показывать вам что-то вроде этого вывода, если выполняется правильно

[{'TYPE': 'S', 'ID': '01', 'NUMBER': '039', 'MESSAGE': 'Пользователь MUELLER изменился' , 'LOG_NO': '', 'LOG_MSG_NO': '000000', 'MESSAGE_V1': 'MUELLER', 'MESSAGE_V2': '', 'MESSAGE_V3': '', 'MESSAGE_V4': '', 'PARAMETER ':' ',' ROW ': 0,' FIELD ':' BNAME ',' SYSTEM ':' T90CLNT090 '}]

Странно новый адрес электронной почты не не показывал ни с вызовом BAPI, ни в SE37, но отлично показано в SU01.

enter image description here

Я думаю, что это из-за длинного поля char в структуре BAPI, которое предотвращает его от показа правильно. Может быть, именно поэтому вы сочли ваш звонок неудачным?

0 голосов
/ 31 марта 2020

Для любого «Обновления BAPI» вам нужно вызвать BAPI_TRANSACTION_COMMIT сразу после вашего вызова BAPI, чтобы фактически зафиксировать изменения в базе данных.

Убедитесь, что BAPI_TRANSACTION_COMMIT выполняется на том же «соединении», потому что он должен работать в том же сеансе бэкэнда.

...