本期,边肖将为您带来关于SAP费奥里中两种锁定机制是如何实现的信息。文章内容丰富,从专业角度进行分析和描述。希望你看完这篇文章能有所收获。
方法:etag机制
思爱普CRM费奥里采用了这种机制。
看一个具体的例子来理解。假设我选择了ID为3456、用户名为Jerry的商机,在单击编辑按钮后:
将触发读取操作并将其发送到后台:
后台响应这个读取请求,并在响应的头字段ETAG中写入相应的值。
应用程序可以逻辑计算26AE结尾的ETAG值,可以直接采用请求节点对应的上次更改时间戳,例如下面的ABAP代码:
您还可以根据数据的完整内容计算哈希值,并将其作为ETAG返回给费奥里UI:
现在我使用另一个用户修改同一个机会并成功保存。然后回到用户Jerry的编辑窗口。此时,Jerry并不知道Opportunity已经被另一个用户修改了。杰里修改了机会的名称字段,并点击了保存按钮。
收到此提示信息。
从Chrome Development Tool中可以观察到,当Jerry点击Save按钮时,发送到后台的请求的头部包含一个If-Match字段,该字段的值为26AE末尾的ETAG字段,当Jerry第一次点击Edit按钮时,后台返回给Jerry。
背后发生了什么?求你了。在框架的方法CHECK_BEFORE_MODIFICATION中,框架会将费奥里UI请求的传入ETAG与当前最新的ETAG进行比较:
CHECK_BEFORE_MODIFICATION调用CHECK_ETAG_MATCH方法。如果检查失败,将不会执行当前保存操作。
方法2:基于BOPF的锁实现
这种方法用于S/4HANA的费奥里应用,如材料应用。OData服务的费奥里应用和消费基于CDS view plus BOPF。
打开一个材质,然后单击编辑:
此时在ABAP后台使用交易代码SM12时,我们可以观察到Material对应的数据库表被锁定:
这是怎么发生的?
在S/4HANA的后台,使用事务代码BOBX打开BO模型I_PRODUCTWD。展开模型,双击Edit,可以看到这个EDIT实现的类是CL_I_DR_PRODUCTWD。
双击这个类,它的方法LOCK_ACTIVE_DOCUMENT是响应费奥里UI上编辑按钮点击的处理函数。
我们在这个方法中设置一个断点,然后点击UI上的编辑按钮,断点就触发了。从调用堆栈中,您可以清除在单击编辑按钮后观察程序执行流如何从BOPF框架传递到Material应用程序的束缚。这个锁定逻辑调用传统的ABAP入队功能模块。
以上边肖共享的SAP费奥里中的两个锁定机制就是这样实现的。如果你恰好也有类似的疑惑,可以参考上面的分析来理解。想了解更多,请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151651.html