En ABAP, las asociaciones definen cómo las entidades comerciales se relacionan entre sí y permiten la navegación, el control del ciclo de vida y la integración de la interfaz de usuario en las aplicaciones SAP Fiori.
En esta publicación, aprenderá cómo crear y vincular entidades asociadas (usando «Ingrediente» como ejemplo) y conectarlas a la entidad raíz «Receta» a través de composiciones, proyecciones, definiciones de comportamiento, extensiones de metadatos y definiciones de servicios.
Paso 1: Crear una definición de datos CDS para una entidad asociada
Primero, debe crear una entidad base para la entidad asociada. Para hacerlo, siga estos pasos:
- Abra el menú contextual del Definiciones de datos carpeta y seleccione la Nueva definición de datos artículo.

- En el cuadro de diálogo que se abre, ingrese un nombre y una descripción para la definición de datos. Para nuestro ejemplo, ingrese «ZACB_R_INGREDIENT» como nombre. En el Objeto referenciado campo, también debe ingresar un objeto referenciado; En nuestro ejemplo, esta es la tabla de base de datos para el Ingrediente objeto. Luego, haga clic en el Próximo botón.

- En el paso siguiente, seleccione una solicitud de transporte y confírmela haciendo clic en el Próximo botón.
- Seleccione una plantilla. En nuestro caso, queremos crear nuestra propia entidad y por lo tanto seleccionar definirViewEntity como plantilla. Esta plantilla genera los campos más importantes para la definición de datos.

- Confirme la selección de la plantilla haciendo clic en el Finalizar botón.
La codificación CDS se generará a partir del listado siguiente en función de la plantilla y el objeto al que se hace referencia.
define view entity ZACB_R_Ingredient select from zacb_ingredient
{
key recipe_id as RecipeId,
key ingredient_id as IngredientId,
name as Name,
quantity as Quantity,
unit as Unit,
created_by as CreatedBy,
created_at as CreatedAt,
local_last_changed_by as LocalLastChangedBy,
local_last_changed_at as LocalLastChangedAt,
last_changed_at as LastChangedAt,
last_changed_by as LastChangedBy
}
Paso 2: Crear una vista de proyección en ABAP CDS
Ahora necesitas repetir los pasos 1 a 4 para crear una entidad de proyección. Sin embargo, esta vez no selecciona una plantilla (consulte la figura a continuación), sino que hace clic directamente en la Finalizar botón.

Se crea una definición de datos vacía. Puedes usar el definirProyección-Ver patrón para activar una generación automática de código. Para ello debe introducir «defineProje…» en la ventana vacía del editor. La función de solución rápida del Herramientas de desarrollo ABAP Luego sugerirá la plantilla adecuada.

