OData Service in SAP ERP einfach einrichten

OData – Eine Schnittstelle in SAP ERP für die Kommunikation mit externen Geräten. Die Geschäftsdaten sowie die Geschäftsprozesse eines Unternehmens befinden sich heutzutage in einem oder mehreren Backend-Systemen. Der Systemzugriff wird häufig über proprietäre Programmierlösungen durchgeführt. Vor allem, da die wichtigen Geschäftsdaten nicht redundant und veraltet gehalten werden sollen, muss es für externe Programme möglich sein, auf das SAP-System und die notwendigen Daten zuzugreifen.

Auch gerade für die Entwicklung von mobilen Anwendungen mit Fiori und SAPUI5 in der SAP Cloud Platform ist OData eine wichtige Schnittstelle, die man häufig benutzt. Denn das Frontend oder die mobilen Anwendungen bekommen schließlich vom Backend-System die Daten.

Wie man OData in SAP ERP einrichtet, möchte ich Dir in diesem Artikel ausführlich erklären.

Was ist OData?

OData ist ein REST-basiertes Datenzugriffsprotokoll, das für die Datenabfrage und -änderung entwickelt wurde. Der lesende und schreibende Zugriff auf Daten wird mithilfe von CRUD-Operationen gewährleistet.

Die Abkürzung CRUD setzt sich aus den Anfangsbuchstaben der Wörter Create, Read, Update und Delete zusammen. Damit wird das Anlegen, Lesen, Ändern und Löschen von Daten ermöglicht.

Basierend auf Internettechnologien wie Hypertext Transfer Protocol (HTTP), Atom Publishing Protocol, Extensible Markup Language (XML) und JavaScript Object Notation (JSON) stellt OData eine definierte Schnittstelle fur den Zugriff auf verschiedenen Datenquellen zur Verfügung.

Strukturierte Daten werden zwischen Client und Server ausgetauscht. Dabei definiert der angebotene Service durch den Server die zugreifbaren Ressourcen, die HTTP-Operationen und das Format, in denen die Ressourcen abgefragt werden. XML und JSON sind Formate, die beispielsweise unterstützt werden.
Eine Implementierung auf Basis von OData verwendet folgende Komponenten:

  • Datenmodell
  • Protokoll
  • Client-Bibliotheken
  • Services
  • URI-Konventionen

Das Datenmodell sichert das Format der übermittelten Daten. Gemäß den Vorgaben des Protokolls werden Abfragen und Antworten zwischen dem Client und dem Service übermittelt. Die Bibliotheken liefern ein Rahmenwerk für die Entwicklung von Anwendungen, die auf OData-Ressourcen zugreifen und erleichtern die Verwendung von OData.
Die Implementierung wird durch den OData-Service benutzt. Außerdem können eine große Anzahl an URI-Konventionen verwendet werden, die beispielsweise die Navigation, Filterung und Sortierung beinhalten. Die Abkürzung URI steht für “Uniform Resource Identifier” und gibt den Ort und die Zugriffsmethode der Ressource an.

Was ist das SAP Gateway?

Ein Ansatz, um die genannten Schwierigkeiten zu beseitigen, ist die Verwendung von offenen Standards, die in einer Zwischenschicht mit dem SAP Gateway implementiert werden. SAP Gateway ist ein Framework und eine REST-basierte Schnittstelle für die ABAP-Technologieplattform auf Basis des OData-Protokolls.

Heutzutage befinden sich die Geschäftsdaten und -prozesse eines Unternehmens in einem oder mehrere SAP-Backend-Systemen. Häufig wird der Systemzugriff über mehrere unterschiedliche Programmierlösungen durchgeführt. Die Anpassung, Wartung und Weiterentwicklung sind mit Kosten und individuellen Programmieraufwänden verbunden. Zusätzlich zu den verschiedenen Backend-Systemen muss eine große Anzahl an Endgeräten und Kommunikationskanälen unterstützt werden. Obwohl manche Backend-Systeme eine Webschnittstelle bereitstellen, führt die Verknüpfung der Endgeräte mit dem Backend-System zu einer Punkt-zu-Punkt-Lösung.

Ein Ansatz, um die genannten Schwierigkeiten zu beseitigen, ist die Verwendung von offenen Standards, die in einer Zwischenschicht mit dem SAP Gateway implementiert werden. SAP Gateway ist ein Framework und eine REST-basierte Schnittstelle für die ABAP-Technologieplattform auf Basis des OData-Protokolls.

