Exploración de ABAP Core Data Services

Objectives

After completing this lesson, you will be able to:
  • Describir las tareas básicas de ABAP Core Data Services.
  • Nombre los objetos CDS ABAP más importantes.

Funcionalidad ABAP CDS

ABAP Core Data Services (ABAP CDS)

Reproduzca el vídeo para obtener información sobre ABAP Core Data Services (ABAP CDS).

Echemos un vistazo más de cerca a estas tareas.

Durante mucho tiempo, los desarrolladores ABAP han definido vistas en el Dictionary ABAP, del mismo modo que definen las tablas de base de datos. Estas vistas de diccionario eran muy limitadas en términos de lógica SQL. Solo admiten combinaciones internas, una selección de campo (proyección) y condiciones de filtro simples. Tenga en cuenta que la definición de vistas de diccionario no se admite en entornos ABAP basados en la nube.

Una de las razones por las que SAP introdujo Core Data Services en ABAP fue la demanda de la ejecución de la lógica en la base de datos. Como aprenderá más adelante en esta formación, las vistas ABAP CDS admiten una gran variedad de expresiones y funciones SQL para insertar la lógica en la base de datos.

Existen dos tipos de vistas CDS.

Vistas CDS basadas en DDIC (obsoletas)

Este tipo obsoleto de vistas CDS utiliza una vista de diccionario generada como representación técnica para el objeto de base de datos. Las vistas basadas en CDS DDIC se definen con la sentencia DEFINE VIEW.

Entidades de vista CDS

Esta nueva generación de vistas CDS se define con la sentencia DEFINE VIEW ENTITY. Las entidades de vista CDS definen el objeto de base de datos directamente, sin generar primero un objeto de diccionario.

Nota

En esta formación, solo cubriremos entidades de vista CDS. Para los tipos de vista más antiguos, consulte la documentación de palabras clave ABAP.

ABAP CDS no solo admite la definición técnica de objetos de base de datos. También le permite enriquecer las definiciones técnicas con información semántica.

Veamos un ejemplo.

La entidad de vista CDS Z00_C_Employee se define con una sentencia define view entityen una definición de datos CDS. Esta es la definición técnica de la vista y se utiliza para crear una vista llamada Z00_C_EMPLOYEE en la base de datos. Además de la sentencia define view entity, el código fuente contiene anotaciones. Las anotaciones son elementos de código que enriquecen la definición de vista técnica con información semántica. Las anotaciones empiezan con un símbolo at (@).

El sistema ABAP solo evalúa algunas anotaciones. El resto simplemente se transfiere a los consumidores de la entidad CDS, es decir, los frameworks que utilizan la entidad CDS para leer datos. Los consumidores deciden por sí mismos qué anotaciones evalúan y cuáles ignoran.

Los consumidores más importantes de entidades CDS ABAP son tecnologías de IU modernas como SAP Fiori y SAP S/4HANA Embedded Analytics.

El núcleo del modelo de programación de aplicaciones ABAP RESTful es el business object.

La estructura del business object se modela con una o más entidades de vista CDS. Se utiliza una definición de comportamiento CDS para añadir la lógica transaccional. La lógica transaccional se implementa en un pool de comportamientos ABAP, una clase ABAP en la biblioteca de códigos fuente ABAP.

Los servicios empresariales a menudo consumen business objects, por ejemplo, servicios OData. Pero también puede acceder a ellos en código ABAP mediante Entity Manipulation Language (EML).

Nota

Los detalles del modelado, la implementación y el uso de Business Objects no forman parte de esta formación. Se analizan en un curso dedicado sobre el modelo de programación de aplicaciones ABAP RESTful.

Objetos CDS ABAP

Los objetos de desarrollo CDS importantes son los siguientes:

Definición de datos CDS

Una definición de datos CDS contiene la definición de una entidad CDS. Las entidades CDS más importantes son las entidades de vista CDS y sus predecesoras, las vistas ahora obsoletas basadas en DDIC.

Pero hay muchos otros tipos de entidad CDS que puede definir en una definición de datos:

  • Las vistas de proyección CDS se basan en una vista CDS y proyectan un subconjunto de sus elementos.
  • Las entidades abstractas CDS solo describen propiedades de tipo y para las que no se instancian objetos de base de datos.
  • Las funciones de tabla CDS se implementan en funciones de base de datos y devuelven un conjunto de resultados tabular.
  • Las entidades personalizadas CDS se implementan manualmente, por ejemplo, en código ABAP.
  • Las jerarquías CDS definen jerarquías SQL de una fuente SQL.

Nota

En esta formación, nos centraremos en entidades de vista CDS. Para obtener detalles sobre las otras entidades CDS, consulte la documentación ABAP.

Control de acceso CDS

Los controles de acceso CDS contienen la definición de un rol CDS. Cuando se accede a las entidades CDS SQL a las que se asigna un rol CDS, se evalúan de forma predeterminada las condiciones de acceso adicionales.

