lunes, 11 de septiembre de 2017

ABAP CDS: Introducción

“ Las aplicaciones van y vienen, pero los datos viven para siempre “
Cameron O’Rourke –ORACLE

Uno de los puntos más importantes a la hora de desarrollar aplicaciones ABAP es el diseño de las consultas SQL a la base de datos. Es de vital importancia diseñar un modelo de datos que nos permita realizar las consultas a la base de datos de manera óptima y que retorne solamente la información que necesitamos.

El modelo de datos en SAP tradicionalmente puede implementarse de dos formas. Utilizando la transacción SE11 para crear las tablas, vistas, estructuras, elementos de datos, etc… o directamente combinando sentencias SQL y utilizando los operadores INNER JOIN o LEFT OUTER JOIN.
Modelo de datos y sus posibles implementaciones

Si utilizamos la transacción SE11, los objetos que creamos en el diccionario podemos reutilizarlos en diferentes aplicaciones. Si utilizamos consultas SQL directamente en el código, pues solamente se podrán usar locamente en el programa que las implementemos. Todo dependerá de si queremos reutilizar las consulta SQL o no.

Da igual cuanto optimicemos el código de nuestra aplicación, si accedemos a los datos con un modelo de datos mal diseñado, serán necesarias realizar complicadísimas consultas SQL para extraer los datos que necesitamos y provocara un aumento exponencialmente del tiempo de ejecución.

Como explicaremos a continuación, con las CDS y las nuevas herramientas que nos ofrecen, seremos capaces de diseñar más fácilmente vistas ABAP CDS a partir de modelos de datos. Las nuevas vistas ABAP CDS podrán ser después consumirlas desde las aplicaciones ABAP o consumirlas como servicios externos con ODATA.


¿QUE ES ‘CORE DATA SERVICES’?


Es una infraestructura creada por SAP para definir y consumir modelos de datos persistentes en SAP HANA. Utiliza un lenguaje de definición de datos (DDL), un lenguaje de consulta (QL) y un lenguaje de control de datos (DCL) . CDS es independiente de la BD utilizada, aunque actualmente solamente lo soporta SAP HANA.

especificación Core Data Services

El objetivo de las vistas CDS es facilitar la implementación de los modelos de datos desarrollados en la fase de diseño. Las vistas CDS nos permiten implementar los modelos de entidad-relación de una forma mucho más eficiente que las tradicionales vistas de la transacción SE11.

Modelo de datos, implementación y consumo con CDS

Originalmente solamente era posible crear vistas CDS para SAP HANA y requería una conexión directa al servidor de HANA. Pero a partir de SAP NW ABAP 7.4 SP05 está disponible para ABAP y podemos crear vistas desde el servidor de aplicación ABAP con el entorno Eclipse+ADT. 

También se introduce un nuevo paradigma de programación llamado "Code Push-Down" o "Code To Data". Este nuevo paradigma es completamente opuesto al tradicional paradigma "Data to Code". Tradicionalmente, en el paradigma "Data to Code", accedemos a los datos de la base de datos a través de las sentencias SQL y los cargados en tablas internas, estructuras, variables, etc.... en la memoria del servidor de aplicación para después realizamos las operaciones o cálculos requeridos.

Data to core  vs Code to data

En el paradigma "Code Push-Down" podemos realizar operaciones y cálculos directamente en la capa de la base de datos, quedando la capa del servidor de aplicación libre para el tratamiento de los datos procesados. Esto es posible gracias a que la base de datos SAP HANA tiene un soporte para lenguajes procedurales directamente incluido en el kernel de la base de datos. 

Por ejemplo, gracias al paradigma "Code Push-Down" con la nueva implementación de OPEN SQL para ABAP podemos incluir operaciones aritméticas dentro de la instrucción SELECT que se ejecutaran al nivel de la base de datos y liberando los recursos del servidor de aplicación. En posteriores veremos cómo aprovecharnos de estas nuevas funcionalidades.

Operaciones aritméticas directamente en la sentencia SQL que se ejecutan a nivel de base de dato


Existen dos implementaciones diferentes de la misma especificación CDS: 

HANA CDS
  • Se crean directamente en la base de datos de SAP HANA 
  • Pueden consumirse externamente con servicios ODATA 
  • Para consumirlas desde una aplicación ABAP: 
  • Crear una vista externa en el DICC ABAP 
  • Enlazar la vista externa con la vista HANA CDS 
  • Consumir la vista externa utilizando sentencias OPEN SQL 
  • DOS órdenes de trasporte diferentes: 
  • La vista HANA CDS que se trasporta como una unidad de trasporte de HANA 
  • La vista externa que se trasporta con una orden de SAP (transacción STMS) 
HANA CDS, dos ordenes de trasporte para ABAP

