Show TOC Anfang des Inhaltsbereichs

Beispielprogramm für SAP-Sperren  Dokument im Navigationsbaum lokalisieren

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:

Diese Grafik wird im zugehörigen Text erklärt

Die Bildschirmablauflogik ist:

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.

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 mit SELECT zugreifen, falls das Programm nicht vorher die Sperren mit ENQUEUE_EDEMOFLHT überprüft.

 

Ende des Inhaltsbereichs