1

我能够编写代码通过 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我们可以更新新的邮件地址,但尝试了很多次都没有运气!

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

4

2 回答 2

0

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

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

于 2020-03-31T16:56:39.270 回答
0

首先,你的 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': '用户 MUELLER 已更改' , 'LOG_NO': '', 'LOG_MSG_NO': '000000 ','MESSAGE_V1':'MUELLER','MESSAGE_V2':'','MESSAGE_V3':'','MESSAGE_V4':'','PARAMETER':'','ROW':0,'FIELD':'BNAME ','系统':'T90CLNT090'}]

奇怪的新电子邮件在BAPI 调用和 SE37 中均未显示,但在 SU01 中完美显示。

在此处输入图像描述

我认为这是因为 BAPI 结构中的长字符字段会阻止它正确显示。也许这就是你认为你的电话不成功的原因?

于 2020-04-02T08:50:50.727 回答