This is a test message to test the length of the message box.
Login
ABAP RAP EML Varianten
Erstellt von Software-Heroes

RAP - EML Varianten

82

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.

Werbung


In diesem Artikel schauen wir uns einmal verschiedene EML Varianten an, wie du sie nutzen kannst und für welche du dich entscheiden solltest.

 

Einleitung

Die Entity Manipulation Language, kurz EML, wird verwendet, um in ABAP mit einem RAP Objekt zu interagieren. Bist du in dem Thema RAP noch ganz neu, dann wird dich die neue Syntax erst einmal überfordern. Hier solltest du dich Stück für Stück heranarbeiten, um ein besseres Verständnis zu erlangen. Auf unserem Blog findest du zu diesem Thema bereits zwei Artikel, wenn du dich einlesen möchtest:

 

Aufbau

Schauen wir uns dazu einmal ein EML Beispiel an und zerlegen es in die verschiedenen Bestandteile. Grundsätzlich werden in vielen EML Statements die gleichen Dinge wiederverwendet und tauchen öfters auf. Dazu ein typisches Beispiel.

 

  1. Aktion - Welche Aktion soll ausgeführt werden, ein READ um Einträge über Schlüssel zu lesen, ein MODIFY um Daten im Objekt zu ändern.
  2. RAP Objekt - Hierbei handelt es sich um das eigentlich RAP Objekt bzw. den Wurzelknoten des Objekts. Zu diesem Namen wirst du auch eine Verhaltensdefinition im System finden, wo die Möglichkeiten und Einstellungen beschrieben sind.
  3. Entität - Der Name einer Entität aus einem RAP Objekt. Wurde ein ALIAS für eine Entität vergeben, kannst du die Entität darüber ansprechen.
  4. Zusatz - Zusätzliche Eigenschaften wie die Feldliste, die neuen Daten oder Einschränkungen in Form von Schlüsseln.

 

In den folgenden Kapiteln würden wir die Varianten nach WITH und FROM trennen, um die Unterschiede etwas besser hervorzuheben. Dabei verwenden wir das RAP Objekt aus dem einfachen RAP Beispiel mit einer Entität auf dem Partner.

 

Anlage

In diesem Kapitel geht es um die Anlage eines einfachen Datensatzes. Dabei wollen wir nur einige Felder des Datensatzes befüllen und schauen uns dabei die Unterschiede an.

 

WITH

Bei der Variante legen wir einen neuen Datensatz im System an. Mit dem Zusatz FIELDS definieren wir die Felder, die befüllt werden sollen. Der Schlüssel wird dabei durch das Framework befüllt. Hinter WITH geben wir eine Tabelle an und befüllen die beiden Felder, die wir definiert haben.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner CREATE FIELDS ( PartnerName Country )
       WITH VALUE #( ( PartnerName = 'TEST: WITH'
                       Country     = 'US' ) ).

 

FROM

Bei dieser Variante wird der Zusatz FIELD weggelassen, dafür müssen wir hier mit der CONTROL Struktur arbeiten, um dem Framework zu sagen, welche Felder berücksichtigt werden sollen. Grundsätzlich ist das Statement damit kleiner, das VALUE Statement aber viel größer. In dieser Variante sprechen wir jeden CONTROL Feld einzeln an, du kannst hier aber auch eine Schachtelung mit einem VALUE nutzen. Unserer Meinung nach ist diese Variante etwas einfacher zu lesen.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner CREATE
       FROM VALUE #( ( PartnerName          = 'TEST: FROM'
                       Country              = 'US'
                       %control-PartnerName = if_abap_behv=>mk-on
                       %control-Country     = if_abap_behv=>mk-on ) ).

 

Ergebnis

Nach dem Einfügen der beiden Operationen erhalten wir das folgende Ergebnis.

 

Anlage (Mehr)

In der zweiten Variante fügen wir wieder einen neuen Datensatz in die Datenbank ein. Hier geben wir aber eine Information mehr mit, denn wir befüllen das Feld Straße.

 

WITH

Im Grunde ist dieses Statement wie zuvor, wir befüllen nur zusätzlich die Straße. Da wir das Feld aber nicht in der FIELDS Bedingung angeben, wird es bei der Anlage ignoriert.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner CREATE FIELDS ( PartnerName Country )
       WITH VALUE #( ( PartnerName = 'TEST: WITH'
                       Country     = 'DE'
                       Street      = 'With-Street' ) ).

 

FROM

Auch hier haben wir ein ähnliches Verhalten wie bei dem Zusatz mit WITH. Da wir die CONTROL Struktur nicht gesetzt haben, wird das Feld bei der Verarbeitung ignoriert.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner CREATE
       FROM VALUE #( ( PartnerName          = 'TEST: FROM'
                       Country              = 'DE'
                       Street               = 'From-Street'
                       %control-PartnerName = if_abap_behv=>mk-on
                       %control-Country     = if_abap_behv=>mk-on ) ).

 

Ergebnis

Hier wieder das Ergebnis der zwei neuen Datensätze, die Straße bleibt weiterhin leer.

 

Aktualisierung

In diesem Beispiel wollen wir die bereits angelegten Datensätze aktualisieren. Dabei übergeben wir die Nummer des Partners, ein leeres Feld für den Namen des Partners und wieder die Straße.

 

