Johannes Behrndt
 - 18. Juni 2015

SAP OData Service implementieren (Teil 2/4)

oData von SAP

Willkommen zum zweiten Teil meines OData Tutorials. In diesem Blogbeitrag werde ich Ihnen erklären, wie Sie einen bestehenden OData Service mit Business Logik füllen können. Am Ende dieses HowTo's werden Sie bereits Daten in ihrem Browser sehen.

Unser Video-Kurs „ODATA Services im SAP UI5 Umfeld“

OData Services im SAPUI5 Umfeld

Limitierte Rabattaktion für unseren Kurs „OData Services im SAPUI5 Umfeld“.

Für Besucher von Mission Mobile können wir unseren Kurs „ODATA Services im SAP UI5 Umfeld“ mit kräftigem Rabatt anbieten:

Kurs: „ODATA Services im SAP UI5 Umfeld

PS: Wir haben den Rabatt nur für 20 Käufe erhalten. Falls Sie den Link klicken und keine Vergünstigung mehr angezeigt werden, ist unser Kontingent bereits aufgebraucht.

OData Service mit Business Logik füllen

Falls Sie den ersten Teil des Tutorials noch nicht durchgearbeitet haben, bitte ich Sie dies als erstes nachzuholen.

Dieses HowTo ist der zweite Teil einer Reihe von Blogbeiträgen zum Thema OData. Hier alle Themen der Blogbeiträge in der Übersicht:

  1. OData Service definieren
  2. OData Service implementieren
  3. OData: Filter und Navigation implementieren
  4. OData: Entitäten erstellen

Rückblick

In vorherigen Tutorial haben Sie gelernt, wie man einen OData Service definieren und auf dem Gateway registrieren kann. Es wurden allerdings noch keine Daten angezeigt. Das ist offensichtlich, denn das SAP-System weiß bisher ja auch gar nicht, was für Daten geliefert werden sollen. Im nächsten Schritt werde ich Ihnen erklären, an welcher Stelle die Business Logik hinterlegt werden muss, damit der OData Service auch Daten überträgt.

E-Book: App-Entwicklung

In diesem E-Book geht es um die Entwicklung von Enterprise-Apps mit SAPUI5 und OData.

Die Data-Provider Klasse erweitern

Am Ende des letzten Tutorials haben Sie die Laufzeitartefakte angelegt. Diese Klassen werden vom SAP-System aufgerufen, wenn der OData Service angefragt wird. Sie können sich im SAP NetWeaver Gateway Service Builder (SEGW) alle Laufzeitobjekte anzeigen lassen.

    • Öffnen Sie die Transaktion SEGW
    • Öffnen Sie Ihr Projekt und dort die Laufzeitobjekte
    • Sie sehen dort auch die Data-Provider Erweiterungsklasse
    • Ein Doppelklick auf Ihren Namen führt Sie zur Methodenliste dieser Klasse

Die Erweiterungsklasse erbt Ihre Methoden von der Data-Provider-Basisklasse. Diese werden in den nächsten Schritten dann von Ihnen redefiniert. Der Grund hierfür ist, dass Ihre Anpassungen bei einer erneuten Generierung der Basisklasse verloren gehen würden. Änderungen in den Erweiterungsklassen bleiben jedoch erhalten. Scrollen Sie bitte an das Ende der Methodenliste. Sie sehen nun die folgenden Methoden:

Erweitern der Data Provider Klasse

Erweitern der Data-Provider Klasse

Diese Methoden werden vom SAP-System aufgerufen, wenn eine OData-Anfrage gestellt wird. Im Folgenden erkläre ich kurz die Bedeutung jeder Methode:

X_CREATE_ENTITY: Erstellen einer Entität vom Typ X (zB. Equipment)
X_DELETE_ENTITY: Löschen einer gegebenen Entität vom Typ X
X_GET_ENTITY: Anfrage nach einer einzelnen Entität (zB. anhand der ID) vom Typ X
X_GET_ENTITYSET: Anfrage nach einer Collection vom Typ X
X_UPDATE_ENTITY: Aktualisieren einer gegebenen Entität vom Typ X

Vorbereitung der Tabellen

Damit unser Service auch Daten liefern kann, muss es auch welche im System geben. Um dieses Tutorial zu vereinfachen, erstellen Sie bitte zwei Datenbanktabellen für jede Entität. Diese könnten beispielsweise ZHH_EQUI für Equipments und ZHH_QMEL für ServiceNotifications heißen. Diese Namen sind an die Tabellennamen angelehnt, welche im SAP System für die entsprechenden Objekte verwendet werden. Die Attribute für jede Entität entnehmen Sie bitte dem ersten Teil des Tutorials. Achtung: Sie können hier nicht die gleichen Datentypen verwenden wie in der Definition vom OData Service. Verwenden Sie bitte Datentypen aus dem ABAP Dictionary, welche zu den jeweiligen Attributen passen. Sie können sich natürlich auch an meiner Beispiellösung orientieren:

Tabelle ZHH_EQUI

Tabelle ZHH_EQUI

Tabelle ZHH_EQUI

Tabelle ZHH_QMEL

Tabelle ZHH_QMEL

Tabelle ZHH_QMEL

Anmerkung: Wenn Sie dieses Tutorial durchgearbeitet haben, dann können Sie ja versuchen, die SAP Tabellen und BAPIs zur Implementierung Ihres OData Service zu benutzen.

Beispieldaten pflegen

Füllen Sie Ihre Tabellen bitte mit Beispieldaten. Achten Sie dabei darauf, dass die Kundennummer von Equipment und zugehöriger Servicemeldung identisch sein sollte. Sie können die Daten zum Beispiel über die SE16N einpflegen. Meine Beispieldaten finden Sie hier:

