Moin, heute bauen wir ganz einfach einen OData Service in der SAP Cloud Foundry mit Hilfe des SAP Cloud Application Programming Models und Core Data Services (CDS). Groß programmieren müssen wir dafür nicht, es reicht im Grunde zwei Dateien zu editieren.
Die SAP Cloud Platform Business Application fasst die UI, das Datenbankmodell und den OData-Service in einem Projekt zusammen. Wir beschränken uns in diesem Beitrag auf die DB und den Service.
Ich habe ein Beispiel für dich vorbereitet, so dass wir uns den befüllten OData Service am Ende ansehen können.
[0]: Voraussetzungen
Um diesem Beispiel zu folgen benötigst du:
- einen SAP-User
- Zugriff auf die Cloud Foundry (die Trial-Version reicht aus)
- es hilft wenn du mit der WebIDE umgehen kannst
Du hast noch gar nicht mit der SAP Cloud und der Web IDE gearbeitet? Dann guck dir mal diesen Beitrag von uns an, da arbeitest du erstmal mit einem fertigen OData Service und einem UI-Template. Falls du deine Cloud Foundry Trial noch nicht aktiviert hast, gehst du einfach in das Cloud Platform Cockpit (CPC) und klickst dort auf Cloud Foundry .
Bevor es aber richtig los gehen kann müssen wir unsere IDE noch etwas konfigurieren. Dafür gehst du einmal in die Einstellungen der WebIDE.

Da findest du unter Worspace Preferences > Cloud Foundry die Einstellungen für die Cloud Foundry.
Über das Drop Down Menü wählst du den ...api.cf.eu10...
Endpunkt aus. Die WebIDE fragt dich dann nach deinem Login-Daten. Hier meldest du dich mit der E-Mail und dem Passwort deines SAP-Accounts an.
Und das war es auch schon, jetzt kann es losgehen.
[1]: Projekt anlegen
Wechsel einmal in die Development Ansicht indem du auf das Symbol –> (</>) klickst.
Mit einem Rechtsklick auf Workspace
> New
> Project from Template
. In dem PopUp stellst du die Category auf “All categories” und suchst das SAP Cloud Platform Business Application Template.
In diesem Beispiel möchte ich einen einfachen Online-Shop-Backend erstellen, also gebe ich als Projektname einfach “Shop” ein. In dem nächsten Schritt kannst du die Einstellungen beibehalten.

Im letzten Schritt hast du die Wahl zwischen einem Java- oder NodeJS-OData Service. Mit NodeJS bekommst du einen OData Service in Version 4 mit Java Version 2.
Dabei solltest du bedenken, dass nicht alle UI5 Templates V4 unterstützen, wenn du also nach diesem Beitrag noch eine UI hinzufügen möchtest empfehle ich den Java Service.
Ich passe noch den Package-Namen an. Den Rest kannst du so lassen.

Achtung! Der OData Service den wir jetzt anlegen läuft ohne Authentifizierung.

