Cómo se utilizan las asociaciones en la programación ABAP


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:

  1. Abra el menú contextual del Definiciones de datos carpeta y seleccione la Nueva definición de datos artículo.

Elemento del menú contextual:

  1. 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.

Crear la definición de datos

  1. En el paso siguiente, seleccione una solicitud de transporte y confírmela haciendo clic en el Próximo botón.
  2. 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.

Seleccionar una plantilla para la definición de datos

  1. 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.

No seleccione una plantilla para la entidad de proyecció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.

Seleccionar una plantilla de código para una vista de proyección

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.

Vinculación de servicios con asociaciones

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.



Your email address will not be published. Required fields are marked *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.