Ampliación de metadatos CDS

Las ampliaciones de metadatos CDS se utilizan para almacenar anotaciones CDS para una entidad CDS fuera de su definición de datos.

Definición de comportamiento CDS

Las definiciones de comportamiento CDS definen el comportamiento transaccional de un business object.

 

En el Explorador de proyectos de las herramientas de desarrollo ABAP, encontrará los objetos CDS en el paquete de desarrollo, en un nodo dedicado Core Data Services.

Analizar Dictionary y objetos CDS

Desea aprender a definir objetos en Dictionary ABAP y ABAP Core Data Services. En el primer paso, prepare el entorno de desarrollo ABAP, cree un nuevo paquete y analice algunos objetos existentes.

Prerrequisitos

Si desea realizar los ejercicios como se describe en este recorrido de aprendizaje, necesita acceso a un sistema de práctica dedicado. Si ya ha reservado un sistema para una de las otras partes del recorrido de aprendizaje, puede seguir utilizando este sistema para la tercera parte. Si aún no ha reservado un sistema de práctica, siga este enlace para obtener más detalles: https://learning.sap.com/practice-systems/data-modelling-in-abap-dictionary-and-abap-core-data-services

Además del URL de instancia de servicio ABAP, que recibirá durante el proceso de reserva, necesita una instalación local del IDE de Eclipse con el plug-in Herramientas de desarrollo ABAP instalado en la parte superior. Siga este enlace para obtener instrucciones paso a paso https://developers.sap.com/tutorials/abap-install-adt.html.

Tarea 1: Preparar el proyecto

