Introducción
Aplicación de técnicas y conceptos básicos
Trabajar con clases locales
Lectura de datos de la base de datos
Trabajar con objetos de datos estructurados
Trabajar con tablas internas complejas
Implementación de actualizaciones de base de datos mediante business objects
Descripción del modelo de programación de aplicaciones ABAP RESTful

Trabajar con vistas CDS

Objectives

After completing this lesson, you will be able to:
  • Analizar una definición de vista CDS.
  • Leer datos mediante una vista CDS.

Vistas CDS

Definiciones de vista en ABAP Core Data Services (ABAP CDS)

ABAP Core Data Services, o ABAP CDS para abreviar, es una infraestructura para definir y consumir modelos de datos semánticamente enriquecidos en ABAP. Utilizan un DDL de CDS para definir entidades CDS que implementan un modelo de datos semántico. Las entidades de modelado CDS más importantes son las entidades de vista CDS.

La definición de vista CDS contiene una lógica SQL reutilizable; a veces tan simple como una proyección de campos de tabla y a veces más sofisticada con cálculos, agregaciones, joins, uniones, etc.

Una definición de vista CDS puede contener asociaciones para reflejar las relaciones del modelo de datos. Los consumidores de la vista pueden utilizar las asociaciones para recuperar datos relacionados.

Por último, las anotaciones se utilizan para enriquecer semánticamente la definición de vista. Estos metadatos se evalúan mediante frameworks que se basan en definiciones de vista CDS. Uno de estos marcos es el modelo de programación de aplicaciones ABAP RESTful, para el que analizaremos un ejemplo más adelante en este curso.

Veamos ejemplos de definiciones de vistas CDS.

Las definiciones de vista CDS se encuentran en objetos de repository del tipo Definición de datos. Veamos ahora el código fuente de la definición de datos /DMO/I_CONNECTION.

La parte principal es la sentencia DEFINE VIEW ENTITY. Contiene el nombre de la entidad de vista CDS y, después de la palabra clave FROM, la fuente de datos. En nuestro ejemplo, el nombre de la entidad de vista es /DMO/I_Connection y la fuente de datos es la tabla de base de datos /dmo/connection. La adición opcional AS define un nombre alias Conexión para dirigirse a la fuente de datos dentro de la definición de vista.

Nota

La fuente de una entidad de vista CDS también podría ser otra vista CDS.

Un par de corchetes contiene la lista de elementos de vista. En nuestro ejemplo, los elementos de vista son campos de la tabla de base de datos /dmo/connection. La clave de palabra clave delante de los dos primeros elementos los define como campos clave de la entidad de vista CDS. El suplemento opcional AS define un nombre alias para cada elemento de vista.

La adición association define una relación con otra entidad de vista CDS. En nuestro ejemplo, la vista relacionada es la entidad de vista CDS /DMO/I_Carrier y el nombre de la asociación es _Airline.

Esta asociación está disponible para los consumidores de la vista añadiéndola a la lista de elementos. Esto se conoce como exposición de la asociación.

Las anotaciones empiezan por el signo arroba (@) y se utilizan para enriquecer semánticamente la definición de vista para consumidores. Las anotaciones anteriores a la definición de vista se denominan anotaciones de entidad. Las anotaciones de entidad se utilizan para definir metadatos para la entidad de vista como un todo. Las anotaciones entre los corchetes se denominan anotaciones de elemento. Las anotaciones de elemento se utilizan para definir metadatos para los diferentes elementos de la vista.

Ya ha aprendido a utilizar la herramienta Vista previa de datos para visualizar y analizar el contenido de una tabla de base de datos. Esta herramienta también está disponible para entidades de vista CDS.

Para abrir la presentación preliminar de datos para una entidad CDS determinada, haga clic con el botón derecho en cualquier parte de la definición de datos y seleccione Abrir conpresentación preliminar de datos. Como alternativa, sitúe el cursor en cualquier lugar de la definición de datos y pulse F8.

La herramienta muestra los datos devueltos por la entidad CDS. Las mismas funciones están disponibles para clasificar o filtrar los datos y ajustar la visualización.

Si la definición de vista contiene una o más asociaciones, puede utilizarlas para visualizar datos relacionados. Para ello, proceda de la siguiente manera:

  1. Haga clic con el botón derecho en una fila de la visualización.
  2. En el menú contextual, seleccione Seguir asociación.
  3. En la lista de asociaciones disponibles, seleccione la que le interese.

