点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
在.net程序中,根据SAP返回的消息,我收到使用BAPI_PO_CREATE1创建的采购订单。 实际上,每次执行时,都会得到一个新的下一个更高的数字PO。 这似乎很好。
另外,在BAPI返回我的.net程序之后,我立即执行BAPI_TRANSACTION_COMMIT。
但是,当我查看SAP时,PO不存在。
BAPI_TRANSACTION_COMMIT中的RETURN结构是初始的。 因此那里没有错误。
对于WAIT = X和BAPI_TRANSACTION_COMMIT中的默认WAIT,我已经尝试了相同的结果。
在该过程中是否有特殊的地方应调用此BAPI_TRANSACTION_COMMIT? 在调用CREATE PO BAPI之后,我立即"假设"是正确的时间和地点。
您好沃德,
如果我正确地提出了您的问题,则需要两个步骤。 首先,您调用bapi PO创建PO,然后
u调用BAPI_TRANSACTION_COMMIT提交工作。
第一步,当调用返回回到.net程序时,sap中的缓冲区数据 刷新后,当您在第二步中调用commit时,缓冲区中没有数据可写入数据库。
如果要实现此功能,则必须编写客户RFC,在该客户RFC中,先调用PO bapi,然后再调用BAPI_TRANSACTION_COMMIT。 现在,请在您的.net程序中调用此RFC。
非常感谢,
Jitendra
没有来自COMMIT BAPI的返回消息,
嗨,
您在bapi'BAPI_PO_CREATE1'的返回表中收到什么消息?
检查导入参数'TESTRUN',此参数必须为空才能创建PO。
问候
Vijaymadhur。
嗨沃德尔,
从我使用外部调用到需要提交的BAPI的经验来看,这是我设法解决该问题的方法:
就是这样! 当然,我对这种解决方案并不感到骄傲,但它确实有效。 另一个解决方案是使用原始BAPI的隐式增强点(最后)并测试会话参数(用户,用户类型等),以便决定是否调用BAPI_TRANSACTON_COMMIT-它也可以工作!
此致
João
使用RfcTransaction意味着它将作为异步请求执行,并且应用程序将不会获得响应参数。 因此,如果需要同步处理,则唯一有效的方法是使用RfcSessionManager.BeginContext/JCoContext.begin启动有状态序列,在该状态序列中调用BAPI和BAPI_TRANSACTION_COMMIT。 因此,您没错,但我没有考虑使用RfcSessionManager.EndContext/JCoContext.end,因为如果不使用它们,则会将后端资源的释放延迟到会话在连接器端完成的时间点, 释放与此会话关联的所有打开的连接。 好的编码风格将尽早释放资源。
最好的问候,
Markus
使用内置提交创建自定义RFC并不是正确的方法 问题:您正在进行服务器端ABAP更改,而C#客户端需要在与提交调用相同的上下文中调用有状态BAPI RFC,以便SAP能够理解正确的LUW来完成。 通常,客户端程序员没有开发人员访问SAP服务器的权限即可更改或添加RFC。 问题在于,默认情况下,连接是无状态的,BAPI RFC永远不会与提交匹配,反之亦然。 提交将返回虚拟成功,该成功仅表明SAP提交了默认的空事务。 相反,这两个调用需要绑定在一起。 为此使用RfcTransaction对象的方法是正确的。 另一种方法可能是使用BeginContext将上下文固定在RfcDestination上,然后调用BAPI RFC,然后显式调用BAPI COMMIT,然后可选地调用EndContext(将在不影响JCo/Nco的情况下工作,但对JCo/Nco更好,以允许清理其保留的上下文 的轨迹。
Markus Tolksdorf 我说对了吗?
一周热门 更多>