This is a test message to test the length of the message box.
Login
ABAP RAP Deep Table Action
Erstellt von Software-Heroes

RAP - Deep Table Action

573

Ist die Übergabe von Tabellen an Aktionen in RAP aktuell möglich? Dieser Artikel soll einen besseren Einblick in das Thema gewähren.

Werbung


Bereits im letzten Jahr hatten wir zum Thema Deep Actions in OData v4 geschrieben und uns eine Umsetzung angeschaut, wie du von außen eine Action mit tiefen Strukturen aufrufen kannst. Über Marian Zeis kam nun die Frage, wie Deep Table Actions umgesetzt werden können.

 

Einleitung

Bei Deep Actions geht es darum, dass wir eine verschachtelte Struktur an die Aktion übergeben wollen. So können wir zum Beispiel nicht nur einen Beleg übergeben, sondern auch in der gleichen Struktur die Tabelle der verschiedenen Positionen und weiterer Zusatzdaten. Da wir hier mit tiefen Strukturen arbeiten, können wir verschiedene Informationen auf verschiedenen Ebenen mitgeben.

 

Implementierung

Schauen wir uns dazu eine Implementierung in unserer Anwendung zur komplexen Entität an und was du dabei beachten solltest.

 

Erweiterung

Dazu erweitern wir unsere API "ZBS_API_RAPC_INVOICE_O4" aus dem oben genannten Blog. Im ersten Schritt benötigen wir eine neue Aktion. Diese ist im Grunde wie die andere Aktion aufgebaut, nur das noch das Schlüsselwort TABLE ergänzt werden muss.

static action CreateMultipleInvoices deep table parameter ZBS_S_RAPCreateInvoice;

 

Dadurch ändert sich der Parameter von einer Struktur zu einer Tabelle. Damit könnten wir nun direkt eine Tabelle an das Objekt übergeben.

 

Problem

Allerdings gibt es nun im OData Service einen Fehler, wenn wir versuchen zuzugreifen. Wenn wir das Service Binding aufrufen, erhalten wir allerdings eine Fehlermeldung "Error in entity 'ZBS_C_RAPCINVOICE(CDS)': 'T' is not a valid value of the enumeration type 'TY_ACTION_PARAMETER_DEPTH'.":

 

Über me.sap.com findest du auch eine entsprechende Frage in der SAP Community zu dem Thema. Dort findest du zwar keine Antwort der SAP, allerdings hatte sich der Entwickler bereits durch das SADL Framework debuggt und die auskommentierte Stelle plus Kommentar gefunden.

 

Hinweis: Geprüft hatten wir diesen Stand im ABAP Environment, damit scheint im Moment die Deep Table nicht im OData unterstützt zu sein.

 

EML

Allerdings funktioniert das Beispiel weiterhin mit dem RAP Business Objekt in EML. Dazu können wir entsprechende Daten vorbereiten.

DATA lt_document TYPE tt_document.

INSERT VALUE #( %cid = xco_cp=>uuid( )->value ) INTO TABLE lt_document REFERENCE INTO DATA(lr_new_item).

lr_new_item->%param = VALUE #( Partner = '1000000004'
                               ( Document  = 'TEST'
                                 _position = VALUE #( Unit     = 'ST'
                                                      Currency = 'EUR'
                                                      ( Material = 'F0001' Quantity = '2' Price = '13.12' )
                                                      ( Material = 'H0001' Quantity = '1' Price = '28.54' ) ) )
                               ( Document  = 'TEST2'
                                 _position = VALUE #( Unit     = 'ST'
                                                      Currency = 'USD'
                                                      ( Material = 'G0001' Quantity = '2' Price = '17.12' )
                                                      ( Material = 'Z0001' Quantity = '1' Price = '29.55' ) ) ) ).

 

Im Anschluss rufen wir per EML dann unsere Aktion auf und übergeben die beiden Dokumente an das Statement. Im Anschluss können wir die Aktion testen.

MODIFY ENTITIES OF ZBS_R_RAPCInvoice
       ENTITY Invoice
       EXECUTE CreateMultipleInvoices FROM lt_document
       FAILED DATA(ls_failed_deep)
       REPORTED DATA(ls_reported_deep).

 

Setzen wir nun einen Breakpoint in der Aktion und schauen uns die Payload an, erhalten wir unsere gesendeten Daten als Tabelle.

 

Workaround

Aktuell gibt es einen Workaround für das Problem. Dazu kannst du die Struktur als Dummy verwenden und die Tabelle auf der nächsten Ebene anhängen. In dem Artikel erfährst du mehr zur Verwendung und der Implementierung in eine Fiori App. Über unseren Artikel zum Thema Deep Action kannst du dir das Thema noch einmal im Detail anschauen. Dort erklären wir den Aufruf von außen und die Verwendung als EML.

Eine Verwendung von Tabellen in Fiori Elements Anwendungen (Aktion) ist allerdings weiterhin nicht unterstützt, hier kannst du nur flache Strukturen verwenden.

 

Komplettes Beispiel

Die Anpassungen und gezeigten Ressourcen findest du auf GitHub im Repository. Die Änderungen wurden über den folgenden Commit durchgeführt.

 

Fazit

Aktuell kannst du die Funktion der DEEP TABLE PARAMETER nur eingeschränkt im EML Umfeld verwenden und nicht direkt im Service. Der Workaround über die Dummy-Struktur kann allerdings helfen, nicht die komplette Idee über den Haufen zu werfen.

 

Quelle:
SAP Help - Modeling Parameters for Non-Standard Operations


Enthaltene Themen:
RAPBTPActionDeep
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


RAP - EML Varianten

Kategorie - ABAP

Wenn du EML verwendest, um mit dem ABAP RESTful Application Programming Model zu interagieren, stehen dir aktuell mehrere Varianten zur Verfürgung. Schauen wir sie uns einmal im Detail an.

16.09.2025

RAP - Generator (from Scratch)

Kategorie - ABAP

Deine Entwicklung mit RAP fühlt sich manchmal sehr langsam an? Generatoren nehmen dir die Arbeit ab, um den eigentlich Stack aufzubauen und wiederkehrende Arbeit abzunehmen.

05.08.2025

RAP - Aktion (Verarbeitungsoptionen)

Kategorie - ABAP

Wie aktivierst du eigentlich den Multi-Select in RAP und steuerst die verschiedenen Verarbeitungsoptionen? Hier schauen wir uns die verschiedenen Möglichkeiten im Framework an.

01.08.2025

RAP - Custom Entity mit Aktion

Kategorie - ABAP

Wie kannst du eigentlich in einer Custom Entity eine Action sauber implementieren, um am Ende auch das UI zu aktualisieren? Schauen wir uns die verschiedenen Schritte im Detail an.

29.07.2025

RAP - API Pattern

Kategorie - ABAP

In diesem Artikel schauen wir uns das API-Pattern für RAP an und wie du es flexibel in der ABAP Entwicklung einsetzen kannst, um Schnittstellen zur Verfügung zu stellen.

20.06.2025