Code is attached..
DO.
CLEAR: zenq, zenq[].
SELECT SINGLE *
FROM zp6lock
INTO wa_lock
WHERE proj = '1'.
IF sy-subrc NE '0'.
lock = space.
ELSE.
lock = 'X'.
ENDIF.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gclient = sy-mandt
gname = 'ZP6LOCK'
TABLES
enq = zenq
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF zenq IS NOT INITIAL OR lock IS NOT INITIAL.
l_index = 50.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = l_index
text = 'Please wait or Try later, P6 locked by another user'.
wait up to 4 SECONDS.
ELSE.
EXIT.
ENDIF.
ENDDO.
CALL FUNCTION 'ENQUEUE_EZZP6LOCK' "
EXPORTING
* mode_zp6lock = 'E'
mandt = sy-mandt
* PROJ =
* X_PROJ = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
PERFORM check_lock.
ENDIF.
wa_lock-mandt = sy-mandt.
wa_lock-proj = '1'.
MODIFY zp6lock FROM wa.
IF sy-subrc NE '0'.
MESSAGE 'Retry! P6 is locked by anohter user' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
PERFORM get_last_wbs_id. "Proxy Call to read
PERFORM send_new_wbs_id. "Proxy Call to write
CALL FUNCTION 'DEQUEUE_EZZP6LOCK'
EXPORTING
mode_zp6lock = 'X'
mandt = sy-mandt.
wa_lock-mandt = sy-mandt.
wa_lock-proj = space.
MODIFY zp6lock FROM wa.
ENDIF.