Ansicht
Dokumentation

ABENCDS_SIMPLE_BO_ABEXA - CDS SIMPLE BO ABEXA

ABENCDS_SIMPLE_BO_ABEXA - CDS SIMPLE BO ABEXA

BAL Application Log Documentation   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Einfaches nicht verwaltetes RAP Business-Objekt

Dieses Beispiel zeigt ein einfaches nicht verwaltetes RAP Business-Objekt und die verschiedenen Arten darauf zuzugreifen.

Beachten Sie, dass dieses Beispiel eher die technischen Aspekte eines nicht verwalteten Business-Objekts als das korrekte semantische Verhalten zeigt. Der Geschäftsvorfall (Erhöung des Preises von ausgewählten Flügen) wird auf eine Weise erreicht, die sich von einem alltäglichen Szenario unterscheidet. Hier wird auch gezeigt, dass die Methoden eines ABAP-Behavior-Pools frei implementiert werden können und dass diese Implementierung sowohl über EML als auch außerhalb eines AS ABAP mit einem exponierten Service und der transaktionalen RAP-Engine aufgerufen werden können.

Datenmodell

Das CDS-Datenmodell besteht aus einer einfachen Wurzelentität ohne untergeordnete Elemente:

Verhaltensdefinition

Die CDS-Verhaltensdefinition DEMO_CDS_SIMPLE_ROOT_ENTITY wird in CDS BDL wie folgt definiert:

Eine CRUD-Operation wird mit create und eine zusätzliche Operation mit action angegeben. Die Aktion erwartet einen Parameter, der mit einer strukturierten CDS-Entität typisiert werden muss, für die die folgende abstrakte CDS-Entität definiert ist:

Verhaltensimplementierung

Für die genannte CDS-Verhaltensdefinition wurde ein ABAP-Behavior-Pool (ABP) angelegt. Die globale Klasse des Behavior-Pools ist BP_DEMO_CDS_SIMPLE_ROOT_ENTITY. Die eigentliche Verhaltensimplementierung findet in lokalen Klassens statt, die im BP_DEMO_CDS_SIMPLE_ROOT_ENTITYCCIMP des Behavior-Pools definiert und implementiert werden. Die globale Klasse hat zwei private statische Attribute:

  • BUFFER, eine interne Tabelle mit dem strukturierten Zeilentyp einer Wurzelentität DEMO_CDS_SIMPLE_ROOT_ENTITY, die die Geschäftsdaten enhält.
  • LOG, eine interne Tabelle vom Zeilentyp i, welche die Zeilen protokolliert, die durch die Verhaltensimplementierung geändert wurden.

Es gibt zwei lokale Klassen:

  • LHC_DEMO_SIMPLE_BO
Die Handler-Klasse des Behavior-Pools. Die Methoden dieser Klasse implementieren die folgenden Operationen:
  • Die Methode MODIFY implements die Create-Operation und die zusätzliche Operation einschließlich einer Fehlerbehandlung.

  • Die Methode READ implementiert die Read-Operation.

  • LSC_DEMO_SIMPLE_BO
Die Saver-Klasse des Behavior-Pools. Die Methode dieser Klasse implementiert die eigentliche Aktualisierung der persistenten Daten aus den verarbeiteten Geschäftsdaten.

Business Service

Der Business-Service DEMO_SD_SIMPLE_ROOT_ENTITY exponiert die Wurzelentität DEMO_CDS_SIMPLE_ROOT_ENTITY. Eine Service-Bindung DEMO_SB_SIMPLE_ROOT_ENTITY bindet diesen Service an das OData-Protokoll.

Quelltext

Ausführen

Beschreibung

Zugriff mit ABAP über EML

Der obige Quellcode verwendet EML, um auf das RAP Business-Objekt aus einem ABAP-Programm zuzugreifen:

  • Eine Create-Operation wird mit der Anweisung MODIFY ENTITY ausgeführt.
Über den Zusatz CREATE FROM wird die Methode MODIFY der Handler-Klasse LHC_DEMO_SIMPLE_BO aufgerufen und eine interne Tabelle wird an den Parameter create_tab übergeben. Der Datentyp der internen Tabelle wird mit dem Sonderzusatz TYPE TABLE FOR CREATE der Anweisung TYPES abgeleitet. Die Methode legt, durch die Auswahl aus der Wurzelentität, Daten im statischen Attribut BUFFER des ABAP-Behavior-Pools an.
  • Eine Read-Operation wird mit der Anweisung READ ENTITY ausgeführt.