WITH

In diesem Fall führen wir ein Update durch und geben damit die Schlüsselinformation an. Den Schlüssel müssen wir nicht als Feld definieren, damit dieser verwendet wird. Wir lassen dabei den Namen leer und haben wieder die Straße befüllt. Da wir den Namen in der FIELDS Bedingung haben, wird dieser auf der Datenbank geleert.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner UPDATE FIELDS ( PartnerName Country )
       WITH VALUE #( ( PartnerNumber = '1000000018'
                       PartnerName   = ''
                       Street        = 'TEST: WITH2'
                       Country       = 'CH' ) ).

 

FROM

Im Grunde das gleiche Szenario wie beim Fall davor, wir geben den Schlüssel an, müssen diesen aber nicht in der CONTROL Struktur aktivieren. Auch in diesem Beispiel leeren wir den Namen auf der Datenbank und aktualisieren das Land.

MODIFY ENTITIES OF ZBS_I_RAPPartner
       ENTITY Partner UPDATE
       FROM VALUE #( ( PartnerNumber        = '1000000019'
                       PartnerName          = ''
                       Street               = 'TEST: FROM2'
                       Country              = 'CH'
                       %control-PartnerName = if_abap_behv=>mk-on
                       %control-Country     = if_abap_behv=>mk-on ) ).

 

Ergebnis

Zum Abschluss noch das Ergebnis. In diesem Fall haben wir die beiden Datensätze aktualisiert, die Felder auf der Datenbank wurden geleert und das Land geändert.

 

Vollständiges Beispiel

Den vollständigen Code aus dem Beispiel heute findest du hier. Wenn du die Klasse ausführst und dir das Beispiel anschaust, solltest du das Use-Case für Use-Case machen, um die Veränderungen der Daten zu sehen.

CLASS zcl_bs_demo_eml_fields DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

  PRIVATE SECTION.
    METHODS create_with.
    METHODS create_from.
    METHODS create_with_more.
    METHODS create_from_more.
    METHODS update_with_less_fields.
    METHODS update_from_less_fields.
ENDCLASS.


CLASS zcl_bs_demo_eml_fields IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    create_with( ).
    create_from( ).

    create_with_more( ).
    create_from_more( ).

    update_with_less_fields( ).
    update_from_less_fields( ).

    COMMIT ENTITIES.
  ENDMETHOD.


  METHOD create_with.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner CREATE FIELDS ( PartnerName Country )
           WITH VALUE #( ( PartnerName = 'TEST: WITH'
                           Country     = 'US' ) ).
  ENDMETHOD.


  METHOD create_from.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner CREATE
           FROM VALUE #( ( PartnerName          = 'TEST: FROM'
                           Country              = 'US'
                           %control-PartnerName = if_abap_behv=>mk-on
                           %control-Country     = if_abap_behv=>mk-on ) ).
  ENDMETHOD.


  METHOD create_with_more.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner CREATE FIELDS ( PartnerName Country )
           WITH VALUE #( ( PartnerName = 'TEST: WITH'
                           Country     = 'DE'
                           Street      = 'With-Street' ) ).
  ENDMETHOD.


  METHOD create_from_more.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner CREATE
           FROM VALUE #( ( PartnerName          = 'TEST: FROM'
                           Country              = 'DE'
                           Street               = 'From-Street'
                           %control-PartnerName = if_abap_behv=>mk-on
                           %control-Country     = if_abap_behv=>mk-on ) ).
  ENDMETHOD.


  METHOD update_with_less_fields.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner UPDATE FIELDS ( PartnerName Country )
           WITH VALUE #( ( PartnerNumber = '1000000018'
                           PartnerName   = ''
                           Street        = 'TEST: WITH2'
                           Country       = 'CH' ) ).
  ENDMETHOD.


  METHOD update_from_less_fields.
    MODIFY ENTITIES OF ZBS_I_RAPPartner
           ENTITY Partner UPDATE
           FROM VALUE #( ( PartnerNumber        = '1000000019'
                           PartnerName          = ''
                           Street               = 'TEST: FROM2'
                           Country              = 'CH'
                           %control-PartnerName = if_abap_behv=>mk-on
                           %control-Country     = if_abap_behv=>mk-on ) ).
  ENDMETHOD.
ENDCLASS.

 

Fazit

Grundsätzlich stehen die in EML zwei Varianten zur Verfügung und du kannst nach eigenen Präferenzen entscheiden, welche du davon gern nutzt. Möchtest du mehr mit dem Fields Zusatz arbeiten und die Felder explizit angeben oder bevorzugst du die Variante mit der CONTROL Struktur, um das Verhalten zu steuern. Wichtig dabei ist allerdings, dass du eine Variante verwendest.

 

Quelle:
SAP Help - MODIFY ENTITY


Enthaltene Themen:
RAPBTPEMLVarianten
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 - 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

RAP - Mehrere Filter und Einstellungen

Kategorie - ABAP

Wie sieht es eigentlich aus, wenn wir in RAP mehrere Filter und Felder als Standard setzen wollen und dazu noch eine standardmäßige Sortierung benötigen?

16.05.2025