Definición de asociaciones entre vistas CDS

Objectives

After completing this lesson, you will be able to:
  • Definir asociaciones.
  • Exponer asociaciones.

Asociaciones en vistas CDS

En la lección anterior aprendió, que las dependencias de clave externa expresan relaciones entre tablas de base de datos. De forma similar, las asociaciones expresan relaciones entre entidades CDS.

Las asociaciones son más flexibles que las dependencias de clave externa. Una relación de clave externa siempre vincula una tabla de claves externas a una tabla de verificación. Una asociación puede vincular cualquier origen de asociación a cualquier destino de asociación. En particular, normalmente hay dos asociaciones entre las entidades CDS en las que existe una dependencia de clave externa entre dos tablas de base de datos. Veamos un ejemplo:

La definición de la tabla de base de datos EMPLOYEE contiene una dependencia de clave externa para el campo DEPMENT_ID, utilizando la tabla de base de datos DEPMENT como tabla de verificación. R_Employee y R_Department son vistas CDS que leen de estas dos tablas de base de datos. En el nivel CDS, la dependencia de clave externa corresponde a una asociación (relación) con R_Employee como fuente y R_Department como destino. Vincula a cada empleado con su departamento respectivo. Sin embargo, también puede haber una asociación (relación) en sentido inverso, vinculando un departamento con todos los empleados que trabajan en este departamento.

Las asociaciones se definen en la definición de datos de la entidad CDS que sirve como fuente de asociación. En nuestro ejemplo, esta es la definición de la vista CDS R_Employee. La asociación se define en la cláusula FROM, después de la fuente de datos de la vista. Una definición de vista CDS puede contener cualquier número de asociaciones.

Nota

El modelo de datos de SAP S/4HANA contiene vistas con más de cien asociaciones.

Una definición de asociación consta de las siguientes partes:

Destino de asociación

La asociación a la palabra clave va seguida del nombre del destino de asociación; en nuestro ejemplo, es la vista CDS R_Department. El destino de asociación siempre debe ser una entidad CDS. Es posible, pero no se recomienda, que las asociaciones en vistas CDS utilicen tablas de base de datos como destinos.

Nombre de asociación

El nombre de asociación viene después del suplemento AS y sirve como identificador para la asociación. Se recomienda utilizar un carácter de subrayado (_) como primer carácter del nombre de asociación CDS. En el ejemplo, el nombre de asociación es _Departamento.

Nota

Desde un punto de vista técnico, la definición de un nombre de asociación es opcional. Sin el nombre de asociación, el nombre del destino de asociación se utiliza como identificador para la asociación. Esto puede dificultar la lectura del código y hace imposible tener más de una asociación para el mismo destino. Por lo tanto, se recomienda encarecidamente definir un nombre de asociación para todas las asociaciones.

Condición de asociación

La condición de asociación empieza con la palabra clave ON. Normalmente, compara elementos de vista de la fuente de asociación para ver elementos del destino de asociación, pero también son posibles otras condiciones. En el formato recomendado, los elementos de vista de la fuente de asociación están a la izquierda, con $jection como prefijo, y los elementos de vista del destino de asociación a la derecha, con el nombre de asociación como prefijo.

Nota

Como no es necesario incluir el campo de cliente en la lista de elementos de las vistas CDS, el campo de cliente tampoco aparece en la condición de asociación.

Consejo

Al definir una asociación, utilice la finalización de código (Strg + Espacio) para insertar las palabras clave, el nombre del destino de asociación y los elementos de vista.

Cardinalidad de asociaciones

La cardinalidad de una asociación especifica el número de conjuntos de datos posibles en el destino de asociación para un conjunto de datos en la fuente de asociación.

En ABAP CDS, la cardinalidad se especifica en un par de corchetes inmediatamente después de la asociación de palabras clave.

La cardinalidad se especifica como [min..max] o solo [max]. Si se omite min, se utiliza el valor min = 0.

Los valores permitidos para el mínimo son 0 y todos los números enteros positivos. Los valores más comunes para el mínimo son 0 y 1.

