点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我有一个启用了RFC的大型功能模块,该模块在完成销售过程后为配置的物料创建BOM,工艺路线和文档。 最近,我遇到了一个鸡和鸡蛋的问题,其中包含捕获流程中的错误(这很长),然后我们希望从启动创建RFC的同一流程中获取报告。
因此,我认为创建自定义锁可以解决问题,我创建了它,并且可以正常工作了一段时间,但是随后锁"消失了"。 我调试了RFC,发现有些SAP程序员只是使用DEQUEUE_ALL只是为了删除当前在LUW中当前设置的所有锁,而不是仔细维护代码或遍历锁表并标记已经存在的锁 然后遍历它们中的每一个并分别将它们出队。
有两个地方"咬住了我",如下:
1-在FM CSAP_DOC_BOM_CREATE内部,如果发现某些错误,它将执行此操作,并且他们也在FM CS_DI_HEADER_OBJECT_CHECK中执行此操作。 值得庆幸的是,这里有代码,如果您在调用CSAP_DOC_BOM_CREATE之前将X传递给外部内存ID,它不会执行DEQUEUE_ALL。 让我震惊的是,在这种情况下,它们在创建其他任何锁之前先进行了出队。
2-以一种称为routing_clearbuffer的形式,在我调用BAPI_ROUTING_CREATE之后由BAPI_TRANSACTION_COMMIT调用的提交过程中调用了该表单,除了没有保护代码和注释(它们来自617 SP 8)之外,它们执行的操作相同。 介意您-最近)他们说他们解决了没有清除所有锁的问题,因此他们这样做不是代替清理代码并找到他们创建的所有锁,或者像我说的那样-获取以下内容: 在创建更多锁之前,先使用当前用户ID锁定表,然后逐个处理并逐个取消DEQUEUE,将之前的锁留在进程中。
恐怕对于第二种情况,我将要做的是修改代码以免破坏所有的锁,我将放入相同类型的保护代码,因为我只会在以下情况下执行它: 外部内存ID设置为X,如果这样,我将分别删除这些锁。
所以我要问的是,有没有更好的方法可以做到这一点? 发生的事情是,由于我们的自定义锁已被这些DEQUEUE_ALL删除,因此报告丢失了数据,因为它等待锁,锁早就消失了,因此报告没有得到所有错误。
我也希望BAPI和FM CSAP_DOC_BOM_CREATE的文档会说明这种副作用,但是它们都不是。 我必须用一种很难的方法来调试RFC。
注意-我们使用的是SAP版本617 SP 8(EHP7)-ABAP版本7.4
还请注意,当前流程确实可以正常工作,并且确实创建了我们所需的所有内容,只是将错误捕获到了引起问题的CAPI日志之外。
我不知道您的锁是否在启用RFC的功能模块的开头设置,然后在结尾删除,在这种情况下,您可以这样操作:
-锁定
-提交或RFC NONE在另一个内部会话中调用功能模块:DEQUEUE_ALL仅在当前内部会话中删除锁。
-解锁
Sandra-很好的提醒! -在我的两个特定情况下,第一个是CSAP_DOC_BOM_CREATE,它具有自己的提交,然后在BAPI_ROUTING_CREATE之后,我确实调用了BAPI_TRANSACGTION_COMMIT,并且等待时间设置为" X"。
谢谢您的更新,布鲁斯! 如果已回答此问题,请关闭它(请参阅此博客 )。
一周热门 更多>