Das ruft die Methode READ aus der Handler-Klasse LHC_DEMO_SIMPLE_BO auf. Passende interne Tabellen für die Übergabe von Query-Parametern und zum Empfangen des Ergebnisses werden wieder mithilfe von Sonderzusätzen der Anweisung TYPES. Die Methode liest die Daten, die durch die Query-Parameter angegeben werden, aus dem statischen Attribut BUFFER des ABAP-Behavior-Pools.
  • Eine Update-Operation wird mit der Anweisung MODIFY ENTITY ausgeführt.
Über den Zusatz EXECUTE wird die Methode MODIFY der Handler-Klasse LHC_DEMO_SIMPLE_BO aufgerufen und eine interne Tabelle wird an den Parameter create_tab übergeben. Die interne Tabelle wird aus dem Werteparameter VALUE und der Typreferenz zusammengesetzt. Die Methode modifiziert Zeilen des statischen Attributs BUFFER des ABAP-Behavior-Pools gemäß den Angaben in action_tab. Zusätzlich werden die modifizierten Zeilen im statischen Attribut LOG protokolliert.
  • Eine Read-Operation wird mit der Anweisung READ ENTITY ausgeführt.
Identisch zur Read-Operation, jedoch werden die internen Tabellen vom Werteparameter VALUE, der Typinferenz und durch eine Inline-Deklaration angelegt. Wenn es zu keinem Fehler kommt, zeigt das Ergebnis die modifizierten Daten des statischen Attributs BUFFER des ABAP-Behavior-Pools.
  • Die Änderungen werden mit der AnweisungCOMMIT ENTITIES gesichert.
Das führt zum Aufruf der Methoden FINALIZE, CHECK_BEFORE_SAVE und SAVE der Saver-Klasse LSC_DEMO_SIMPLE_BO.
  • In FINALIZE wird das statische Attribut BUFFER des ABAP-Behavior-Pools auf die modifizierten Zeilen reduziert.

  • In CHECK_BEFORE_SAVE wird eine Bedingung geprüft.

  • In SAVE findet das eigentliche ABAP-SQL-UPDATE auf der entsprechenden DDIC-Datenbanktabelle statt.

Zugriff mit OData über SAP Gateway OSCI

Das Programm DEMO_ODATA_SIMPLE_BO_GATEWAY zeigt, wie über eine Hilfsmethode der SAP-Gateway-Komponente Nutzung und Integration von OData-Services (OSCI) auf den ICF-Knoten /sap/opu/odata/sap/demo_sb_simple_root_entity/ der zuvor genannten Service-Bindung DEMO_SB_SIMPLE_ROOT_ENTITY zugegriffen werden kann.

Ein passender HTTP-Request-Header und -Body werden zusammengesetzt und an die Methode GET_INSTANCE der Klasse /IWFND/CL_SUTIL_CLIENT_PROXY übergeben. Diese Methode übergibt den HTTP-Request als einen HTTP-POST-Request an den OData-Service. Durch das Setzen externer Breakpoints in der BP_DEMO_CDS_SIMPLE_ROOT_ENTITYCCIMP des Behavior-Pools, können Sie nachverfolgen, wie die Verhaltensimplementierung durch das RAP-Laufzeit-Framework, das den HTTP-Request auf dem AS ABAP behandelt, aufgerufen wird.

Um die Auswirkungen zu zeigen, greift ABAP SQL vor und nach dem Zugriff auf den OData-Service auf die entsprechende DDIC-Datenbanktabelle zu.

In echten Anwendungen würde ein HTTP-Request, wie er hier gezeigt wird, von web-basierten Frameworks wie SAPUI5 gesendet werden.

Zugriff mit Odata direkt über ICF

Das Programm DEMO_ODATA_SIMPLE_BO_ICF führt eine Drilldown vom Zugriff auf den OData-Service zur Verwendung der Klassen und Methoden von ICF durch.

Es wird derselbe HTTP-Request-Body wie im vorigen Beispiel zusammengesetzt. Jedoch wird hier direkt die Klasse CL_HTTP_CLIENT verwendet, um ein Client-Objekt für den OData-Service anzulegen, das für die Übergabe von passenden Werten für den HTTP-Request-Header und den HTTP-Request-Body als ein POST-Request an den OData-Service verwendet wird.

Das Ergebnis entspricht dem Ergebnis bei der Verwendung der Hilfsmethode von SAP Gateway. Der Zweck des Beispiels ist es, eine Einblick auf die zugrundeliegenden bekannten Methoden von Frameworks wie SAP Gateway zu geben, das wiederum Teil des RAP-Laufzeit-Frameworks ist.






ROGBILLS - Synchronize billing plans   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12848 Date: 20240523 Time: 180142     sap01-206 ( 176 ms )