In der vorherigen Lektion haben wir die Aktion submitOrder für den CatalogService angelegt. Die Implementierung dieser Aktion ist noch nicht abgeschlossen, da wir noch nicht wissen, wie auf Datenbanktabellen zugegriffen werden kann. Wir werden das als nächstes lernen.
Um die Aktion submitOrder zu implementieren, benötigen wir die folgenden beiden Datenbankzugriffe:
- Wir möchten sicherstellen, dass der aktuelle Bestand für das bestellte Buch größer oder gleich der bestellten Menge ist. Dazu müssen wir den aktuellen Bestand aus der Datenbank auswählen.
- Wenn genügend Bücher auf Lager sind und der Auftrag daher ausgeführt wird, müssen wir den aktuellen Bestand reduzieren. Das bedeutet, dass der Bestand in der Datenbank entsprechend aktualisiert werden muss.
Fließende API
Das Modul cds.ql stellt ein SQL-ähnliches API zum Erstellen solcher Datenbankabfragen bereit. Die für unser Szenario erforderlichen Querys sind in der folgenden Abbildung dargestellt.

Die API wird über die globalen Objekte SELECT, INSERT, UPSERT, UPDATE und DELETE zur Verfügung gestellt.
Notiz
12const cds = require('@sap/cds');
const { SELECT, INSERT, UPSERT, UPDATE, DELETE } = cds.ql;Das über die aufgelisteten CRUD-Objekte verfügbare API ist als fließendes API konzipiert. Das bedeutet, dass die Methoden, die für diese Objekte verfügbar sind, Objekte desselben Typs zurückgeben. Verfügbare Eigenschaften, wie z.B. die Eigenschaft .one des im gezeigten Beispiel verwendeten SELECT-Objekts, haben auch Objekte desselben Typs wie ihr Wert. Dies ermöglicht eine Verkettung, wodurch die Kodierung intuitiv und lesbar wird.
Notiz
Um die Datenbanktabelle zu identifizieren, auf die zugegriffen werden soll, verwenden wir die CSN-Definition der Entität Bücher im gezeigten Beispiel. Dies ist der empfohlene Ansatz.
Fließende API mit getaggten Vorlagen
Alternativ zu den oben gezeigten klassischen Methodenaufrufen kann das fließende API auch mit getaggten Vorlagen verwendet werden. Die folgende Abbildung zeigt, wie die oben mit klassischen Methodenaufrufen konstruierten Queries mit getaggten Vorlagen angelegt werden können. Das Ergebnis ist in beiden Fällen gleich.

Notiz


