ABAP Keyword Documentation → ABAP - Reference → Processing External Data → Data Consistency → SAP Locks
Locking and Unlocking
This example demonstrates the setting up and releasing of SAP locks.
Other versions: 7.31 | 7.40 | 7.54
Source Code
REPORT demo_transaction_enqueue MESSAGE-ID sabapdemos.
TABLES demo_conn.
DATA sflight_tab TYPE TABLE OF sflight.
DATA text TYPE c LENGTH 8.
DATA ok_code TYPE sy-ucomm.
CALL SCREEN 100.
MODULE init OUTPUT.
SET PF-STATUS 'BASIC'.
demo_conn-carrid = 'LH'. demo_conn-connid = '400'.
ENDMODULE.
MODULE exit INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE enqueue INPUT.
CASE ok_code.
WHEN 'ENQUEUE'.
CALL FUNCTION 'ENQUEUE_EDEMOFLHT'
EXPORTING
mode_sflight = 'X'
carrid = demo_conn-carrid
connid = demo_conn-connid
fldate = demo_conn-fldate
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0.
MESSAGE i888 WITH 'Enqueue successful'(001).
WHEN 1.
text = sy-msgv1.
MESSAGE e888 WITH 'Record already'(002) 'locked by'(003)
text.
TRY.
CALL TRANSACTION 'SM12' WITH AUTHORITY-CHECK.
CATCH cx_sy_authorization_error ##NO_HANDLER.
ENDTRY.
WHEN 2 OR 3.
MESSAGE e888 WITH 'Error in enqueue!'(004)
'SY-SUBRC:' sy-subrc.
ENDCASE.
WHEN 'DEQUEUE'.
CALL FUNCTION 'DEQUEUE_EDEMOFLHT'
EXPORTING
mode_sflight = 'X'
carrid = demo_conn-carrid
connid = demo_conn-connid
fldate = demo_conn-fldate
EXCEPTIONS
OTHERS = 1.
CASE sy-subrc.
WHEN 0.
MESSAGE i888 WITH 'Dequeue successful'(005).
WHEN 1.
MESSAGE e888 WITH 'Error in dequeue!'(006).
ENDCASE.
WHEN 'SM12'.
TRY.
CALL TRANSACTION 'SM12' WITH AUTHORITY-CHECK.
CATCH cx_sy_authorization_error ##NO_HANDLER.
ENDTRY.
ENDCASE.
ENDMODULE.
MODULE select INPUT.
CASE ok_code.
WHEN 'SELECT'.
SELECT *
FROM sflight
WHERE carrid = @demo_conn-carrid
AND connid = @demo_conn-connid
AND fldate = @demo_conn-fldate
INTO TABLE @sflight_tab.
MESSAGE i888 WITH 'SY-SUBRC:' sy-subrc.
ENDCASE.
ENDMODULE.
Description
Using the GUI status function codes ENQUEUE and DEQUEUE, the specified fields in the table SFLIGHT can be locked and unlocked. To do this, the lock object EDEMOFLHT is used in conjunction with the relevant function modules ENQUEUE_EDEMOFLHT and DEQUEUE_EDEMOFLHT .
Using the function code SELECT, access to the specified fields is still possible. The function code SM12 calls the transaction SM12 to display the lock entry in the central lock table.
After a user has successfully locked a data record, the same data record cannot be locked again by a different user. However, all users can access the locked data records using the Open SQL statement, assuming the program has not already checked the locks using ENQUEUE_EDEMOFLHT.