除了通过SAP进行总锁出队编程的代码修改以外,还有其他方法吗?

2020-09-24 06:52发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个启用了RFC的大型功能模...

         点击此处--->   EasySAP.com群内免费提供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日志之外。