Ansicht
Dokumentation

ABENHANDLER_METHOD_READ - HANDLER METHOD READ

ABENHANDLER_METHOD_READ - HANDLER METHOD READ

Addresses (Business Address Services)   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

FOR READ

METHODS method_name FOR READ
  $[IMPORTING$]
     read_import_parameter   FOR READ entity_name
       $[RESULT read_export_parameter$]
     read_import_param_assoc FOR READ entity_name\_assoc
        FULL   read_export_param_full
        RESULT read_export_param_assoc
        LINK   read_export_param_link
     ...
  $[image TYPE if_abap_behv=>t_image$]
  ...
  $[CHANGING failed   TYPE DATA
            reported TYPE DATA$].


Wirkung

Die READ-Methode implementiert den Behandler zur Bearbeitung lesender Anforderungen an den Entitäten im Kontext von ABAP RAP. Die Methode wird verwendet, um die Daten aus dem Anwendungspuffer zurückzugeben. Wenn der Puffer leer ist, müssen die Daten aus der Datenbank gelesen werden.

Die READ-Methode kann aufgerufen werden um die Behandlung eines ETag zu unterstützen. Eine Änderungsoperation (zum Beispiel update) wird durch die If-Match-Bedingung ausgelöst. Zuerst wird die LOCK-Methode aufgerufen. Wenn die LOCK-Methode erfolgreich war, wird die READ-Methode ausgelöst, um den aktuellen ETag-Wert anzufordern. Die Struktur %CONTROL fordert die ID-Felder und die ETag-Attribute an. Die Daten werden dann mit der If-Match-Bedingung überprüft. Wenn die Prüfung bestanden wird, wird die Änderungsmethode aufgerufen.

Ähnlich wie MODIFY-Methoden ist die READ-Methode massen- und bündelungsfähig: Sie handelt Massenanforderungen und implementiert mehrere Operationen. Das Mehrfachvorkommen einer Operation in einer READ-Methode ist jedoch verboten.

Der Methodenname method_name ist frei wählbar. Mit dieser Verallgemeinerung ist es möglich mehrere READ-Methoden in einer Behandlerklasse unterzubringen. Dies ermöglicht die Verhaltensimplementierung eines RAP-Business-Objekts, ohne entsprechend viele Behandlerklassen einzuführen.

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

Die Operation read-by-association nimmt, genauso wie das direkte Operation read, als Eingabeparameter read_import_param_assoc eine Tabelle mit Instanz-Schlüsseln der Quellentität. Die Ausgabe ist wie folgt:

  • FULL
    Boolescher Parameter, der zeigt ob der Verbraucher nur wegen der Links oder der auch vollen Ergebnisse fragt an.
  • RESULT
    Eine Tabelle mit dem vollen Zeilentyp der Zielentität.
  • LINK
    Eine Tabelle, in denen Quellen- und Zielschlüssel in Beziehung gesetzt sind.

Eingabeparameter

Der Name des Eingabeparameters (zum Beispiel read_import_parameter) kann frei gewählt werden.

Die Zeilenstruktur des Eingabeparameters enthält die folgenden Komponenten:

  • %PID
  • ID-Felder
  • %CONTROL.

Zusätzlich gibt es einen impliziten Eingabeparameter image, der optional explizit deklariert werden kann:

  $[IMPORTING$] image TYPE if_abap_behv=>t_image

Die Werte des Parameters image sind:

  • transactional
    Der Standardwert des Parameters. Der Zustand der Entitäten wird aus dem transaktionalen Puffer angefragt.
  • before
    Der Zustand der Entitäten wird aus der Datenbank abgefragt.

Ausgabeparameter

Der Name des Ausgabeparameters (zum Beispiel read_export_parameter) kann frei gewählt werden.

Der explizit deklarierbare Ausgabeparameter read_export_parameter gibt die erfolgreich gelesenen Daten aus. Seine Zeilenstruktur enthält die folgenden Komponenten:

  • %PID
  • alle Felder der Entität.

Die Ausgabeparameter failed und reported für Fehler bzw. Meldungen werden implizit (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.

Hinweis

Die Kontrollstruktur %CONTROL zeigt welche Elemente vom Verbraucher angefordert werden. Es kann jedoch von Vorteil sein alle Elemente zurückzugeben und nicht nur die Angeforderte.

Bemerkungen

  • Die alte Syntax METHODS read FOR BEHAVIOR ... ist auch gültig, wird aber nicht 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 READ-Methode read_travel für die Bearbeitung lesender Anforderungen an die Entität Travel. Die Implementierung der Methode umfasst

  • eine Schleife für alle zu lesenden Instanzen der Entität Travel,
  • Aufruf des Funktionsbausteins der Legacy-Business-Logik /DMO/FLIGHT_TRAVEL_READ zum Lesen von Travel-Instanzen,
  • Meldungsbehandlung für die Verarbeitung der instanzspezifischen Meldungen im Fehlerfall. 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 read_travel FOR READ
      IMPORTING
        it_travel_read FOR READ travel
      RESULT et_travel.

ENDCLASS.


CLASS lcl_travel_handler IMPLEMENTATION.

  METHOD read_travel.
    DATA: lt_messages   TYPE /dmo/if_flight_legacy=>tt_message,
          ls_travel_out TYPE /dmo/travel.
    LOOP AT it_travel_read INTO DATA(ls_travel_read).
      CALL FUNCTION '/DMO/FLIGHT_TRAVEL_READ'
        EXPORTING
          iv_travel_id = ls_travel_read-travel_id
        IMPORTING
          es_travel    = ls_travel_out
          et_messages  = lt_messages.
      IF lt_messages IS NOT INITIAL.
        zcl_messages=>handle_messages(
          EXPORTING
            iv_travel_id = ls_travel_read-travel_id
            it_messages  = lt_messages
          CHANGING
            failed       = failed-travel
            reported     = reported-travel
        ).
        CONTINUE.
      ENDIF.
      INSERT CORRESPONDING #( ls_travel_out ) INTO TABLE et_travel.
    ENDLOOP.
  ENDMETHOD.

ENDCLASS.





ABAP Short Reference   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14458 Date: 20240523 Time: 152815     sap01-206 ( 144 ms )