Si desea encontrar todas las vistas CDS con una determinada tabla de base de datos como fuente, puede utilizar la herramienta de referencia de utilización de ADT. Para utilizar esta herramienta, proceda de la siguiente manera:

  1. Abra la definición de la tabla de base de datos.
  2. Haga clic con el botón derecho en cualquier lugar del código fuente y seleccione Obtener referencia de utilización en el menú contextual. Como alternativa, puede pulsar Ctrl + Mayús + G o seleccionar el botón de la barra de herramientas con el mismo símbolo.
  3. La vista Búsqueda muestra una lista de todos los objetos de desarrollo que utilizan directamente la tabla de base de datos.

Puede aplicar filtros a la referencia de utilización si, por ejemplo, solo está interesado en objetos de determinados paquetes u objetos del tipo de objeto específico. El ejemplo ilustra cómo filtrar vistas CDS que utilizan la tabla.

Cómo analizar una vista CDS

Vistas CDS en ABAP SQL

Al implementar una sentencia SELECT en ABAP, puede utilizar una entidad de vista CDS como fuente de datos en lugar de leer directamente de la tabla de base de datos. Esto tiene varias ventajas.

  • Reutilización de la lógica SQL incluida en la vista CDS
  • Lectura concisa y fácil de leer de los datos relacionados mediante las asociaciones
  • A veces, los nombres de las vistas y los elementos de vista son más legibles que los nombres más técnicos de las tablas de base de datos y los campos de tabla.

La sentencia SELECT del ejemplo utiliza la entidad de vista CDS /DMO/I_Connection como fuente de datos.

Nota

Tenga en cuenta que los nombres utilizados en la cláusula FIELDS y las condiciones WHERE son los nombres alias de los elementos de vista.

El tercer elemento de la cláusula FIELDS utiliza la asociación expuesta _Airline. Lee el elemento Name de la entidad de vista CDS asociada /DMO/I_Carrier. Este tipo de elemento se denomina expresión de ruta. La barra invertida (\) es un prefijo obligatorio para los nombres de asociación.

Analizar y utilizar una entidad de vista CDS

En este ejercicio, leerá directamente de una entidad de vista CDS y no de la tabla de base de datos. Esto le proporciona un cómodo acceso al nombre de la aerolínea también.

Modelo:

  • /LRN/CL_S4D400_DBS_SELECT (clase global)

Solución:

  • /LRN/CL_S4D400_DBS_CDS (clase global)

Tarea 1: Copiar plantilla (opcional)

Copie la clase de modelo. Si ha finalizado el ejercicio anterior, puede omitir esta tarea y continuar editando su clase ZCL_##_SELECT.

