Start of Content Area

Example Program: SAP Locking  Locate the document in its SAP Library structure

The following example program shows how you can lock and unlock database entries using a lock object.

Example

REPORT  demo_transaction_enqueue MESSAGE-ID sabapdocu.

TABLES  sflight.

DATA  text(8) TYPE c.

DATA  ok_code TYPE sy-ucomm.

CALL SCREEN 100.

MODULE init OUTPUT.
  SET PF-STATUS 'BASIC'.
  sflight-carrid = 'LH'. sflight-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         = sflight-carrid
                connid         = sflight-connid
                fldate         = sflight-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.

          CALL TRANSACTION 'SM12'.
        WHEN 2 OR 3.
          MESSAGE e888 WITH 'Error in enqueue!'(004).

      ENDCASE.
    WHEN 'DEQUEUE'.
      CALL FUNCTION 'DEQUEUE_EDEMOFLHT'
           EXPORTING
                mode_sflight = 'X'
                carrid       = sflight-carrid
                connid       = sflight-connid
                fldate       = sflight-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'.
      CALL TRANSACTION 'SM12'.
  ENDCASE.
ENDMODULE.

MODULE select INPUT.
  CASE ok_code.
    WHEN 'SELECT'.
      SELECT * FROM sflight WHERE carrid = sflight-carrid
                              AND connid = sflight-connid
                              AND fldate = sflight-fldate.

      ENDSELECT.
      MESSAGE i888 WITH 'SY-SUBRC:' sy-subrc.
  ENDCASE.
ENDMODULE.

The statically-defined next screen for screen 100 is 100. It uses components of the structure SFLIGHT, copied from the ABAP Dictionary, and looks like this:

This graphic is explained in the accompanying text

The screen flow logic is as follows:

PROCESS BEFORE OUTPUT.
  MODULE init.

PROCESS AFTER INPUT.
  MODULE exit AT EXIT-COMMAND.
  CHAIN.
    FIELD: sflight-carrid, sflight-connid, sflight-fldate.
    
MODULE enqueue.
  ENDCHAIN.
  MODULE select.

Using the function codes ENQUEUE and DEQUEUE of the GUI status, you can lock and unlock the specified fields of the table SFLIGHT. To do this, use the specifically created lock object EDEMOFLHT via the function modules ENQUEUE_EDEMOFLHT and DEQUEUE_EDEMOFLHT.

In addition, the function code SELECT allows to access the specified fields and the function code SM12 calls the transaction SM12 to list the lock entries in the central locking table.

After a successful lock by a user, no other user can lock the same datasets again. However, every user can access the locked datasets using SELECT if the program does not check the locks in advance with ENQUEUE_EDEMOFLHT.

 

 

End of Content Area