Tabelle ZHH_EQUI

Implementierung EQUI Daten

Implementierung EQUI Daten

Tabelle ZHH_QMEL

Implementierung QMEL Daten

Implementierung QMEL Daten

Alle Entitäten zurückgeben

Jetzt befinden sich genügend Daten im Backend, dass Ihr OData Service genutzt werden kann. Damit die Daten auch ausgegeben werden, müssen die Methoden GET_ENTITY und GET_ENTITYSET in der Data-Provider Erweiterungsklasse redefiniert werden. Navigieren Sie nun in die Erweiterungsklasse der EquipmentCollection und markieren Sie die Methode EQUIPMENTCOLLECT_GET_ENTITYSET und klicken Sie auf OData Implementierung Redefine (Redefinieren). Sie können die Methode nun mit diesem Code füllen:

DATAlt_equi TYPE TABLE OF zhh_equi,
ls_equi TYPE zhh_equi,
ls_entity TYPE zcl_zuif_test_mpc=>ts_equipment.

SELECT FROM zhh_equi INTO TABLE lt_equi.

LOOP AT lt_equi INTO ls_equi.
ls_entityequipmentid ls_equiid.
ls_entitycustomerid ls_equicustomerid.
ls_entitydesription ls_equidescription.
ls_entityendofwarranty ls_equiendofwarranty.
ls_entityserialnumber ls_equiserialnumber.

INSERT ls_entity INTO TABLE et_entityset.
ENDLOOP.

ET_ENTITYSET ist der Export-Parameter der Methode und enthält die Menge der Entitäten. Bisher werden einfach nur alle Einträge der Tabelle ZHH_EQUI ausgelesen und zur Rückgabetabelle hinzugefügt. In der Loop-Schleife können Typkonvertierungen durchgeführt werden. In diesem Beispielfall sollte aber alles ohne Probleme klappen. Wenn Sie Ihre Methode gesichert und aktiviert haben, können Sie nun erneut Ihren OData Service im Browser aufrufen. Wie das geht, wurde im ersten Teil des Tutorials erklärt. Sie sollten folgende Ausgabe erhalten, wenn Sie auf EquipmentCollection klicken (denken Sie an den URL-Zusatz ?sap-ds-debug=true):

OData Service Implementierung EQUI Ausgabe

OData Service Implementierung EQUI Ausgabe

Ihr OData Service liefert Ihnen nun also die gesamte Menge aller Equipments zurück. Redefinieren Sie nun analog die Methode SERVICENOTIFICAT_GET_ENTITYSET und überprüfen Sie die Funktionalität im Browser.

Eine Entität zurückgeben

Als nächsten werden Sie eine einzelne Entität zurückgeben. Wenn Sie in der Ausgabe im Browser auf den Link zu einer Entität klicken, dann bekommen Sie die Meldung, dass die Methode EQUIPMENTCOLLECT_GET_ENTITY in der Datenanbieterklasse nicht implementiert ist. Dies muss nun für beide Entitäten nachgeholt werden. Redefinieren Sie bitte die entsprechenden Methoden. Hier finden Sie den Beispielcode für die Equipment Entität:

DATAls_key_tab TYPE /iwbep/s_mgw_name_value_pair,
lv_equipmentid TYPE string,
ls_equi TYPE zhh_equi.

LOOP AT it_key_tab INTO ls_key_tab.
IF ls_key_tabname EquipmentID.
lv_equipmentid ls_key_tabvalue.
ENDIF.
ENDLOOP.

SELECT SINGLE FROM zhh_equi INTO ls_equi WHERE id lv_equipmentid.

er_entitycustomerid ls_equicustomerid.
er_entitydesription ls_equidescription.
er_entityendofwarranty ls_equiendofwarranty.
er_entityequipmentid ls_equiid.
er_entityserialnumber ls_equiserialnumber.

Ein Parameter der GET_ENTITY Methode ist die interne Tabelle LT_KEY_TAB. Sie enthält die Schlüsselwerte, welche die Entität eindeutig identifizieren. In diesem Fall enthält der Primärschlüssel lediglich die ID des Equipments. Nachdem die ID ausgelesen wurde, wird die entsprechende Zeile aus der Datenbank geladen und dem Exportparameter zugewiesen.

Wenn Sie die beiden GET_ENTITY Methoden redefiniert haben, können Sie im Browser auf eine Entität klicken und erhalten folgendes Ergebnis:

OData Implementierung EQUI Ausgabe Entität

OData Implementierung EQUI Ausgabe Entität

Ausblick

Ihr OData Service liefert nun erfolgreich einzelne Entitäten und die gesamte Menge aller Entitäten zurück. Im dritten Teil dieser Serie werde ich ihnen erklären, wie die Entitätsmenge nun gefiltert werden kann. Möglicherweise interessieren Sie sich nur für die Equipments von einem bestimmten Kunden? Oder für die Servicemeldungen zu einem bestimmten Equipment? Darüberhinaus werden Sie die Navigation von einem Equipment zu den passenden Servicemeldungen implementieren. Auch zu diesem Beitrag freue ich mich über Feedback und Anregungen.

Johannes Behrndt

Seit über 10 Jahren berate ich große und mittelständische Unternehmen rund um mobile Lösungen, insbesondere im SAP-Umfeld. Ich habe den Überblick über die relevanten SAP-Prozesse und kenne die neuesten Technologien für mobile Lösungen.

Sie haben Fragen? Kontaktieren Sie mich!




Das könnte Sie auch interessieren


Ein Kommentar zu "SAP OData Service implementieren (Teil 2/4)"

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.





Angebot anfordern
Preisliste herunterladen
Expert Session
Support