Pasos

  1. Copie la clase /LRN/CL_S4D400_DBS_SELECT en una clase de su propio paquete (nombre sugerido: ZCL_##_CDS, donde ## representa su número de grupo).

    1. Abra el código fuente de la clase global /LRN/CL_S4D400_DBS_SELECT.

    2. Vincule la vista Explorador de proyectos con el editor.

    3. En la vista Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D400_DBS_SELECT para abrir el menú contextual.

    4. En el menú contextual, seleccione Duplicar ....

    5. Introduzca el nombre del paquete en el campo Paquete. En el campo Nombre, introduzca el nombre ZCL_##_CDS, donde ## representa su número de grupo.

    6. Ajuste la descripción y seleccione Siguiente.

    7. Confirme la orden de transporte y seleccione Finalizar.

Tarea 2: Analizar entidad de vista CDS

Analice la definición de la entidad de vista CDS /DMO/I_Connection.

Pasos

  1. Abra el objeto de desarrollo que contiene la definición de la entidad de vista CDS /DMO/I_Connection.

    1. En la barra de herramientas de eclipse, seleccione Abrir objeto de desarrollo ABAP o pulse Ctrl + Mayús + A.

    2. En el campo de entrada, introduzca /DMO/I_Con como string de búsqueda.

    3. En la lista de posiciones coincidentes, haga clic en /DMO/I_CONNECTION (Definición de datos) y seleccione OK.

  2. Analice la lista de elementos de la entidad de vista CDS.

    1. Vaya a la lista separada por comas entre el par de corchetes ( { } ).

    2. Encontrará los nombres alias después de la palabra clave AS.

  3. Abra la Información de elemento (F2) para el destino de la asociación _Airline.

    1. Haga clic en /DMO/I_Carrier antes de as _Airline y pulse F2 para mostrar la información del elemento.

Tarea 3: Declarar atributo adicional

Amplíe la clase local lcl_connection con un atributo de instancia privado carrier_name. Añada alguna salida para el nuevo atributo a la implementación del método get_output( ).

Nota

El nuevo atributo aún no se ha rellenado. Para rellenarla, ajustaremos la sentencia SELECT en la siguiente tarea de este ejercicio.

Pasos

  1. Vuelva a la clase local lcl_connection en su clase global.

    1. En la clase global, seleccione Tipos locales.

  2. Añada el siguiente atributo privado a la definición de clase:

    Atributos

    Nombre de atributoAlcanceTipo de datos
    carrier_nameinstancia/DMO/CARRIER_NAME
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      1234567891011
      PRIVATE SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. DATA airport_from_id TYPE /dmo/airport_from_id. DATA airport_to_id TYPE /dmo/airport_to_id. DATA carrier_name TYPE /dmo/carrier_name. ENDCLASS.
  3. Amplíe la implementación del método get_output. Añada el nombre del transportista al modelo de cadena con la identificación del transportista.

    1. Navegue a la implementación del método get_output.

    2. Sustitúyase el enunciado APPEND |Carrier:     { carrier_id      }| TO r_output. por el siguiente enunciado:

      Code Snippet
      123
        APPEND |Carrier:     { carrier_id } { carrier_name }| TO r_output.
  4. Active la clase. Ejecútelo y analice la salida de la consola.

    1. Pulse Ctrl + F3 para activar la clase.

    2. Pulse F9 para ejecutar la clase.

Tarea 4: Utilizar entidad de vista CDS

En la implementación del constructor de método, sustituya la sentencia SELECT que lee de la tabla de base de datos /dmo/connection por una sentencia SELECT que lee de la entidad de vista CDS /DMO/I_Connection.

Pasos

  1. En la implementación del constructor de método, comente la sentencia SELECT.

    1. Seleccione todas las líneas que pertenezcan al SELECT SINGLE ... ..

    2. Pulse Ctrl + < para añadir un signo de estrella (*) delante de cada línea seleccionada.

  2. Después del código comentado, añada una sentencia SELECT que lea un registro individual de la vista CDS /DMO/I_Connection.

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

      Code Snippet
      123456789101112
      * SELECT SINGLE * FROM /dmo/connection * FIELDS airport_from_id, airport_to_id * WHERE carrier_id = @i_carrier_id * AND connection_id = @i_connection_id * INTO ( @airport_from_id, @airport_to_id ). SELECT SINGLE FROM /DMO/I_Connection
  3. Implemente la cláusula FIELDS. Leer elementos de vista DepartureAirport y DestinationAirport. Además, lea el elemento de vista Nombre del destino de la asociación _Airline.

    Consejo

    Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres.
    1. Después de FROM /DMO/I_Connection, introduzca FIELDS.

    2. Después de un espacio en blanco, pulse Ctrl + Espacio y seleccione Aeropuerto de salida.

    3. Después de una coma y un espacio en blanco, pulse Ctrl + Espacio de nuevo y seleccione DestinationAirport.

    4. Después de una coma y un espacio en blanco, escriba una barra invertida (\), pulse Ctrl + Espacio y seleccione _Compañía aérea.

    5. Inmediatamente después de _Airline, escriba un guion (-), pulse Ctrl + Espacio y seleccione Nombre.

    6. La cláusula FIELDS completa debería tener el siguiente aspecto:

      Code Snippet
      123
      FIELDS DepartureAirport, DestinationAirport, \_Airline-Name
  4. Implemente la condición WHERE. Restrinja los elementos clave de la entidad de vista CDS con los valores de los parámetros de importación i_carrier_id e i_connection_id. No olvide escapar de los parámetros con el prefijo @.

    Consejo

    Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres de los elementos y los nombres de los parámetros.
    1. Añada el siguiente código después de la cláusula FIELDS:

      Code Snippet
      1234
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id
  5. Implemente la cláusula INTO. Almacene el resultado SELECT en los atributos airport_from_id, airport_to_id y carrier_name. No olvide escapar de los atributos con el prefijo @.

    Consejo

    Utilice la finalización automática (Ctrl + Espacio) para introducir los nombres de atributo.
    1. Ajuste el código de la siguiente manera:

      Code Snippet
      12345
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
    2. La sentencia SELECT completa debería tener el siguiente aspecto:

      Code Snippet
      12345678
      SELECT SINGLE FROM /DMO/I_Connection FIELDS DepartureAirport, DestinationAirport, \_Airline-Name WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
  6. Active la clase. Ejecútelo y analice la salida de la consola. Verifique que la salida para el nuevo atributo muestre datos.

    1. Pulse Ctrl + F3 para activar la clase.

    2. Pulse F9 para ejecutar la clase.