ABAP CDS es la implementación específica en todas las plataformas de bases de datos compatibles con SAP. Igual que las vistas de CDS con parámetros, introducidas con ABAP 7.40, SP08, son compatibles con todas las bases de datos con ABAP 7.50. Con ABAP 7.50 los CDS admiten “Table Function” o funciones de tablas como entidades. No se tratan de tablas de base de datos sino de funciones de tablas iguales a las tablas internas.
Se plantearon dos preguntas:
- Cómo hacer funciones de tabla que se implementan de forma nativa en la base de datos utilizadas en CDS
- Cómo administrar el ciclo de vida de las funciones de tabla nativas para estar constantemente disponibles para un modelo de datos creado en el servidor de aplicaciones
Ante las dos preguntas, una misma respuesta:
AMDP – ABAP Managed Database Procedures Procedimientos de base de datos presentado con ABAP 7.40, SP05.
AMDP es un framework basado en clases para gestionar y llamar procedimientos almacenados como procedimientos AMDP en AS ABAP.
Por el momento, AMDP solo es compatible con la plataforma HANA. Antes de ABAP 7.50, AMDP solo conocía procedimientos de bases de datos sin un valor de retorno. Con ABAP 7.50, AMDP también admite funciones de base de datos con un valor de retorno tabular. Y el objetivo principal de estas funciones AMDP es la implementación de funciones de tabla CDS.
Para crear una función de tabla CDS, tenemos que realizar los siguientes pasos:
- Definirlo en un código fuente DDL
- Implementar la lógica en un método AMDP con un valor de retorno.
Ambos pasos solo son posibles en ADT (Eclipse).
Ejemplo práctico
En nuestro paquete de desarrollo creamos el CDS de tipo “Table Function with parameters” con el nombre ZB_13_GVALER con los siguientes parámetros:
Nombre parámetro | Tipo de datos |
clnt | abap.clnt |
Plant | werks_d |
StorageLocation | lgort_d |
Que devuelve una tabla con la siguiente estructura:
Nombre componente | Tipo de datos |
Client | abap.clnt |
Material | matnr |
MaintenanceStatus | pstat_d |
FiscalYear | lfgja |
La lógica la implementamos en el método estático GET_MATERIALS de la clase AMDP con el nombre ZCL_01_GVALER. Dentro del método con SQL nativo devolvemos las columnas MANDT, MATNR, PSTAT y LFGJA de la tabla estándar MARD en la estructura del Table Function filtrando por las columnas WERKS y LGORT con los valores de los parámetros Plant y StorageLocation.
Procedimiento de definición e implementación en el sistema
- Pare definir este objeto navegamos en la carpeta Core Data Service->Data Definition.
- Seleccionamos la plantilla de código
- Definimos el CDS table Function.Antes de empezar con el código tenemos que entender el significado de las adiciones utilizadas en la sintaxis:[@function_annot][DEFINE] TABLE FUNCTION cds_entity
[parameter_list]
element_list
IMPLEMENTED BY METHOD amdp_function [;] @function_annot se usa para especificar anotaciones opcionales para la función de tabla CDS.parameter_list se utiliza para declarar una lista de parámetros de entrada opcionales para la función de tabla CDS. Estos también definen los parámetros de entrada de la función AMDP.element_list se utiliza para declarar los elementos de la función de tabla CDS. Estos también definen las columnas del valor de retorno tabular de la función AMDP.amdp_function especifica una implementación de la función AMDP en la forma amdp_class=>amdp_method. Aquí amdp_class es una clase AMDP y amdp_method es una implementación de la función AMDP contenida en esta clase. La implementación de la función AMDP no debe existir cuando se crea y se activa la función de tabla CDS. El nombre de una función de AMDP amdp_function solo se puede especificar en una sola función de tabla CDS. Ya que sabemos qué representa cada adición seguimos con el código definiendo el Table Function según el requerimiento mencionado anteriormente:
- Activamos el objeto y seguimos con la creación de la clase AMDP.
- Implementamos el código de la clase y el método AMDP que realiza la lectura en la tabla MARD con SQL nativo.
- Teniendo el Table Function y la clase AMDP procedemos con el primer test utilizando una sentencia de lectura Open SQL en un programa ejecutable.
- Al ejecutar el programa, visualizamos en una ventana los datos devueltos por el CDS Table Function.
- El segundo test lo realizamos a través de la opción Data Preview que es disponible en el menú contextual del botón derecho del ratón en la ventana del código fuente del Table Function.
- Asignamos valores a los parámetros.
- Visualizamos los datos devueltos. Como hemos visto el objeto CDS Table Function ofrece a los desarrolladores que trabajan con HANA la posibilidad de aprovechar todas las capacidades de push de código desde el servidor de aplicaciones en la base de datos a través de los métodos AMDP.