Created by Jerry Wang, last modified on May 21, 2014
如下report 先后三次重复调用带参数的enqueue function module对database table CRMD_SOC_POST里一个uuid为0023的record上锁, 使用Function module ENQUEUE_READ读取该user持有的sap lock信息,打印出的cumulative counter的值依次为1, 2, 3. 每调用一次对应的dequeue function module,则counter 减1。
若不带参数调用enqueue function module,则cumulative counter与待参数时调用的counter是分别计数的。
REPORT zlock1. CONSTANTS: c_table TYPE tadir-obj_name VALUE 'CRMD_SOC_POST'. START-OF-SELECTION. WRITE: / 'First lock on uuid 23...' COLOR COL_NEGATIVE. CALL FUNCTION 'ENQUEUE_ECRMD_SOC_POST' EXPORTING uuid = '00000000000000000000000000000023'. PERFORM display_lock. WRITE: / 'Second lock on uuid 23...' COLOR COL_NEGATIVE. CALL FUNCTION 'ENQUEUE_ECRMD_SOC_POST' EXPORTING uuid = '00000000000000000000000000000023'. PERFORM display_lock. WRITE: / 'Third lock on the whole table...' COLOR COL_NEGATIVE. CALL FUNCTION 'ENQUEUE_ECRMD_SOC_POST'. PERFORM display_lock. WRITE: / 'Third lock on uuid 23...' COLOR COL_NEGATIVE. CALL FUNCTION 'ENQUEUE_ECRMD_SOC_POST' EXPORTING uuid = '00000000000000000000000000000023'. PERFORM display_lock. WRITE: / 'release lock on uuid 23...' COLOR COL_NEGATIVE. CALL FUNCTION 'DEQUEUE_ECRMD_SOC_POST' EXPORTING uuid = '00000000000000000000000000000023'. PERFORM display_lock. FORM display_lock. DATA: lv_subrc TYPE sy-subrc, lt_enq TYPE STANDARD TABLE OF seqg3. CLEAR: lt_enq. CALL FUNCTION 'ENQUEUE_READ' EXPORTING gclient = sy-mandt guname = sy-uname IMPORTING subrc = lv_subrc TABLES enq = lt_enq EXCEPTIONS communication_failure = 2 OTHERS = 1. LOOP AT lt_enq ASSIGNING FIELD-SYMBOL(<lock>) WHERE gname = c_table. WRITE: / 'lock variable: ' , <lock>-garg+0(40) COLOR COL_POSITIVE, 'Cumulative Counter: ', <lock>-gusevb COLOR COL_TOTAL. ENDLOOP. ENDFORM.