El AdminService implementado en nuestro escenario hasta ahora expone el modelo de datos subyacente de forma individual. Estos servicios son bastante raros. En su lugar, los servicios a menudo exponen vistas desnormalizadas que se adaptan a casos de uso específicos. Veamos un ejemplo a continuación.
Modelamos un CatalogService que expone libros y autores del modelo de dominio para su uso en una aplicación de librería. En otras palabras, este servicio está destinado a permitir a los usuarios del catálogo acceder a los libros y a sus autores y realizar pedidos.
El nuevo servicio que estamos creando también está definido en la carpeta srv del proyecto CAP. Utilizamos el archivo cat-service.cds para esto (véase la siguiente figura).

Primero, procedemos exactamente de la misma manera que con el AdminService: Importamos todas las definiciones con el prefijo de espacio de nombres com.sap.learning desde el archivo db/schema.cds y establecemos el alias local db para las definiciones importadas (línea 1).
Las líneas 3 a 31 contienen un bloque service que define una interfaz de servicio llamada CatalogService como una colección de entidades expuestas. La anotación @path se utiliza para especificar la vía de acceso de URL /cat con la que se podrá acceder al servicio.
El servicio de catálogo expone dos entidades que se definen como proyecciones en entidades del modelo de dominio subyacente. Las líneas 5ff declaran una entidad llamada Libros, que es una vista en la entidad Libros definida en el modelo de dominio importado. Por consiguiente, una entidad Authors se declara en las líneas 18ff como una proyección en la entidad Authors del modelo de dominio.
Más adelante veremos la entidad Autores en el Servicio de Catálogos con más detalle. Primero, veamos más de cerca la entidad Libros.
A diferencia de la entidad Books en AdminService, que expone la entidad de dominio subyacente de forma 1:1, la entidad Books en CatalogService utiliza una cláusula de selección explícita. Esto significa que solo se expone lo que se enumera explícitamente en la cláusula de selección.
Las expresiones de vía de acceso llamadas se pueden utilizar en la cláusula de selección para navegar por asociaciones y/o elementos estructurados.
En el ejemplo mostrado, la asociación de autores de la entidad de modelo Libros se utiliza para acceder al nombre del autor y esto se incluye en la cláusula de selección como escritor.
También publCountry es una asociación definida en la entidad modelo Libros. Se utiliza para relacionar la entidad Libros con la lista de códigos sap.common.Countries . En el ejemplo, el nombre del país de esta lista de códigos se incluye en la cláusula select como publCountry.
El elemento de precio de la entidad de dominio Libros tiene un tipo estructurado. Los dos componentes importe y moneda de este tipo también se incluyen en la cláusula de selección mediante las expresiones de ruta correspondientes.

