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.

