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

44

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 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.


ABAP Cloud - Programmiermodell

Kategorie - ABAP

Welches Programmiermodell kommt mit ABAP Cloud zum Einsatz und was können wir aus dem Vorgänger lernen? Mehr Details im Artikel.

03.01.2025

RAP - Side Effects

Kategorie - ABAP

Wie kannst du Teile der Fiori UI aktualisieren, ohne einen kompletten Refresh zu machen? Mit Side Effects ist das in ABAP und RAP ganz leicht möglich.

27.12.2024

RAP - Events

Kategorie - ABAP

Wie kannst du eigentlich Events in RAP erzeugen und mit ABAP verarbeiten? Hier erfährst du mehr zur eventgetriebenen Verarbeitung.

23.12.2024

RAP - Excel Datei laden

Kategorie - ABAP

In diesem praktischen Beispiel schauen wir uns die Verarbeitung von Excel in ABAP mit den neuen XCO Klassen an und wie wir die Datei in unser RAP Objekt bekommen.

20.12.2024

RAP - Semantischer Schlüssel

Kategorie - ABAP

Wofür benötigst du den semantischen Schlüssel und wie wird er im ABAP RESTful Programming Model dargestellt? Hier gibt es mehr dazu.

13.12.2024