Öffne mal die beiden Dateien die ich rot markiert habe. In der data-model.cds
-Datei definieren wir gleich unsere Datenbankstruktur. Und in der cat-service.cds
-Datei definieren wir danach unseren OData-Service.
[2]: OData Model & Service mit CDS
Die beiden Dateien sind zu diesem Zeitpunkt bereits mit Beispieldaten befüllt. Du kannst sie dir ruhig noch mal kurz ansehen, denn wir werden sie gleich durch ein etwas komplexeres Beispiel ersetzen.
Trotzdem geht es hier natürlich nicht um das Schema sondern um die Technologie. Wenn dir mein Beispiel also nicht gefällt kannst du auch etwas anderes benutzen.
Ich befülle die data-model.cds
jetzt mit dem folgenden Inhalt.
namespace my.shop; entity Customers { key C_ID : Integer; C_Name : String; C_Address : String; } entity Vendors { key V_ID : Integer; V_Name : String; } entity Products { key P_ID : Integer; P_Name : String; P_Vendor : Association to Vendors; P_UnitsInStock : Integer; P_Price : Decimal(10,2); P_EAN : String; } entity Orders { key O_ID : Integer; O_Items : Composition of many OrderItems on O_Items.OI_Order = $self; O_Customer : Association to Customers; } entity OrderItems { key OI_Order : Association to Orders; OI_Product : Association to Products; OI_Quantity : Integer; }
Bevor du jetzt speicherst, müssen wir noch den Service konfigurieren, dafür passen wir die andere Datei an.
using my.shop as my from '../db/data-model'; service CatalogService { entity Customers as projection on my.Customers; entity Vendors as projection on my.Vendors; entity Products as projection on my.Products; entity Orders as projection on my.Orders; entity OrderItems as projection on my.OrderItems; }
Diese ist deutlich kürzer und recht übersichtlich oder? Wenn du dir das original Beispiel angesehen hast, dann ist dir bestimmt aufgefallen, dass da noch ein @readonly
neben der Entity stand. Und daraus folgt natürlich, dass dieser Service auch Schreibzugriffe zulassen wird.
Wenn du mehr zu der Syntax erfahren willst kannst du mal hier nachlesen. Und das war es auch schon.
Ja wirklich, damit hast du einen OData-Service + Datenbank angelegt. Jetzt speicherst du einmal beide Dateien (Strg+Shift+S).
Jetzt öffnet sich die Konsole und es wird und die CDS Dateien werden kompiliert. Wenn hier ein Fehler auftritt, dann hast du dich vermutlich vertippt.

Hier noch mal der Hinweis, unser Dienst läuft ohne Authentifizierung jeder, der die URL kennt, kann Daten in die Datenbank schreiben.
Bevor wir zum nächsten Schritt gehen, sehen wir uns noch kurz an, was die WebIDE da gebaut hat.
Wirf auch mal einen Blick in /srv/src/resources/edmx/
da liegen zwei Dateien für den Service. Die Inhalte dürften dir bekannt vor kommen, schließlich stammen sie von den beiden Dateien ab, die wir vorher bearbeitet hatten.
[3]: Daten, Deploy und Erkundung
Bevor wir jetzt die DB und den Service in der Cloud deployen. Befüllen wir ihn noch mit Beispieldaten.
Für mein Beispiel habe ich bereits ein paar CSV-Dateien und die nötige Data.hdbtabledata
. In einem Git Repository abgelegt, diese kannst du hier als zip-Datei laden.
In der WebIDE dem db
Verzeichnis legst du einen neues Verzeichnis csv
an. Über Rechtsklick auf csv
> Import
> File or Project
lädst du die import.zip
Datei hoch.

Jetzt musst du noch mal den CDS Build auslösen. Wenn der fertig ist, startest du per Rechtsklick auf das db
-Verzeichnis Build
> Build
den Build-Prozess für die Datenbank.

Je nach Auslastung der Cloud kann dieser Prozess ein paar Minuten dauern, steh mal auf und mach dir einen frischen Kaffee.
Zum Abschluss starten wir den Java-Service. Wenn der Service gestartet ist, erscheint unten in der Console eine URL zu deinem neuen OData-Service.
Wenn du die URL öffnest, kannst du dir deinen neuen Service ansehen. Hänge mal /$metadata
an die URL damit kannst du die die Metadaten des Services ansehen.

Die Datensätze kannst du dir ansehen, in dem du zum Beispiel /Products
an die URL hängst.

Damit ist unser OData Service fertig und du hast wieder etwas gelernt. Wenn du noch Zeit hast, kannst du ja einen anderen Beitrag lesen.
Du interessierst dich für Fiori und hast Lust coole Projekte mit uns zu machen? Wir suchen dich! Schau doch mal in unserer Stellenbeschreibung vorbei.