如何在 pyrfc 中使用 BAPI_USER_CHANGE 更新电子邮件?

How to update email with BAPI_USER_CHANGE in pyrfc?

我能够编写代码以通过 BAPI_USER_GET_DETAIL 从 SAP 获取详细信息,这里附有代码以从 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 我们可以更新新的邮件地址,但尝试了很多次都没有成功!

任何人都可以帮助获得 Python 中 运行 BAPI_USER_CHANGE 的正确语法吗?

对于任何 "Update BAPI",您需要在 BAPI 调用后立即调用 BAPI_TRANSACTION_COMMIT,以便实际将更改提交到数据库。

确保 BAPI_TRANSACTION_COMMIT 在同一个 "connection" 上执行,因为它需要 运行 在同一个后端用户会话中执行。

首先,您的 get BAPI 也有点不正确,也许在旧版本的 PyRFC 上它可以工作,但现在 pyrfc 模块有 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 的调用方式与获取 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': 'User MUELLER has changed', '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 中完美显示。

我认为这是因为 BAPI 结构中的长字符字段导致它无法正确显示。也许这就是您认为通话不成功的原因?