SAP NCo创建BAPI登录会话后设置审计级别失败求助
问题:SAP NCo调用BAPI_XMI_SET_AUDITLEVEL提示未登录
我用C#结合SAP NCo库创建BAPI登录会话并设置审计级别时遇到报错。调用BAPI_XMI_LOGON后能成功获取SESSIONID,且RETURN结构无错误信息,但调用BAPI_XMI_SET_AUDITLEVEL时提示「Not logged on generally (function BAPI_XMI_SET_AUDITLEVEL)」。相同逻辑用Theobald的ERPConnect可正常运行,求排查建议。
代码片段
func = conn.Destination.Repository.CreateFunction("BAPI_XMI_LOGON"); func.SetValue("EXTCOMPANY", "SecureCompany"); func.SetValue("EXTPRODUCT", "TestProduct1"); func.SetValue("INTERFACE", "XAL"); func.SetValue("VERSION", "1.0"); func.Invoke(conn.Destination); string sessionname = func.GetString("SESSIONID"); // 此处能获取到有效值,登录成功 bapiReturnData = func.GetStructure("RETURN"); // bapiReturnData.GetString("MESSAGE")为空,无错误 var func2 = conn.Destination.Repository.CreateFunction("BAPI_XMI_SET_AUDITLEVEL"); func2.SetValue("AUDITLEVEL", "0"); func2.Invoke(conn.Destination); bapiReturnData = func.GetStructure("RETURN"); // 错误:应该读取func2的返回结构 string message = bapiReturnData.GetString("MESSAGE");
排查建议
- 传递SESSIONID到目标BAPI:
BAPI_XMI_SET_AUDITLEVEL需要关联登录生成的会话ID,必须添加func2.SetValue("SESSIONID", sessionname);,否则无法识别当前会话 - 修正返回结构读取对象:当前读取错误信息时用的是
func的RETURN结构,实际应该读取func2.GetStructure("RETURN"),否则获取的是前一个BAPI的返回值,无法准确判断报错原因 - 确认会话上下文一致性:检查
conn.Destination在两次BAPI调用中是否为同一实例,避免会话被重置。部分场景下NCo需要显式维护会话绑定,可尝试通过RfcSessionManager来管理会话 - 检查SAP端XMI权限配置:确认SAP系统中已为外部产品「TestProduct1」配置了XAL接口的审计级别设置权限,ERPConnect能正常运行可能是因为其默认适配了SAP的XMI会话规则
- 对比ERPConnect的参数传递逻辑:查看ERPConnect调用这两个BAPI时的参数细节,特别是是否自动携带了会话相关参数,对应到NCo中实现相同的参数传递逻辑
内容的提问来源于stack exchange,提问作者Cameron Castillo
相关产品推荐
相关产品推荐