En Eclipse, cree un proyecto ABAP Cloud y añada el paquete /LRN/S4D430_EXERCISE a la lista de paquetes favoritos. En el proyecto ABAP Cloud, cree un nuevo paquete en el paquete superior ZLOCAL (nombre sugerido: ZS4D430_##, donde ## es su número de grupo) y añádalo también a los paquetes favoritos.

Pasos

  1. Abra Eclipse, cambie a la perspectiva ABAP y cree un proyecto ABAP Cloud.

    Nota

    Si acaba de finalizar el curso Profundizar en su conocimiento de programación ABAP y ya tiene abierto su proyecto ABAP Cloud en Eclipse, puede omitir este paso.
    1. Abra Eclipse.

    2. Seleccione Ventana→Perspectiva→Abrir perspectiva→Otros...

    3. En la ventana de diálogo, haga doble clic en ABAP.

    4. Seleccione Archivo→Nuevo→Proyecto ABAP Cloud.

    5. Proceda de la siguiente manera en el diálogo Nuevo proyecto en la nube ABAP que aparece:

      Si se le ha proporcionado el URL de instancia de servicio ABAP:

      1. Copie y pegue esta URL en el campo correspondiente del diálogo.
      2. Seleccione Siguiente.

      Si se le ha asignado un archivo que contiene la clave de servicio:

      1. Seleccione el enlace Extraer en el diálogo.
      2. Seleccione Importar... y seleccione el archivo con la clave de servicio.
      3. Después de importar, haga clic en Copiar en el portapapeles para copiar el URL de instancia de servicio.
      4. Seleccione Cerrar.
      5. En la parte superior del cuadro emergente del campo URL de instancia de servicio ABAP:*, pegue el URL de instancia de servicio ABAP con la combinación de teclas Ctrl + V.
      6. Seleccione Siguiente.
    6. Seleccione Abrir página de inicio de sesión en navegador.

    7. Se le pedirá que inicie sesión en el sistema.

      Introduzca el usuario y la contraseña que utilizó para registrarse en SAP Learning Hub.

    8. Cuando vea el mensaje, Ha iniciado sesión correctamente, cierre la ventana del navegador y vuelva a Eclipse.

    9. Para finalizar la creación del proyecto, seleccione Finalizar.

  2. Añada el paquete /LRN/S4D430_EXERCISE a la lista de paquetes favoritos.

    1. En el Explorador de proyectos de la izquierda, despliegue su proyecto en la nube ABAP y, a continuación, subnodo Paquetes favoritos.

    2. Haga clic con el botón derecho en Paquetes favoritos y seleccione Añadir paquete ....

    3. En el campo de búsqueda, introduzca /LRN/S4D430.

    4. En la lista de posiciones coincidentes, seleccione /LRN/S4D430_EXERCISE y, a continuación, OK.

  3. En su proyecto de ABAP Cloud, cree un paquete con los atributos enumerados en la tabla. Cuando se le solicite un transporte, seleccione la orden de transporte en la que está implicado. Si no se enumera ninguna orden de transporte, cree una orden nueva.

    CampoValor
    NombreZS4D430_##, donde ## es su número de grupo
    DescripciónModelado en ABAP
    Añadir a paquetes favoritosVerificado
    Paquete superiorZLOCAL
    Tipo de paqueteDesarrollo
    Versión del componenteZLOCAL
    Componente de aplicaciónDeje este campo en blanco
    Capa de transporteDeje este campo en blanco
    1. En el Explorador de proyectos, haga clic con el botón derecho en su proyecto en la nube ABAP y seleccione Nuevo→Paquete ABAP.

    2. Introduzca el nombre del paquete ZS4D430_## donde ## es su número de grupo.

    3. Introduzca la descripción Modelado en ABAP.

    4. Marque la casilla de selección Añadir a paquetes favoritos

    5. Introduzca el paquete superior ZLOCAL.

    6. Asegúrese de que el Tipo de paquete esté fijado en Desarrollo.

    7. Seleccione Siguiente.

    8. Asegúrese de que el componente de software esté fijado en ZLOCAL.

    9. Asegúrese de que el componente de aplicación esté vacío.

    10. Asegúrese de que la capa de transporte esté vacía.

    11. Seleccione Siguiente.

    12. Verifique si existe una orden de transporte en la opción Seleccionar de las órdenes en las que estoy implicado. Si este es el caso, seleccione esta opción. Si la lista está vacía, seleccione la opción Crear una solicitud nueva e introduzca una descripción de la solicitud, por ejemplo, Ejercicios ABAP.

    13. Seleccione Finalizar.

Tarea 2: Analizar objetos

Analice el contenido del paquete /LRN/S4D430_INTRO.

Nota

El paquete /LRN/S4D430_INTRO es un subpaquete del paquete /LRN/S4D430_EXERCISE.

Pasos

  1. En la vista Explorador de proyectos, despliegue el diccionario→/LRN/S4D430_EXERCISE→/LRN/S4D430_INTRO y analice el contenido.

  2. De forma similar, despliegue /LRN/S4D430_EXERCISE→/LRN/S4D430_INTRO→Core Data Services y analice el contenido.

Tarea 3: Explorar uso en ABAP

Cree una clase ABAP que implemente la interfaz IF_OO_ADT_CLASSRUN (nombre sugerido: ZCL_##_INTRO, donde ## representa su número de grupo). Utilice la compleción de código para explorar qué objetos del paquete /LRN/S4D430_INTRO puede utilizar como tipos de datos y como fuente de datos en una sentencia SELECT.

Pasos

  1. En su paquete, cree una nueva clase ABAP (nombre sugerido: ZCL_##_INTRO, donde ## representa su número de grupo).

    1. En la vista Explorador de proyectos, haga clic con el botón derecho en el paquete Z##_S4D430 para abrir el menú contextual.

    2. En el menú contextual, seleccione Nueva→clase ABAP.

    3. Confirme que el campo Paquete contiene el nombre del paquete. Introduzca el nombre de la nueva clase en el campo Nombre y Analizar diccionario y CDS en el campo Descripción.

    4. Seleccione Añadir....

    5. En la ventana de diálogo, introduzca IF_OO_ADT_CLASSRUN y seleccione OK.

    6. De nuevo en la ventana anterior, seleccione Siguiente.

    7. Confirme la orden de transporte y seleccione Finalizar.

  2. En el método IF_OO_ADT_CLASSRUN~MAIN, declare una variable del tipo string (nombre sugerido: var).

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

      Code Snippet
      1234567
      METHOD if_oo_adt_classrun~main. DATA var TYPE string. ENDMETHOD.
  3. Sustituya el tipo string por un objeto del paquete /LRN/S4D430_INTRO. Utilice la finalización de código para averiguar qué objetos puede utilizar como tipos de datos.

    Nota

    Todos los objetos del paquete /LRN/S4D430_INTRO tienen un nombre que empieza por /LRN/S4D430_IND.
    1. Elimine string.

    2. Introduzca /LRN/S4D430_IND y pulse Ctrl + Espacio para llamar la finalización de código.

  4. Implemente una sentencia SELECT que lea de la tabla de base de datos /LRN/S4D430_IND.

    Consejo

    Para mantenerlo simple, lea todos los campos (FIELDS *), todas las filas (sin cláusula WHERE) y utilice una declaración en línea en la cláusula INTO TABLE.
    1. Añada el código siguiente:

      Code Snippet
      12345
      SELECT FROM /lrn/s4d430_ind FIELDS * INTO TABLE @DATA(result).
  5. Sustituya /lrn/S4D430_ind en la cláusula FROM por otro objeto del paquete /LRN/S4D430_INTRO. Use la finalización de código para averiguar qué objetos puede usar como origen de datos.

    Nota

    Todos los objetos del paquete /LRN/S4D430_INTRO tienen un nombre que empieza por /LRN/S4D430_IND.
    1. En la cláusula FROM, coloque el cursor inmediatamente después de /LRN/S4D430_IND.

    2. Presione Ctrl + Espacio para invocar la finalización del código.