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?
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
Transaktion | Beschreibung |
---|---|
SEGW | SAP Gateway Service Builder |
/IWFND/MAINT_SERVICE | Services aktivieren und verwalten |
/IWFND/GW_CLIENT | SAP Gateway Client |
/IWFND/ERROR_LOG | SAP 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.
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.
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.
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.
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.
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.
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.
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.
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.
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
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.
Sehr interessant 🙂
Das freut mich, wenn ich unterstützen kann.
Tolle Anleitung! Die einzige, die dich Schritt für Schritt im ERP durch den ganzen Vorgang leitet.
Ja – sehr schöne Schritt für Schritt Anleitung.
Vielen Dank für die Anleitung!
Ist die ODATA Schnittstelle mit dieser Beschreibung auch im ECC 6.0 (740) verwendbar oder erst ab HANA?
Danke!
Hallo Michael,
Die OData-Schnittstelle steht ebenfalls in SAP ECC zur Verfügung. Die Transaktion SEGW ist sowohl im Gateway als auch in SAP ECC verfügbar und wird für die Modellierung des Dienstes und die Generierung der Laufzeitobjekte verwendet (Design Time).
Der Dienst kann innerhalb der SAP ECC gehostet werden, wenn die GW-Komponente bereits Teil der ECC ist (Embedded Architecture).
Wenn die GW-Komponente nicht Teil der ECC ist und sich auf einem anderen System befindet (separates GW-Hub-System), wird der Dienst auf diesem GW-System gehostet.