Creación de vistas en vistas

Objectives

After completing this lesson, you will be able to:
  • Defina una vista CDS que lea desde otra vista.
  • Controlar la propagación de anotaciones de elementos.

Ver en vista - Motivación

Al definir una entidad de vista CDS, no solo puede leer de las tablas de base de datos, sino que también puede utilizar otras vistas CDS como fuente de datos. ¿Por qué crearía vistas en la parte superior de las vistas?

  • El primer motivo es similar al razonamiento al estructurar el código fuente en clases y métodos:

    • Reutilizar funcionalidad existente
    • Evitar redundancias
    • Admitir análisis y mantenimiento de errores
  • El segundo argumento es más técnico. Existen ciertas limitaciones en lo que respecta al anidamiento de expresiones SQL y funciones SQL dentro de la misma vista CDS. Las vistas anidadas son una técnica común para superar estas restricciones.
  • Probablemente, el motivo más importante para las vistas anidadas es la estratificación de su modelo de datos. En el modelo de programación ABAP RESTful, por ejemplo, se recomienda definir vistas de consumo en la parte superior de las vistas de modelo de datos. Mientras que las vistas de modelo de datos contienen la lógica del modelo de datos general, las vistas de consumo añaden metadatos y lógica específicos de consumo.

Anotaciones propagadas

Si una entidad de vista CDS lee desde otra entidad de vista, puede heredar metadatos de la vista fuente. Esto se denomina propagación de anotación.

En este ejemplo, la entidad de vista CDS C_Employee utiliza la entidad de vista CDS R_Employee como fuente de datos. Por defecto, las anotaciones de elemento de R_Employee se propagan a C_Employee. Como consecuencia, la anotación @Semantics.amount.currencyCode no es necesaria de nuevo en C_Employee.

La propagación está restringida a anotaciones de elemento. Las anotaciones de entidad y vista nunca se propagan.

La anotación de entidad @Metadata.ignorePropagatedAnnotations le permite controlar la propagación de anotaciones de elementos. Si falta en la entidad de vista CDS de lectura o se fija en el valor falso, se heredan las anotaciones de elemento. Con @Metadata.ignorePropagatedAnnotations: true la propagación de anotaciones de elemento está desactivada.

Si en nuestro ejemplo, la entidad de vista CDS C_Employee se anota con @Metadata.ignorePropagatedAnnotations: true, la anotación @Semantics.amount.currencyCode para el elemento AnnualSalary no se propaga. La verificación de sintaxis muestra un error porque falta la anotación obligatoria para el campo de importe.

Cómo definir una vista en la parte superior de una vista

Reproduzca el vídeo para ver cómo definir una vista en la parte superior de una vista.

Definir una vista en una vista

Desea separar la definición básica de su modelo de datos de su uso específico (consumo). Para ello, cree una nueva entidad de vista CDS sobre su entidad de modelo de datos existente.

Modelo:

  • n.a.

Solución:

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

Prerrequisitos

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

Tarea 1: Definir una entidad de vista CDS

Defina una nueva entidad de vista CDS que lea de su entidad de vista CDS para datos de empleado (nombre sugerido: Z##_C_Employee, donde ## es su número de grupo). Utilice un modelo que añada todos los elementos de vista de la entidad Z##_R_Employee a la lista de elementos de la nueva vista y tome la definición clave de la vista base.

Pasos

  1. En su propio paquete, cree una nueva definición de datos (nombre sugerido: Z##_C_EMPLOYEE, donde ## es su número de grupo). Especifique su entidad de vista existente 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 datos existente Z##_R_EMPLOYEE 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 datos.

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

    5. Introduzca Empleado (consumo) 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. Ajuste las anotaciones @ObjectModel.usageType. Utilice los mismos valores que en la vista base.

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

      Code Snippet
      1234567
      @ObjectModel.usageType:{ serviceQuality: #D, sizeCategory: #M, dataClass: #MASTER }
  3. Aplicar formato de código fuente.

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

Tarea 2: Propagar anotaciones

Habilite la propagación de anotaciones de elementos en su nueva vista y analice el resultado en la vista Anotaciones activas. A continuación, vuelva a desactivar la propagación y especifique la anotación de elemento obligatorio directamente.

Pasos

  1. En su nueva definición de datos, habilite la propagación de anotaciones de elementos.

    1. Cambie el valor de la anotación @Metadata.ignorePropagatedAnnotations de verdadero a falso.

  2. Active la definición de datos.

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

  3. Abra la vista Anotaciones activas y analice los valores de anotación de elemento para los elementos de vista AnnualSalary y CurrencyCode.

    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→anotaciones activas.

    2. La vista Anotaciones activas aparece como una nueva ficha debajo de la vista de editor.

    3. En la barra de herramientas de la vista Anotaciones activas, seleccione Ocultar todo.

    4. Expanda Z##_C_EMPLOYEE→Salario anual→@→Importe semántico.

  4. En su nueva definición de datos, vuelva a desactivar la propagación de anotaciones de elemento.

    1. Cambie el valor de la anotación @Metadata.ignorePropagatedAnnotations de nuevo a verdadero.

  5. Resuelva el error de sintaxis añadiendo la anotación de elemento obligatorio directamente al elemento de vista AnnualSalary.

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

      Code Snippet
      123456
      DepartmentId, @Semantics.amount.currencyCode: 'CurrencyCode' AnnualSalary, CurrencyCode,
  6. Active la definición de datos.

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