SAP Fiori裡的兩種鎖機制

i042416發表於2020-07-12

Approach 1: ETAG mechanism

This approach is used in SAP CRM Fiori. Suppose user Jerry has opened a given opportunity with ID = 3456 and clicked the Edit button:


SAP Fiori裡的兩種鎖機制


A read operation is fired and sent to ABAP backend:


SAP Fiori裡的兩種鎖機制


We can observe in Chrome development tool that the ETAG field of HTTP response header is filled accordingly.


SAP Fiori裡的兩種鎖機制


This ETAG value ending up with “26AE” is actually calculated by application. The common calculation logic is to either leverage the last changed timestamp of OData model node being read, see example below:


SAP Fiori裡的兩種鎖機制


or use the calculated HASH value based on the whole content of model node:


SAP Fiori裡的兩種鎖機制


Now say another user has changed this opportunity and saved the change successfully. Jerry was not aware of it at all, he just changed the opportunity, and pressed the Save button.


SAP Fiori裡的兩種鎖機制


And Jerry saw this error message: Data has been changed by another user. Choose OK to retrieve the latest data.


SAP Fiori裡的兩種鎖機制


Open Chrome Development Tool again, and we can find that once Jerry has pressed the Save button, a batch request is sent to ABAP backend whose request header contains one field If-Match. This field is filled with the very ETAG value got from the response header field ETAG of the first read request ( which ends up with 26AE ).


SAP Fiori裡的兩種鎖機制


What has happened under the hood? A comparison between latest ETAG and the ETAG passed by Fiori UI is made in method CHECK_BEFORE_MODIFICATION:


SAP Fiori裡的兩種鎖機制


CHECK_BEFORE_MODIFICATION will delegate to method CHECK_ETAG_MATCH in line 57. If check fails, the save will not be performed at all.


SAP Fiori裡的兩種鎖機制


Approach 2: lock mechanism based on BOPF

This logic is used in S/4HANA Fiori application, such as Material application, which consumes OData service implemented on top of CDS view plus BOPF. Open one Material and press Edit button:


SAP Fiori裡的兩種鎖機制


Now locks related to a series of Material tables could be found in tcode SM12:


SAP Fiori裡的兩種鎖機制


In S/4HANA backend system, launch tcode BOBX to open BO model with name I_PRODUCTWD. Navigate to Edit action and double click, to find implementation class CL_I_DR_PRODUCTWD.


SAP Fiori裡的兩種鎖機制


It’s responsible for method LOCK_ACTIVE_DOCUMENT to react on the Edit button click in Fiori UI.


SAP Fiori裡的兩種鎖機制


Set a breakpoint on it, click Edit button and breakpoint is triggered. From the callstack we can clearly know how the execution flow is delegated from BOPF framework code to Material application code. The acutal enqueue operation is achieved by the enqueue function module owned by Material application.


SAP Fiori裡的兩種鎖機制


要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

SAP Fiori裡的兩種鎖機制


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2703959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章