Exponer vistas desnormalizadas

Objective

After completing this lesson, you will be able to definir servicios adaptados a casos de uso específicos utilizando vistas desnormalizadas

Expresiones de ruta

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.

Selector inteligente y cláusula de exclusión

Ahora echemos un vistazo a la segunda entidad que se expone a través del CatalogService. La entidad Authors en CatalogService es una proyección en la entidad Authors del modelo de dominio importado. 

Utilizando la cláusula de exclusión en combinación con el selector inteligente * en la cláusula de selección, todos los elementos de la entidad de dominio Autores excepto los enumerados en la lista de exclusión se incluyen en la proyección.

La entidad modelo Autores tiene una asociación de época a través de la cual la entidad Autores está relacionada con la lista de códigos Epochs. El nombre de época de esta lista de códigos se incluye en la proyección como elemento adicional con el período de nombre utilizando una expresión de vía de acceso.

Demostración y ejercicio: Definir un servicio basado en vistas desnormalizadas

Nota

Como ejercicio, lleve a cabo las instrucciones paso a paso en la siguiente demostración en SAP Business Application Studio.

Como punto de partida para el ejercicio, utilice el resultado del ejercicio anterior Añadir control de concurrencia optimista si lo ha completado correctamente. Como alternativa, también puede utilizar la ramificación 9_concurrency_control del siguiente repositorio GitHub como punto de partida:

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

La implementación completa de la simulación se puede encontrar en la rama 10_denormalized_views del repositorio GitHub.

Puede encontrar información detallada sobre el contenido del repositorio y cómo utilizarlo aquí.

Vea el vídeo para ver cómo definir un servicio basado en vistas desnormalizadas.