Show TOC

Beispielprogramm für SAP-SperrenLocate this document in the navigation structure

An folgendem Beispielprogramm soll gezeigt werden, wie Sie mit Sperrobjekten Einträge einer Tabelle sperren bzw. entsperren können.

Beispiel

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.

Die statische Folgedynpronummer von Dynpro 100 ist 100 und sein Layout ist nach Übernahme von Komponenten der Struktur SFLIGHT dem ABAP Dictionary wie folgt:

PROCESS BEFORE OUTPUT.  MODULE init.

Die Bildschirmablauflogik ist:

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

Mit den Funktionscodes ENQUEUE und DEQUEUE des GUI-Status können die angegebenen Felder der Tabelle SFLIGHT gesperrt und entsperrt werden. Hierzu wird das speziell dafür erzeugte Sperrobjekt EDEMOFLHT über die entsprechenden Funktionsbausteinen ENQUEUE_EDEMOFLHT und DEQUEUE_EDEMOFLHT verwendet.

Weiterhin erlaubt der Funktionscode SELECT einen Zugriff auf die angegebenen Felder und der Funktionscode SM12 ruft die Transaktion SM12 zum Auflisten der Sperreinträge in der zentralen Sperrtabelle.

Nach dem erfolgreichen Sperren durch einen Benutzer kann kein anderer Benutzer die gleichen Datensätze nochmals sperren. Nichtsdestotrotz kann jeder Benutzer auf die gesperrten Datensätze mitSELECT zugreifen, falls das Programm nicht vorher die Sperren mit ENQUEUE_EDEMOFLHT überprüft.