Ansicht
Dokumentation

ABENHANDLER_METHOD_LOCK - HANDLER METHOD LOCK

ABENHANDLER_METHOD_LOCK - HANDLER METHOD LOCK

BAL_S_LOG - Application Log: Log header data   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

FOR LOCK

METHODS method_name FOR LOCK
    $[IMPORTING$]
        lock_import_parameter FOR LOCK entity_name.
     ...
    $[CHANGING failed   TYPE DATA
              reported TYPE DATA$].


Wirkung

Die LOCK-Methode implementiert den Behandler zum Sperren der Entitäten. In der Verhaltensdefinition eines RAP-Business-Objekts muss jedoch die Sperreigenschaften lock master oder lock dependent angegeben werden. Die Methode lock wird vor einer Änderungsoperation (zum Beispiel update) automatisch aufgerufen.

Der Methodenname method_name ist frei wählbar. Mit dieser Verallgemeinerung ist es möglich mehrere LOCK-Methoden in einer Behandlerklasse unterzubringen.

entity_name bezieht sich auf den Namen der Entität oder auf den Alias, sofern vorhanden, wie er in der Verhaltensdefinition definiert ist.

Eingabeparameter

Für den Eingabeparameter lock_import_parameter gibt es folgende Punkte:

  • Der Name des Eingabeparameters kann frei gewählt werden.
  • Der Zeilentyp des Eingabeparameters stellt die ID-Felder bereit. Diese Struktur enthält die Felder der Entität, die als Schlüssel angegeben sind.
  • Die vom ABAP Compiler generierten Felder %CID, %CID_REF und %PID sind in Zusammenhang mit dem Sperren nicht erforderlich, da das Sperren nur für in die Datenbank gespeicherte Instanzen relevant ist.

Ausgabeparameter

Die Ausgabeparameter failed und reported für Fehler bzw. Meldungen werden automatisch hinzugefügt. Sie können jedoch in der Methodensignatur mithilfe des generischen Typs DATA explizit als CHANGING-Parameter deklariert werden:

CHANGING failed   TYPE DATA
         reported TYPE DATA

Die Parameter failed und reported haben keine festen Datentypen und werden stattdessen mit den von der Verhaltensdefinition abgeleiteten Typen zugewiesen. Der Parameter mapped ist Teil der Methodensignatur, wird jedoch nicht in der Methode verwendet.

Bemerkungen

  • Die alte Syntax METHODS lock FOR BEHAVIOR ... ist auch gültig, wird aber nicht mehr empfohlen.
  • Das Schlüsselwort IMPORTING ist nicht obligatorisch und kann vor dem Eingabeparameter angegeben werden.

Beispiel

Im folgenden Beispiel werden die Daten aus dem ABAP-Flugdatenreferenzszenario (kurz: Flugdatenszenario) verwendet. Es stellt eine Legacy-Business-Logik dar, mit der Flugbuchungen erstellt und aktualisiert werden können. Die Wurzel-Entität Travel repräsentiert das Business-Objekt zur Verwaltung von Flugreisen. Das zugrundeliegende Datenmodell und das Verhalten der Wurzel-Entität Travel sind im Abschnitt CDS BDL - Beispiel beschrieben.

Das folgende Beispiel zeigt die Definition und die Implementierung der LOCK-Methode lock_travel. Die Implementierung der Methode umfasst

  • eine Schleife für alle zu sperrenden Instanzen der Entität Travel,
  • Aufruf des Funktionsbausteins der Legacy-Business-Logik ENQUEUE_/DMO/ETRAVEL,
  • Meldungsbehandlung für die Verarbeitung von instanzspezifischen Meldungen. Zur besseren Lesbarkeit sind die Methoden zur Behandlung der Meldungen in der separaten Klasse zcl_messages implementiert. Die Klasse zcl_messages ist im Abschnitt Beispiel - Behandlung der Meldungen beschrieben.
CLASS lcl_travel_handler DEFINITION
    INHERITING FROM cl_abap_behavior_handler.

  PRIVATE SECTION.
    METHODS lock_travel FOR LOCK
      IMPORTING
        it_travel_key FOR LOCK travel.

ENDCLASS.


CLASS lcl_travel_handler IMPLEMENTATION.

  METHOD lock_travel.
    LOOP AT it_travel_key ASSIGNING FIELD-SYMBOL(fs_travel>).
      CALL FUNCTION 'ENQUEUE_/DMO/ETRAVEL'
        EXPORTING
          travel_id      = fs_travel>-travel_id
        EXCEPTIONS
          foreign_lock   = 1
          system_failure = 2
          OTHERS         = 3.
      ASSERT sy-subrc  2.
      IF sy-subrc = 1.
        INSERT zcl_messages=>map_travel_message(
           iv_travel_id = fs_travel>-travel_id
           is_message   = VALUE #( msgid = '/DMO/CM_FLIGHT_LEGAC'
                                   msgty = 'E'
                                   msgno = '032'
                                   msgv1 = fs_travel>-travel_id
                                   msgv2 = sy-msgv1 ) )
          INTO TABLE reported-travel.
        APPEND VALUE #( travel_id = fs_travel>-travel_id )
               TO failed-travel.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.

ENDCLASS.





BAL_S_LOG - Application Log: Log header data   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9872 Date: 20240523 Time: 155815     sap01-206 ( 91 ms )