ABAP CDS
  • Disponible desde SAP NW ABAP 7.4 SP05 
  • Se pueden definir y crear desde el servidor de aplicaciones ABAP con ECLIPSE + ADT 
  • Necesitamos de un servidor de aplicaciones ABAP para crearla 
  • Pueden consumirse externamente con servicios ODATA 
  • Son independientes de la base de datos 
  • Pueden utilizar tablas, vistas, elementos, etc…. definidos en el diccionario ABAP 
  • No requieren crear vistas externas 
  • Una única orden de trasporte estándar de SAP ( transacción STMS
ABAP CDS, una única orden de transporte

En esta serie de entradas sobre CDS nos centramos exclusivamente en vistas ABAP CDS.

¿Que ventajas tiene las vistas ABAP CDS sobre las vistas tradicionales del dicccinario que creamos desde la transacción SE11? Para empezar,  Las vistas creadas desde la transacción SE11 tienen limitaciones como que solamente podemos crear asociaciones de tipo INNER JOIN y que únicamente las vistas de mantenimiento son asociaciones de tipo LEFT OUTER JOIN.

En la siguiente tabla se muestran algunas de las características disponibles en las vistas ABAP CDS y que no se encuentran disponibles en las vistas de bases de datos tradicionales de la transacción SE11.

Algunas diferencias entre ABAP CDS y vistas de la transacción SE11
En el siguiente enlace podéis leer un listado completo de las características de ABAP CDS.


PASOS PARA CREAR Y CONSUMIR UNA VISTA ABAP CDS


Para comprobar si vuestro servidor de aplicación soporta las vistas ABAP CDS,  conectaros con el cliente SAPGUI y comprobar el nivel del módulo SAP_BASIS:
  • En el menú superior Sistemas -> STATUS -> Info Componentes
  • Comprobar que el nivel del módulo SAP_BASIS es 7.40 SP05 o superior.
Nivel módulo SAP_BASIS

Para crear vistas ABAP CDS necesitais tener instalado el IDE Eclipse y el plugin ABAP Development Tools y como hemos dicho conexión a un servidor de aplicación con SAP NW ABAP 7.4 SP05 o superior.

Pasos para crear la vista ABAP CDS:

1. Seleccionar el proyecto ABAP donde queremos crear la vista ABAP CDS
2. Seleccionar el paquete donde queremos crear la vista CDS.
    Botón derecho del ratón -> New -> Other ABAP Repository Object

3. Seleccionar el objeto"Data Definition" dentro de la carpeta "Core Data Services". 


Nota: Si estáis trabajando con un componente SAP_BASIS inferior a la versión 7.5 tenéis que seleccionar el objeto "Data Definition" o "DLL Source" dentro de la carpeta  "Diccionary".

4. Rellenar el nombre de la vista ABAP CDS y la descripción


5. Seleccionar o crear la orden de trasporte.

6. Por defecto tenemos varias plantillas disponibles para crear las vistas ABAP CDS.
    Seleccionamos la plantilla "Define view" y pulsamos finalizar.


7. Se abrirá una nueva ventana con el siguiente código.

vista ABAP CDS

8. Para implementar la vista ABAP CDS:
  1. Cambiar el texto "sql_view_name" por el nombre que tendrá la vista en el diccionario ABAP. IMPORTANTE: El nombre de la vista en el diccionario ABAP no puede ser el mismo que el nombre que hemos dado a la vista ABAP CDS en el paso 4.
  2. Reemplazar "data_source_name" por el nombre de la tabla de la base de datos 
  3. Para referenciar los campos se utiliza el punto (‘.’) en vez de ('~')
  4. Las columnas que recuperamos en la consulta se definen dentro de las llaves {}.
  5. Después de las llaves {} podemos incluir la cláusula WHERE.
  6. Los comentarios empiezan por // para una línea o /*   */ para un bloque

9. Grabar y activar.


En el diccionario ABAP las vistas ABAP CDS se denominan Vistas SQL DDL. Una vez activada la vista en Eclipse ya podemos ver nuestra vista desde la transacción SE11 y ejecutarla y acceder a su definición en SQL desde el menú Detalles -> ABAP Create, pero no se puede modificar la vista ABAP CDS desde el diccionario ABAP, solamente desde ECLIPSE.

Vista ABAP CDS desde la transacción SE11

Desde nuestras aplicaciones ABAP, las vistas ABAP CDS pueden consumirse con sentencias OPEN SQL como cualquier vista o tabla del diccionario ABAP. También pueden utilizarse como tipos para la definición de tablas internas, estructuras y variables de los programas ABAP. Debemos utilizar el nombre que hemos especificado en el atributo sqlViewName y no el nombre de la vista ABAP CDS.

Consumición de la vista ABAP CDS 

COMO ENCONTRAR LAS VISTAS ABAP CDS CREADAS EN EL SISTEMA SAP

Consultando tabla TADIR, con los siguientes parámetros de selección, podemos encontrar todas las vistas CDS existentes en SAP, su nombre en el diccionario ABAP y el paquete al que pertenecen.

Acceder a la tabla TADIR con los siguientes parámetros:
  • PGMID = ‘R3TR’ 
  • OBJECT =’DDLS’ 
Accediendo la tabla DDLDEPENDENCY podemos obtener los nombres de la vista en el diccionario ABAP y en SAP HANA. Acceder a la tabla DDLDEPENDENCY con el parámetro:

  • OBJECTTYPE = 'VIEW'



Entradas de la tabla TADIR correspondientes a vistas CDS

Nombre de la vista ABAP CDS en HANA y en el diccionario ABAP


Fuente:

1 comentario:

  1. Muy útil la explicacion de CDS view, seria interesante conocer los CDS table function.

    ResponderEliminar