Los valores permitidos para máx. son todos los números enteros positivos y el signo de asterisco (*) para un número máximo sin restricciones. Los valores más comunes para máx. son 1 y *.

Nota

Si no especifica una cardinalidad, se utiliza la cardinalidad predeterminada [0..1].

La verificación de sintaxis realiza una verificación de plausibilidad para el valor máximo de una cardinalidad. Para ello, compara la condición ON con la clave del destino de asociación. Si la condición ON califica completamente la clave primaria, se espera la cardinalidad 0..1 o 1..1.

En el ejemplo, la cardinalidad 0..* para la asociación _Department lleva a una advertencia de sintaxis porque el destino de asociación (R_Department) solo tiene un campo clave (Id) que está calificado en la condición ON.

Este ejemplo muestra la asociación en la dirección opuesta. Aquí, la cardinalidad 1..1 para la asociación _Employee provoca una advertencia de sintaxis porque el campo clave EmployeeID del destino de asociación R_Employee no está cualificado en la condición ON.

Consejo

En modelos de datos complejos, puede suceder que una cardinalidad sea correcta, aunque no coincida con la condición ON. En tal situación, simplemente puede ignorar la advertencia o suprimirla utilizando un pseudocomentario.

Asociaciones expuestas

Cuando define una nueva asociación, el editor muestra una advertencia de que la asociación no se utiliza. Existen dos formas de utilizar una asociación: puede definir una expresión de vía de acceso con esta asociación (véase más adelante) o exponerla.

Puede exponer una asociación añadiendo el nombre de asociación a la lista de elementos de la vista CDS. Esto hace que la asociación sea visible para el consumidor de la vista.

Nota

Cuando expone una asociación, es obligatorio que todos los elementos de la fuente de asociación, utilizados en la condición ON, formen parte de la lista de campos. Este requisito previo se cumple automáticamente cuando se utiliza el prefijo $jection en la condición ON.

Exponer las asociaciones en la presentación preliminar de datos

Si una definición de vista CDS contiene asociaciones expuestas, puede evaluar estas asociaciones en la herramienta Vista previa de datos de la siguiente manera:

  1. Abra la vista CDS en la presentación preliminar de datos.

  2. Seleccione una de las filas visualizadas y, a continuación, haga clic en la flecha situada junto al nombre de la vista en la barra de herramientas de la cabecera.

    Consejo

    También puede hacer clic con el botón derecho en la entrada y seleccionar Seguir asociación.

  3. Seleccione una asociación en la lista de asociaciones disponibles.

Cómo definir y exponer una asociación

Reproduzca el vídeo para ver cómo definir y exponer una asociación.

Definir una vista CDS con asociaciones

Defina una entidad de vista CDS básica para departamentos y las asociaciones entre departamentos y empleados.

Modelo:

  • /LRN/R_EMPLOYEE_ANN (Definición de datos)

Solución:

  • /LRN/R_DEPARTMENT_REL (Definición de datos)
  • /LRN/R_EMPLOYEE_REL (Definición de datos)

Prerrequisitos

