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

1013

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:
RAPBTPActionDeepREX2
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 - Änderungsbelege implementieren (Nativ)

Kategorie - ABAP

Hast du das passende Release, dann kannst du Änderungsbelege auch mittlerweile nativ in RAP implementieren, ohne viel mnauelle Implementierung. Schauen wir uns dazu die verschiedenen Schritte an.

24.04.2026

RAP - Auxiliary Class

Kategorie - ABAP

Wenn die Implementierung in der Verhaltensimplementierung eines RAP Objekts wächst, welche Möglichkeiten hast du dann noch für eine saubere Kapselung? Schauen wir uns das einmal im Detail an.

17.04.2026

RAP - Änderungsbelege implementieren (Manuell)

Kategorie - ABAP

In diesem Artikel steigen wir in die manuelle Implementierung der Änderungsbelege in unser RAP Objekt ein und schauen uns die verschiedenen Schritte der Integration an. Am Ende sollen Änderungsbelege automatisch erzeugt werden.

14.04.2026

RAP - Draft Query

Kategorie - ABAP

In diesem Artikel schauen wir uns die Draft Query in RAP an und wie du damit die Einträge und ihre Sichtbarkeit steuern kannst. Dazu schauen wir uns die Praxis an einem Beispiel an.

03.04.2026

RAP - Importance

Kategorie - ABAP

Schauen wir einmal auf die Wichtigkeit von Informationen innerhalb einer SAP Fiori Anwendung und wie wir damit die Sichtbarkeit in der RAP Anwendung steuern können.

24.03.2026