Ansicht
Dokumentation
ABENHANDLER_METHOD_READ - HANDLER METHOD READ
Addresses (Business Address Services) rdisp/max_wprun_time - Maximum work process run timeDiese Dokumentation steht unter dem Copyright der SAP AG.
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 )