Para este ejercicio, necesita la entidad de vista CDS para los datos de empleado que ha creado en un ejercicio anterior (el nombre sugerido era: Z##_R_Employee, donde ## es su número de grupo). Si no ha finalizado ese ejercicio, cree una copia de la definición de datos /LRN/R_EMPLOYEE_ANN.

Tarea 1: Definir una entidad de vista CDS para datos de departamento

Defina una entidad de vista CDS para datos de departamento (nombre sugerido: Z##_R_Department, donde ## es su número de grupo). Deje que la nueva entidad de vista CDS lea todos los campos de la tabla de base de datos que ha creado en el ejercicio anterior (el nombre sugerido era: Z##DEPMENT).

Nota

Si no ha finalizado el ejercicio anterior, puede permitir que su entidad de vista CDS lea la tabla de base de datos /LRN/DEPMENT_REL.

Pasos

  1. En su propio paquete, cree una nueva definición de datos (nombre sugerido: Z##_R_DEPARTMENT, donde ## es su número de grupo). Especifique su tabla de base de datos como Objeto referenciado y seleccione la plantilla Definir entidad de vista para generar la sentencia de definición, algunas anotaciones estándar y la lista de elementos.

    1. En la vista Explorador de proyectos, haga clic con el botón derecho en la definición de la tabla de base de datos Z##DEPMENT para abrir el menú contextual.

    2. En el menú contextual, seleccione Nueva definición de datos.

    3. Confirme que el campo Paquete contiene el nombre de su paquete y que el campo Objeto referenciado contiene el nombre de su definición de tabla de base de datos.

    4. En el campo Nombre, introduzca el nombre de la entidad de vista CDS (Z##_R_Department, donde ## es su número de grupo).

    5. Introduzca Departamento (entidad) en el campo Descripción y seleccione Siguiente.

    6. Confirme la orden de transporte y seleccione Siguiente.

      Atención

      Asegúrese de no seleccionar Finalizar todavía. Si lo hace, no podrá seleccionar la plantilla que desea utilizar.
    7. En la lista de plantillas, seleccione Definir entidad de vista y, a continuación, Finalizar.

  2. Aplicar formato de código fuente.

    1. En el menú Eclipse, seleccione Formato→de código fuente. Como alternativa, seleccione Mayús + F1.

  3. Active la definición de datos.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

Tarea 2: Definir una asociación

En su entidad de vista CDS básica para datos de empleado (el nombre sugerido era: Z##_R_Employee), defina y exponga una asociación utilizando su nueva entidad de vista CDS para datos de departamento como destino (nombre de asociación sugerido: _Department). Seleccione una cardinalidad que coincida con la cardinalidad utilizada en la relación de clave externa para el campo de tabla DEPARTMENT_ID.

Pasos

  1. Abra la definición de datos básicos para los datos de empleado (el nombre sugerido era: Z##_R_EMPLOYEE).

    1. Pulse Ctrl + Mayús + A.

    2. Introduzca Z##_R_.

    3. En la lista de posiciones coincidentes, seleccione Z##_R_EMPLOYEE (Definición de datos) y seleccione Siguiente.

  2. Defina una asociación a su entidad de vista CDS para datos de departamento con el nombre de asociación _Department.

    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345
      define view entity Z##_R_Employee as select from z##employ association to Z##_R_Department as _Department
  3. Defina la condición ON utilizando el campo ID de departamento en ambas entidades de vista.

    Consejo

    Utilice el prefijo $jection. para direccionar el elemento de la entidad de vista de origen y el prefijo the_Department. para direccionar el elemento de la entidad de vista de destino.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456
      define view entity Z##_R_Employee as select from z##employ association to Z##_R_Department as _Department on $projection.DepartmentId = _Department.Id
  4. Añada una cardinalidad que coincida con la cardinalidad de la relación de clave externa para el campo de tabla DEPARTMENT_ID.

    Nota

    La cardinalidad de la relación de clave externa es 0..*,1. La primera parte especifica el número de empleados por departamento. La segunda parte expresa el número de departamentos por empleado.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456
      define view entity Z##_R_Employee as select from z##employ association[1..1] to Z##_R_Department as _Department on $projection.DepartmentId = _Department.Id
  5. Exponga la asociación.

    1. Al final de la lista de elementos, añada una coma y el nombre de la asociación.

    2. Ajuste el código de la siguiente manera:

      Code Snippet
      12345
      last_changed_at as LastChangedAt, _Department }
  6. Active la definición de datos CDS.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

Tarea 3: Definir más asociaciones

En su entidad de vista CDS básica para datos de departamento, defina y exponga tres asociaciones: una asociación para todos los empleados (nombre de asociación sugerido: _Employee), una asociación para el jefe de departamento (nombre sugerido: _Head) y una asociación para el asistente de departamento (nombre sugerido: _Assistant). Seleccione las cardinalidades basadas en las relaciones de clave externa correspondientes en las tablas de base de datos subyacentes.

Pasos

  1. Vuelva a la definición de datos para los datos de departamento. Defina la asociación _Empleado para dirigirse a todos los empleados asignados a este departamento.

    Nota

    Tenga en cuenta que un departamento puede tener cualquier número de empleados, incluido cero.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId
  2. Defina una asociación para abordar los detalles del jefe de departamento. Establezca la cardinalidad basada en la cardinalidad de la relación de clave externa entre las tablas de base de datos subyacentes.

    Nota

    En nuestro modelo, NO es necesario que un departamento tenga un jefe de departamento.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      123456789
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId association [0..1] to Z##_R_Employee as _Head on $projection.HeadId = _Head.EmployeeId
  3. Defina una asociación para direccionar los detalles del asistente de departamento. Establezca la cardinalidad basada en la cardinalidad de la relación de clave externa entre las tablas de base de datos subyacentes.

    Nota

    En nuestro modelo, un departamento no puede existir sin un asistente de departamento.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567891011
      define view entity Z##_R_Department as select from z##depment association [0..*] to Z##_R_Employee as _Employee on $projection.Id = _Employee.DepartmentId association [0..1] to Z##_R_Employee as _Head on $projection.HeadId = _Head.EmployeeId association [1..1] to Z##_R_Employee as _Assistant on $projection.AssistantId = _Assistant.EmployeeId
  4. Exponga la asociación.

    1. Al final de la lista de elementos, añada una coma y los tres nombres de asociación (separados por comas).

    2. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567
      last_changed_at as LastChangedAt, _Employee, _Head, _Assistant }
  5. Active la definición de datos CDS.

    1. Pulse Ctrl + F3 para activar el objeto de desarrollo.

Tarea 4: Analizar y utilizar las asociaciones

Analice la implementación técnica de su vista CDS para datos de departamento y utilice las asociaciones para la navegación en la herramienta Vista previa de datos.

Pasos

  1. Visualice la sentencia SQL con la que se crea la representación técnica de la entidad de vista en la base de datos.

    1. Haga clic con el botón derecho en cualquier lugar del código fuente de la definición de datos y seleccione Mostrar sentencia CREATE de SQL.

  2. Abra la presentación preliminar de datos para su vista CDS para datos de departamento.

    1. Haga clic con el botón derecho en cualquier lugar del código fuente de la definición de datos y seleccione Abrir con→Vista previa de datos. Como alternativa, sitúe el cursor en cualquier lugar del código fuente de la definición de datos y pulse F8.

  3. Visualice todos los empleados que trabajan para el departamento Comercial.

    1. Haga clic con el botón derecho en cualquier parte de la fila con el valor VENTA en la columna ID y seleccione Seguir asociación. Como alternativa, coloque el cursor en cualquier lugar de la fila y pulse Ctrl + G.

    2. Seleccione _Empleado → Z##_R_Empleado [0..*].

  4. Vuelva a la lista de departamentos y visualice el asistente del departamento de administración.

    1. En la ruta de navegación que se muestra encima de la pestaña Vista previa de datos (a veces denominada "Breadcrumb nAviation"), seleccione Z##_R_DEPARTMENT para volver a la lista de departamentos.

    2. Haga clic con el botón derecho en cualquier parte de la fila con el valor ADMIN en la columna ID y seleccione Seguir asociación. Como alternativa, coloque el cursor en cualquier lugar de la fila y pulse Ctrl + G.

    3. Seleccione _Asistente → Z##_R_Employee [1..1].

  5. Sin volver a la lista de departamentos, navegue al departamento, esta persona trabaja para y desde allí al jefe de departamento.

    1. Haga clic con el botón derecho en cualquier parte de la fila individual que se visualiza y seleccione Seguir asociación.

    2. Seleccione _Departamento → Z##_R_Departamento [1..1].

    3. Haga clic con el botón derecho en cualquier parte de la fila individual que se visualiza y seleccione Seguir asociación.

    4. Seleccione _Head → Z##_R_Employee [0..1].