日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SAP Fiori里两种锁机制(lock)的实现

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP Fiori里两种锁机制(lock)的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實標題有點不夠準確,ETAG 從嚴格意義上講并不是用來鎖住一個資源,而是用來避免同一個資源同時被更新造成的彼此覆蓋的問題(mid-air collisions)。

方法1: ETAG 機制

SAP CRM Fiori采用了這種機制。

看一個具體的例子來理解。假設我用用戶名Jerry選中了這個ID為3456的Opportunity,點擊Edit按鈕之后:

會觸發一個讀操作發到后臺:

后臺響應這個讀請求,并且在響應的頭部字段ETAG里寫入了對應的值。

這個26AE結尾的ETAG的值可以由應用程序采取不同的邏輯計算,可以直接采用請求節點對應的最后修改時間戳(Last Changed Timestamp), 例如下面這段ABAP代碼:

也可以基于數據的完整內容計算一個HASH值出來作為ETAG返回給Fiori UI:

現在我用另一個用戶,對同一個Opportunity做了修改,成功保存。然后再回到用戶Jerry的這個編輯窗口,此時Jerry根本不知道該Opportunity已經被另一個用戶修改了。Jerry修改了Opportunity的Name字段,點擊保存按鈕。

收到這個提示信息。

從Chrome Development Tool里能觀察到,當Jerry點擊了保存按鈕后,發送到后臺的請求的頭部包含了一個If-Match字段,這個字段的值就是Jerry第一次點擊編輯按鈕時,后臺返回給Jerry的26AE結尾的ETAG字段。

背后發生了什么事請呢?在框架的方法CHECK_BEFORE_MODIFICATION里,框架會把Fiori UI請求傳進來的ETAG和當前最新的ETAG做比較:

CHECK_BEFORE_MODIFICATION又會調用CHECK_ETAG_MATCH方法。如果check失敗,當前的保存操作將不會執行。

方法2: 基于BOPF的鎖實現

這種方式用于S/4HANA的Fiori應用,比如Material application。這種Fiori應用,消費的OData service是基于CDS view 加上BOPF實現的。

打開一個Material,點擊Edit:

此時到ABAP后臺使用事務碼SM12能觀察到Material對應的數據庫表被鎖住了:

這是怎么實現的呢?

在S/4HANA后臺使用事務碼BOBX打開BO模型I_PRODUCTWD. 展開模型,雙擊EDIT,能看到這個Edit實現的類為CL_I_DR_PRODUCTWD.

雙擊這個class,它的方法LOCK_ACTIVE_DOCUMENT就是響應Fiori UI上編輯按鈕點擊的處理函數。

我們在這個方法里設置斷點,然后在UI上點擊編輯按鈕,斷點觸發。從調用棧即可清除觀察到編輯按鈕點擊之后,程序執行流是如何從BOPF框架投遞到Material應用的枷鎖代碼。這個加鎖邏輯調用的是傳統的ABAP Enqueue function module。

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

總結

以上是生活随笔為你收集整理的SAP Fiori里两种锁机制(lock)的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。