Wichtige Transaktionen für OData in SAP ERP

TransaktionBeschreibung
SEGWSAP Gateway Service Builder
/IWFND/MAINT_SERVICEServices aktivieren und verwalten
/IWFND/GW_CLIENTSAP Gateway Client
/IWFND/ERROR_LOGSAP Gateway: Fehlerprotokoll

OData Service erstellen

ABAP-Struktur anlegen

Ein OData Service kann auf eine ABAP-Struktur basieren. Natürlich kann man auch komplett eigene Felder definieren, aber es wird sehr empfohlen, eine bestehende oder eigene ABAP-Struktur für den OData-Service zu verwenden. Bevor man also einen OData Service überhaupt erstellen kann, muss man im ABAP Dictionary in der Transaktion SE11 eine entsprechende ABAP-Struktur anlegen.

In diesem Beispiel verwende ich eine Z-Tabelle, die auf der Tabelle SPFLI basiert. Zusätzlich dazu habe ich das Attribut CURRNAME aus der Tabelle SCARR mit aufgenommen, da im späteren Verlauf eine Read-Operation auf einen Join zwischen SPFLI und SCARR erzeugt wird.

In diesem Beispiel verwende ich eine Z-Tabelle, die auf der Tabelle SPFLI basiert. Zusätzlich dazu habe ich das Attribut CURRNAME aus der Tabelle SCARR mit aufgenommen, da im späteren Verlauf eine Read-Operation auf einen Join zwischen SPFLI und SCARR erzeugt wird.

Wie gesagt ist dieser Schritt optional, aber sehr empfohlen.

OData Service anlegen

Um einen OData Service anzulegen, startet man den SAP Gateway Service Builder und damit die Transaktion SEGW.

Anschließend klickt man auf den Button für “Projekt anlegen”. In den darauf angezeigtem Fenster gibt man den Namen des Service (Projekt), die notwendigen Attribute und die Zuordnung zum Paket an.

Den vorgeschlagenen Projekttyp und die Generierungsstrategie kann man vorausgefüllt lassen.

Anschließend klickt man auf den Button für “Projekt anlegen”. In den darauf angezeigtem Fenster gibt man den Namen des Service (Projekt), die notwendigen Attribute und die Zuordnung zum Paket an.

Den vorgeschlagenen Projekttyp und die Generierungsstrategie kann man vorausgefüllt lassen.

Entitätstypen festlegen

Nachdem der OData Service erstellt ist, muss man diesen noch mit entsprechenden Entitätstypen füllen. Dazu klickt man in der Baumstruktur im angelegten OData Service im Knoten “Data Model” mit der rechten Maustaste auf “Importieren > ABAP-Dictionary-Struktur”. Natürlich könnte man auch auf “Anlegen > Entitätstyp” eine eigene Entität definieren, aber das leichte Vorgehen ist der Import von einer ABAP-Struktur.

Nachdem der OData Service erstellt ist, muss man nicht noch mit entsprechenden Entitätstypen füllen. Dazu klickt man in der Baumstruktur im angelegten OData Service im Knoten “Data Model” mit der rechten Maustaste auf “Importieren > ABAP-Dictionary-Struktur”. Natürlich könnte man auch auf “Anlegen > Entitätstyp” eine eigene Entität definieren, aber das leichte Vorgehen ist der Import von einer ABAP-Struktur.

Daraufhin gibt man einen Namen der Entität an. Dieser kann komplett frei gewählt werden. Zusätzlich tragt man die eigene oder bereits vordefinierte ABAP-Struktur ein. Den Haken “StandrdentitMnge anlegen” sollte man auswählen, da dadurch die Standardentitäten mit angelegt werden.

Daraufhin gibt man einen Namen der Entität an. Dieser kann komplett frei gewählt werden. Zusätzlich tragt man die eigene oder bereits vordefinierte ABAP-Struktur ein. Den Haken “StandrdentitMnge anlegen” sollte man auswählen, da dadurch die Standardentitäten mit angelegt werden.

Im nächsten Schritt werden die in der Struktur enthaltenen Attribute angezeigt. Nun wählt man die Attribute aus, die man in der Entität mit aufnehmen möchte. Man kann dabei einzelne Attribute oder alle auswählen.

