Denormalisierte Views exponieren

Objective

After completing this lesson, you will be able to definieren Sie Services, die auf bestimmte Anwendungsfälle zugeschnitten sind, mithilfe denormalisierter Sichten.

Pfadausdrücke

Der in unserem Szenario implementierte AdminService stellt das zugrunde liegende Datenmodell 1:1 bereit. Solche Dienste sind eher selten. Stattdessen exponieren Services oft denormalisierte Views, die auf bestimmte Anwendungsfälle zugeschnitten sind. Sehen wir uns im Folgenden ein Beispiel an.

Wir modellieren einen CatalogService, der Bücher und Autoren aus dem Domänenmodell für die Verwendung in einer Buchhandlung bereitstellt. Mit anderen Worten, dieser Service soll es Katalogbenutzern ermöglichen, auf Bücher und ihre Autoren zuzugreifen und Bestellungen aufzugeben.

Der neue Service, den wir nun anlegen, ist auch im Ordner srv des CAP-Projekts definiert. Dazu verwenden wir die Datei cat-service.cds (siehe folgende Abbildung).

Zuerst gehen wir genauso vor wie beim AdminService: Wir importieren alle Definitionen mit dem Namensraumpräfix com.sap.learning aus der Datei db/schema.cds und setzen den lokalen Alias db für die importierten Definitionen (Zeile 1).

Die Zeilen 3 bis 31 enthalten dann einen service -Block, der ein Service-Interface namens CatalogService als Sammlung exponierter Entitäten definiert. Die Annotation @path wird verwendet, um den URL-Pfad /cat anzugeben, unter dem auf den Service zugegriffen werden kann.

Der CatalogService stellt zwei Entitäten bereit, die als Projektionen für Entitäten aus dem zugrunde liegenden Domänenmodell definiert sind. Zeilen 5ff deklarieren eine Entität namens Dokumentenmappen, bei der es sich um eine Ansicht der im importierten Domänenmodell definierten Dokumentenmappenentität handelt. Dementsprechend wird eine Autorentität in den Zeilen 18ff als Projektion auf die Autorenentität aus dem Domänenmodell deklariert.

Wir werden uns später die Entität Autoren im CatalogService genauer ansehen. Sehen wir uns zunächst die Entität Bücher genauer an.

Im Gegensatz zur Dokumentenmappenentität im AdminService, die die zugrunde liegende Domänenentität 1:1 bereitstellt, verwendet die Dokumentenmappenentität im CatalogService eine explizite SELECT-Klausel. Das bedeutet, dass nur das exponiert wird, was explizit in der SELECT-Klausel aufgeführt ist.

In der select-Klausel können sogenannte Pfadausdrücke verwendet werden, um entlang von Assoziationen und/oder strukturierten Elementen zu navigieren.

Im gezeigten Beispiel wird die Autorenassoziation der Modellentität Dokumentenmappen verwendet, um auf den Namen des Autors zuzugreifen. Dieser wird als Writer in die select-Klausel aufgenommen.

Auch publCountry ist eine Assoziation, die für die Modellentität Dokumentenmappen definiert wurde. Sie wird verwendet, um die Entität Books mit der Codeliste sap.common.Countries zu verknüpfen. Im Beispiel ist der Ländername aus dieser Codeliste in der select-Klausel als publCountry enthalten.

Das Preiselement der Domänenentität Bücher hat einen strukturierten Typ. Die beiden Komponenten amount und currency dieses Typs werden ebenfalls über entsprechende Pfadausdrücke in die Select-Klausel aufgenommen.

Intelligenter Selektor und ausschließende Klausel

Sehen wir uns nun die zweite Entität an, die über den CatalogService bereitgestellt wird. Die Entität Autoren im CatalogService ist eine Projektion auf die Entität Autoren aus dem importierten Domänenmodell. 

Wenn Sie die Excluding-Klausel in Kombination mit dem Smart *-Selektor in der select-Klausel verwenden, werden alle Elemente der Domänenentität Autoren mit Ausnahme der in der Ausschlussliste aufgeführten Elemente in die Projektion einbezogen.

Die Modellentität Autoren hat eine Epochenassoziation, über die sich die Entität Autoren auf die Codeliste Epochen bezieht. Der Epochname aus dieser Codeliste wird über einen Pfadausdruck als zusätzliches Element mit dem Namen period in die Projektion aufgenommen.

Demonstration und Übung: Service basierend auf denormalisierten Ansichten definieren

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Verwenden Sie als Ausgangspunkt für die Übung das Ergebnis der vorherigen Übung Optimistische Parallelitätskontrolle hinzufügen, wenn Sie sie erfolgreich abgeschlossen haben. Alternativ können Sie auch den Branch 9_concurrency_control aus dem folgenden GitHub-Repository als Ausgangspunkt verwenden:

https://github.com/SAP-samples/cap-development-learning-journey

Die vollständige Implementierung der Simulation finden Sie im Zweig 10_denormalized_views des GitHub-Repositorys.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu erfahren, wie Sie einen Service basierend auf denormalisierten Ansichten definieren.