Cuando seleccione la plantilla, el código se generará automáticamente a partir de este listado.
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Ingredient'
@Metadata.ignorePropagatedAnnotations: true
define view entity ZACB_C_Ingredient as projection on
data_source_name
{
}
Paso 3: Definir campos y claves en la entidad de proyección
Agregue aquí el nombre de la entidad base como nombre_fuente_datos. También puede especificar los campos de la entidad base y usar la clave para definir qué campos son campos clave.
define view entity ZACB_C_Ingredient
as projection on ZACB_R_Ingredient as Ingredient
{
key RecipeId,
key IngredientId,
Name,
Quantity,
Unit,
LocalLastChangedAt,
LocalLastChangedBy,
LastChangedAt,
LastChangedBy,
}
Paso 4: Vincular entidades de base con composición y asociación
Ahora, primero las dos entidades base deben estar vinculadas entre sí mediante una asociación. Para hacer esto, primero creamos un composición desde la entidad raíz en dirección a la entidad vinculada (consulte la lista a continuación). Una composición define una dependencia existencial entre dos entidades, por lo que la entidad secundaria no puede existir sin la entidad principal.
define root view entity ZACB_R_Recipe
as select from zacb_recipe
composition [0..*] of ZACB_R_Ingredient as _Ingredient
{
key recipe_id as RecipeId,
recipe_name as RecipeName,
…
En el nivel de la entidad asociada, debe utilizar asociación con padre para agregar una asociación a la entidad raíz. Esto crea una relación ascendente con la entidad raíz.
@EndUserText.label: 'CDS entity Ingredient'
define view entity ZACB_R_Ingredient
as select from zacb_ingredient
association to parent ZACB_R_Recipe as _Recipe
on $projection.RecipeId = _Recipe.RecipeID
{
key recipe_id as RecipeId,
key ingredient_id as IngredientId,
…
Paso 5: Conectar entidades de proyección mediante asociaciones redirigidas
También se debe crear un vínculo entre las dos entidades a nivel de las entidades de proyección. En la entidad raíz, debe agregar la expresión secundaria redirigida a la composición.
…
define root view entity ZACB_C_Recipe
provider contract transactional_query
as projection on ZACB_R_Recipe
{
…
_Ingredient : redirected to composition child
ZACB_C_Ingredient,
}
Se realiza un vínculo similar desde la entidad asociada a la entidad raíz. Aquí, debe ingresar la adición redirigida a los padres (consulte la lista a continuación). La relación definida de esta manera se utiliza para navegar entre las entidades en el enlace del servicio.
…
define view entity ZACB_C_Ingredient
as projection on ZACB_R_Ingredient as Ingredient
{
…
_Recipe : redirected to parent ZACB_C_Recipe
}
Paso 6: Ampliar la definición de comportamiento para entidades asociadas
Debes definir un comportamiento para cada entidad. Para hacer esto, desea ampliar la definición de comportamiento como se muestra en este listado.
- Las asociaciones se publican en las entidades.
- Los registros de datos de entidades asociadas, como el ingrediente, se crean a través de la entidad raíz.
- El comportamiento de bloqueos y autorizaciones se realiza a través de la entidad raíz.
managed implementation in class zbp_acb_r_recipe unique;
strict ( 2 );
with draft;
define behavior for ZACB_R_Recipe alias Recipe
…
association _Ingredient { create; with draft; }
…
define behavior for ZACB_R_Ingredient alias Ingredient
persistent table zacb_ingredient
lock dependent by _Recipe
authorization dependent by _Recipe
draft table zacb_ingredien_d
{
update;
delete;
field ( readonly ) RecipeId;
field ( readonly ) IngredientId;
association _Recipe { with draft; }
mapping for zacb_ingredient
{
…
}
}
Estas asociaciones también deben definirse en la definición de comportamiento de las entidades de proyección.
projection;
strict ( 2 );
use draft;
define behavior for ZACB_C_Recipe alias Recipe
…
use association _Ingredient { create; with draft; }
…
define behavior for ZACB_C_Ingredient alias Ingredients
…
use association _Recipe { with draft; }
Paso 7: Actualización de extensiones de metadatos para SAP Fiori Display
Para garantizar que las entidades vinculadas se muestren en la aplicación SAP Fiori, se debe extender la extensión de metadatos de la entidad raíz y se debe crear una extensión de metadatos separada para las entidades secundarias. Se debe agregar una faceta a la extensión de metadatos de la entidad raíz.
{
id : 'controlSection',
type : #LINEITEM_REFERENCE,
position : 20,
targetElement: '_Ingredient'
},
La anotación targetElement se utiliza para indicar que se supone que la extensión de metadatos de la entidad asociada debe llamarse y mostrarse en esta sección.
Paso 8: exponer asociaciones en la definición del servicio
Finalmente, se debe especificar la asociación en la definición del servicio.
@EndUserText.label: 'Recipe'
define service ZACB_UI_RECIPE {
expose ZACB_C_Recipe as Recipe;
expose ZACB_C_Ingredient as Ingredient;
}
Una vez que todos los artefactos de desarrollo creados y modificados se hayan activado con éxito, el vínculo entre las dos entidades se podrá ver en el enlace del servicio.

Repita los pasos que se muestran aquí para todas las entidades asociadas.
Conclusión
Las asociaciones en ABAP hacen más que conectar entidades: definen la propiedad, la dependencia del ciclo de vida, el manejo de autorizaciones y la navegación de la interfaz de usuario en su aplicación. Al combinar composiciones, redirecciones de proyección, definiciones de comportamiento, extensiones de metadatos y exposición de servicios, se crea una relación transaccional y totalmente navegable entre entidades como Receta e Ingrediente. Una vez activadas, estas asociaciones potencian sin problemas SAP Fiori navegación y manejo de borradores, lo que hace que el modelado de entidades estructuradas sea una habilidad crítica para el desarrollo ABAP moderno.
Nota del editor: esta publicación ha sido adaptada de una sección del libro. Libro de cocina ABAP: recetas prácticas para la programación moderna por Fabián Lupa y Sven Treutler. Fabian es ingeniero de software senior y formador en Adesso, donde trabaja desde 2022. Su principal responsabilidad es la formación y el desarrollo de los empleados en el contexto de la programación ABAP, así como la habilitación de desarrolladores en proyectos de clientes. Sven es un apasionado desarrollador ABAP. Desde 2010 trabaja en el desarrollo ABAP en rku.it GmbH en Herne. Allí se centra en las nuevas tecnologías y el control de calidad en el entorno ABAP.
Esta publicación se publicó originalmente el 2/2026.