Daraufhin werden die in der Struktur enthaltenen Attribute angezeigt. Nun wählt man die Attribute aus, die man in der Entität mit aufnehmen möchte. Man kann dabei einzelne Attribute oder alle auswählen.

Als letztes wählt man noch die Attribute aus, die als Schlüsselwerte definiert werden sollen. Nach Klick auf “Fertig stellen” ist der Entitätstyp erfolgreich importiert.

Als letztes wählt man noch die Attribute aus, die als Schlüsselwerte definiert werden sollen. Nach Klick auf “Fertig stellen” ist der Entitätstyp erfolgreich importiert.

Wenn man anschließend den Entitätstyp in der Baumstruktur aufklappt, kann man die hinzufügten Attribute erkennen.

Wenn man einen Entitätstyp um weitere Attribute zu vergrößern, die aber nicht in der ABAP-Struktur vorhanden sind, entfernt man einfach nach dem Import die ABAP-Struktur im Entitätstyp.

Anschließend kann man durch Klick auf “Eigenschaften” und den Button “Zeile anhängen” oder “Zeile hinzufügen” eine neue Zeile und damit ein neues Attribut hinzufügen. Dabei kann man einen eigenen ABAP-Datentyp angeben.

Wenn man einen Entitätstyp um weitere Attribute zu vergrößern, die aber nicht in der ABAP-Struktur vorhanden sind, entfernt man einfach nach dem Import die ABAP-Struktur im Entitätstyp.

Anschließend kann man durch Klick auf “Eigenschaften” und den Button “Zeile anhängen” oder “Zeile hinzufügen” eine neue Zeile und damit ein neues Attribut hinzufügen. Dabei kann man einen eigenen ABAP-Datentyp angeben.

OData Service generieren bzw. aktivieren

Damit ein SAP-Objekt in SAP ERP verwendet werden kann, muss man es aktivieren. Einen OData Service kann man aktivieren, indem man den Button “Laufzeitobjekte erzeugen” klickt. Das ist der Button mit dem weiß-rot-gefleckten Kreis. Dadurch werden die notwendigen Laufzeitartefakte generiert.

Jedes mal, wenn man einen OData Service verändert, muss man die Laufzeitartefakte neu generieren.

Beim angezeigten PopUp kann man die vorausgefüllten Klassen so übernehmen. Alternativ kann man sich natürlich an die eigenen Namens-Konventionen halten.

Jedes mal, wenn man einen OData Service verändert, muss man die Laufzeitartefakte neu generieren.

Beim angezeigten PopUp kann man die vorausgefüllten Klassen so übernehmen. Alternativ kann man sich natürlich an die Namens-Konventionen halten.

Anschließend weißt man den Laufzeitobjekten das Paket zu. Nach dem erfolgreichen Generieren erhält man die Erfolgsmeldungen in dem Bereich “Nachrichten” im unteren Bereich.

In der Baumstruktur unter “Laufzeitartefakte” kann man nun die generierten Klassen erkennen.

OData Service registrieren

Damit der OData Service auch im SAP Gateway verwendet werden kann, muss man den erzeugten OData Service registrieren. Hierzu gibt es zwei Möglichkeiten:

  • Im SAP Gateway Service Builder (Transaktion SEGW)
  • Transaktion /IWFND/MAINT_SERVICE

Der einfachste Weg, einen OData Service zu aktivieren, ist direkt im SAP Gateway Service Builder. Im Knoten “Serviceverwaltung > GW_HUB” kann man einfach durch Klick auf den Button “Serv. registr.” den Service registrieren.

Der einfachste Weg, einen OData Service zu aktivieren, ist direkt im SAP Gateway Service Builder. Im Knoten “Serviceverwaltung > GW_HUB” kann man einfach durch Klick auf den Button “Serv. registr.” den Service registrieren.

Nach dem Betätigen des Buttons gibt man noch technische Informationen an und bestätigt das Fenster. Die Vorauswahl reicht für die Registrierung absolut aus.

In der Transaktion /IWFND/MAINT_SERVICE kann man den Service ebenfalls aktivieren. Hierzu klickt man zuerst auf den Button “Service hinzufügen” und wählt anschließend in der Liste den erstellten OData Service aus. Wenn man auf den technischen Servicenamen klickt, kann man noch relevante Informationen zum Service bzw. zur Registrierung angeben.

