Uso de asociaciones y composiciones

Objective

After completing this lesson, you will be able to utilizar asociaciones para capturar relaciones entre entidades

Asociaciones de A uno gestionadas

Las asociaciones se utilizan para definir relaciones entre entidades.

En el ejemplo que se muestra en la figura Asociación de libros a autores, la asociación entre libros y autores se define mediante el elemento de autor en la entidad Libros. Este elemento crea un enlace a la entidad Autores, que establece una relación en la que puede navegar desde una entidad Libros al autor asociado para recuperar más detalles, como el nombre del autor.

Detrás de escena

La asociación a uno Libros:autor en el código de ejemplo es una asociación administrada, donde los campos de clave externa y las condiciones on se agregan automáticamente detrás de escena.

En función de la clave primaria del destino, es decir, la entidad Authors, CDS añade automáticamente el campo de clave externa auth_ID a una base de datos SQL tras la activación (véase la figura Campo de clave externa generado) e implícitamente añade la condición de conexión correspondiente.

Además de las asociaciones gestionadas, también podemos utilizar asociaciones no gestionadas. Las asociaciones no gestionadas especifican explícitamente condiciones de conexión arbitrarias en su cláusula on , que hacen referencia a los campos de clave externa disponibles.

Nota

En aras de la concisión y la comprensibilidad de sus modelos, siempre debe preferir asociaciones gestionadas para asociaciones a uno.

A continuación, examinaremos un ejemplo de una asociación a muchos.

A muchas asociaciones

Un autor puede escribir cualquier número de libros, es decir, un autor puede estar asociado con ninguno, uno o múltiples libros.

La figura Asociación de autores a libros muestra cómo se definen tales asociaciones a muchos en un modelo CDS.

La relación entre la entidad Autores y la entidad de destino Libros se especifica mediante el elemento de libros en la entidad Autores. La sintaxis Association to many Books indica que un autor está asociado con cualquier número de libros.

En la condición on , los libros de nombres de asociación se utilizan como alias para la entidad de destino Libros que se va a vincular. La cláusula on books.author = $self especifica que el campo Autor en la entidad Libros se utiliza para crear el vínculo a la entidad Autores. $self es un marcador de posición que hace referencia a la instancia actual de un autor.

En general, una expresión según el siguiente patrón se especifica en la condición on para asociaciones to-many:

<assoc>.<backlink> = $self

El backlink puede ser cualquier asociación administrada a uno en el lado de muchos que apunte de nuevo a un lado.

Nota

CDS actualmente no proporciona ningún soporte especial para asociaciones de muchos a muchos. Por lo tanto, debe resolver asociaciones de varios a muchos en dos asociaciones de uno a varios utilizando una entidad de enlace para conectar las dos.

Composiciones

Además de las asociaciones, CAP también admite el modelado de composiciones.

Las asociaciones relacionan entidades que pueden existir independientemente entre sí, como autores y libros.

Las composiciones, por otro lado, representan relaciones contenidas y se utilizan para modelar estructuras de documento. A menudo se muestran en escenarios de cabecera subordinada a varios, como pedidos y artículos de pedido.

Composición significa que la entidad inferior (posiciones de orden) forma parte de un todo y no puede existir independientemente de la entidad superior (orden). La entidad secundaria se encuentra en la entidad principal y solo se puede acceder a ella.

La figura Ejemplo de una composición demuestra cómo se definen las composiciones en CDS. La composición mostrada define una relación de uno a varios entre órdenes y posiciones de orden. La sintaxis es muy similar a la definición de una asociación de uno a muchos. La única diferencia es la cláusula Composition of en lugar de la cláusula Association to por un lado (compare la asociación entre autores y libros arriba).

Los tiempos de ejecución de CAP tratan las composiciones de forma diferente a las asociaciones en algunos aspectos. Entre otras cosas, existen las siguientes características especiales para las composiciones:

  • Eliminación derivada

    El borrado de una orden también provocaría el borrado de todas sus posiciones de orden debido a la relación de composición.

  • Inserción profunda

    En el servicio OData generado, tanto una orden como las posiciones de orden incluidas se pueden crear mediante una única solicitud POST.

A continuación, veamos cómo se pueden exponer las asociaciones en las interfaces de servicio.

Exponer asociaciones en interfaces de servicio

Publicación de asociaciones en proyecciones

Puede añadir asociaciones como elementos regulares a la lista de selección de una vista (as select from ) o proyección (as projection on ). Un select * incluye todas las asociaciones.

La figura Exposición de proyecciones muestra las dos proyecciones AdminService.Books y AdminService.Authors de nuestro escenario, que se exponen a través de AdminService. La firma efectiva de la proyección AdminService.Books contiene una asociación de autores con las mismas propiedades que la asociación de autores de la entidad com.sap.learning.Books. Del mismo modo, la firma de la proyección AdminService.Authors contiene una asociación de libros con las mismas propiedades que la asociación de libros de la entidad com.sap.learning.Authors.

Asociaciones redirigidas automáticamente

El AdminService que se muestra en la figura Exposición de proyecciones expone las dos proyecciones en las entidades del modelo de datos subyacente.

Al exponer entidades relacionadas, las asociaciones se redireccionan automáticamente. Esto garantiza que los clientes puedan navegar entre las entidades proyectadas como se esperaba (consulte la figura Asociaciones redirigidas). Esto significa que AdminService.Authors.books apunta a AdminService.Books - y no a com.sap.learning.Books. Del mismo modo, AdminService.Books.author se refiere a AdminService.Authors - y no a com.sap.learning.Authors.

Propiedades de navegación

En el servicio OData generado, las asociaciones publicadas están disponibles como propiedades de navegación con el mismo nombre.

La figura Propiedades de navegación generadas muestra el extracto correspondiente del documento de metadatos de servicio. El tipo de entidad Libros tiene un autor de propiedad de navegación y el tipo de entidad Autores tiene un libro de propiedades de navegación.

Demostración y ejercicio: Añadir asociaciones al Domain Model

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 Configurar una base de datos SQLite persistente con datos iniciales para el desarrollo si lo ha completado correctamente. Como alternativa, también puede utilizar la rama 4_SQLite_database 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 5_musculaciones 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 añadir asociaciones al modelo de dominio.

A continuación, veremos cómo se pueden ampliar las definiciones de entidades con nuevos elementos utilizando los denominados aspectos.