SAP菲奥里里两种锁机制是怎么实现

  介绍

这期内容当中小编将会给大家带来有关SAP菲奥里里两种锁机制是怎么实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

  方法1:ETAG机制

  SAP CRM菲奥里采用了这种机制。

  看一个具体的例子来理解。假设我用用户名杰里选中了这个ID为3456的机会,点击编辑按钮之后:

  会触发一个读操作发到后台:

 SAP菲奥里里两种锁机制是怎么实现

  后台响应这个读请求,并且在响应的头部字段ETAG里写入了对应的值。

 SAP菲奥里里两种锁机制是怎么实现

  这26个ae结个尾的ETAG的值可以由应用程序采取不同的逻辑计算,可以直接采用请求节点对应的最后修改时间戳(最后一次修改的时间戳),例如下面这段ABAP代码:

  也可以基于数据的完整内容计算一个哈希值出来作为ETAG返回给菲奥里UI:

  现在我用另一个用户,对同一个机会做了修改,成功保存。然后再回到用户杰瑞的这个编辑窗口,此时杰瑞根本不知道该机会已经被另一个用户修改了.Jerry修改了机会的名字字段,点击保存按钮。

  收到这个提示信息。

  从Chrome开发工具里能观察到,当杰瑞点击了保存按钮后,发送到后台的请求的头部包含了一个If-Match字段,这个字段的值就是杰瑞第一次点击编辑按钮时,后台返回给杰里的26个ae结尾的ETAG字段。

 SAP菲奥里里两种锁机制是怎么实现

  背后发生了什么事请呢?在框架的方法CHECK_BEFORE_MODIFICATION里,框架会把菲奥里UI请求传进来的ETAG和当前最新的ETAG做比较:

 SAP菲奥里里两种锁机制是怎么实现

  CHECK_BEFORE_MODIFICATION又会调用CHECK_ETAG_MATCH方法。如果检查失败,当前的保存操作将不会执行。

  方法2:基于BOPF的锁实现

  这种方式用于S/4 hana的鲜花广场应用,比如材料应用程序。这种菲奥里应用,消费的OData服务是基加于cd视图上BOPF实现的。

  打开一个材料,点击编辑:

 SAP菲奥里里两种锁机制是怎么实现

  此时到ABAP后台使用事务码SM12能观察到材料对应的数据库表被锁住了:

  这是怎么实现的呢?

  在S/4 hana后台使用事务码BOBX打开波模型I_PRODUCTWD。展开模型,双击编辑能看到这个编辑实现的类为CL_I_DR_PRODUCTWD。

  双击这个类,它的方法LOCK_ACTIVE_DOCUMENT就是响应菲奥里UI上编辑按钮点击的处理函数。

 SAP菲奥里里两种锁机制是怎么实现

  我们在这个方法里设置断点,然后在界面上点击编辑按钮,断点触发。从调用栈即可清除观察到编辑按钮点击之后,程序执行流是如何从BOPF框架投递到材料应用的枷锁代码。这个加锁逻辑调用的是传统的ABAP排队功能模块。

 SAP菲奥里里两种锁机制是怎么实现

SAP菲奥里里两种锁机制是怎么实现