In der Transaktion /IWFND/MAINT_SERVICE kann man den Service ebenfalls aktivieren. Hierzu klickt man zuerst auf den Button “Service hinzufügen” und wählt anschließend in der Liste den erstellten OData Service aus. Wenn man auf den technischen Servicenamen klickt, kann man noch relevante Informationen zum Service bzw. zur Registrierung angeben.
In der Transaktion /IWFND/MAINT_SERVICE kann man den Service ebenfalls aktivieren. Hierzu klickt man zuerst auf den Button “Service hinzufügen” und wählt anschließend in der Liste den erstellten OData Service aus. Wenn man auf den technischen Servicenamen klickt, kann man noch relevante Informationen zum Service bzw. zur Registrierung angeben.

Anschließend ist ebenfalls der OData Service registriert.

CRUD-Operationen für einen OData-Service anlegen

Nachdem der OData Service erstellt und registriert ist, wird er leider immer noch bei einer CRUD-Operation nicht funktionieren bzw. keine Daten zurückliefern.

Bei einem ersten Test im SAP Gateway Client in der Transaktion /IWFND/GW_CLIENT bekommt man bei einer GET-Operation zwar eine 200-Statusmeldung zurück, dafür aber leider noch keine Daten.

Um das zu ändern, richtet man die entsprechenden Methoden für die CRUD-Operation ein.

In den Laufzeitartefakten klickt man einfach doppelt auf die Data-Provider-Erweiterungsklasse. Im Standard beginnt diese mit “ZCL_” und endet mit “_DPC_EXT“. Dazwischen wird der OData Service-Name aufgeführt. Nach dem Doppelklick springt man in den Class Builder und kann die geerbten CRUD-Methoden redefinieren.

Um die GET-Operation für das gesamte Entityset zu definieren, muss man die Methode “*_GET_ENTITYSET” redefinieren.

Nach dem Redefinieren sieht man bereits ein auskommentiertes Coding, das es zu erweitern gilt. Um also die Daten aus der SPFLI und SCARR zu lesen, eignet sich folgende Programmierung:

  METHOD spfliset_get_entityset.

          SELECT spfli~carrid
          spfli~connid
          spfli~cityfrom
          spfli~cityto
          spfli~distance
          scarr~carrname
          FROM spfli
          JOIN scarr ON spfli~carrid = scarr~carrid
          INTO CORRESPONDING FIELDS OF TABLE et_entityset.

      ENDMETHOD.

Nach dem Speichern nicht das Aktivieren vergessen.

OData Service testen

Abschließend ist es von großen Vorteil, den OData Service einmal zu testen. Hierfür kann man den SAP Gateway Client in der Transaktion /IWFND/GW_CLIENT benutzen.

Indem man die Request-URI angibt, kann man mit dem Radio-Button “GET” einfach eine GET-Operation ausführen und überprüfen, ob die Daten korrekt übergeben werden.

Abschließend ist es vom großen Vorteil, den OData Service einmal zu testen. Hierfür kann man den SAP Gateway Client in der Transaktion /IWFND/GW_CLIENT.

Indem man die Request-URI angibt, kann man mit dem Radio-Button “GET” einfach eine GET-Operation ausführen und überprüfen, ob die Daten korrekt übergeben werden.

So kann man in der URI auch Operation wie filter, select, orderby, count, expand oder format testen.

Vor allem ist die Funktion “EntitySets” nützlich, um den korrekten Entitätstyp auszuwählen und den Aufruf korrekt durchzuführen.

Und nun ist der OData-Service fertig angelegt und kann bereits dafür genutzt werden, um Daten aus dem SAP-Backend zu lesen. Man kann nun die weiteren CRUD-Methoden redefinieren, um mit dem OData-Service vollumfänglich die Daten im Backend zu verwalten.

Über den Autor

Andreas Geiger

Schön, dass Du Dich für SAP ERP interessierst.

Mein Name ist Andreas Geiger und ich bin der Gründer von ERP-UP.de. Mein Ziel ist es, so viel nützliches Wissen wie möglich über das SAP ERP-System zu vermitteln. Ich möchte Dir damit einen Mehrwert bieten. Es freut mich, wenn ich Dir damit helfen kann.

Mehr zu ERP UP

2 Gedanken zu „OData Service in SAP ERP einfach einrichten“

Schreibe einen Kommentar