CDS Function Definitions

CDS Function Definitions

Las CDS Function Definitions en ABAP CDS permiten crear funciones personalizadas para encapsular algoritmos reutilizables dentro de las entidades de datos de SAP. Estas funciones mejoran la eficiencia al permitir que los cálculos complejos se realicen directamente en la base de datos, optimizando el rendimiento del sistema. Gracias a esta funcionalidad, los desarrolladores pueden definir funciones escalares que pueden ser utilizadas en posiciones de operandos dentro de consultas CDS, reduciendo la redundancia y mejorando la legibilidad del código.

CDS Function Definitions FDL: Lenguaje de Definición de Funciones

Las CDS Function Definitions se escriben en el CDS Function Definition Language (CDS FDL), un lenguaje específico dentro del ecosistema ABAP CDS que permite definir funciones personalizadas con lógica predefinida. A diferencia del código DDL utilizado para definir estructuras de datos, el FDL está diseñado exclusivamente para la creación de funciones, y su edición se realiza en un entorno diferente dentro de las ABAP Development Tools (ADT). Este enfoque garantiza que las funciones sean modulares, reutilizables y optimizadas para su ejecución en la base de datos subyacente.

Diferencias entre CDS Function Definitions y CDS Table Functions

Es importante no confundir las CDS Function Definitions con las CDS Table Functions. Las CDS Function Definitions permiten definir funciones escalares reutilizables dentro de consultas. Por otro lado, las CDS Table Functions encapsulan AMDP (ABAP Managed Database Procedures) y se utilizan como fuentes de datos dentro de CDS. Aunque su nombre sugiere lo contrario, una CDS Table Function no es realmente una función tradicional. En realidad, es una definición de datos en DDL (Data Definition Language). En contraste, las CDS Function Definitions pertenecen al dominio del CDS FDL. Su propósito exclusivo es la manipulación de datos a nivel de funciones escalares.

CDS Function Definitions – CDS Scalar Functions

Las CDS Scalar Functions en ABAP CDS son funciones definidas en el CDS FDL mediante la instrucción DEFINE SCALAR FUNCTION. Estas funciones personalizadas devuelven un valor escalar, es decir, un resultado único y elemental. Se crean en ABAP Development Tools (ADT) for Eclipse, lo que permite una integración eficiente con otras entidades CDS. Gracias a su diseño, optimizan el rendimiento al ejecutar cálculos directamente en la base de datos. Además, mejoran la reutilización del código al evitar redundancias en consultas complejas. Por esta razón, las CDS Scalar Functions son clave para el desarrollo eficiente en SAP HANA.

Ejemplo Scalar Function

Crear una Scalar Function

ABAP CDS Scalar Function

Definición de una Scalar Function

define scalar function ZDEMO_CDS_SCALAR_AM
  returns abap.char(12)

Definimos una función que regresará un tipo caracter de 12 posiciones.

Creamos un AMDP

Creamos un AMDP que retorne un parámetro tipo caracter de 12 posiciones.

"! <p class="shorttext synchronized" lang="en">AMDP Scalar reference</p>
CLASS zcl_demo_cds_scalar_am_cs DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb .
    CLASS-METHODS :
      execute
        FOR SCALAR FUNCTION
          zdemo_cds_scalar_am.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
CLASS zcl_demo_cds_scalar_am_cs IMPLEMENTATION.
  METHOD execute BY DATABASE FUNCTION
                 FOR HDB
                 LANGUAGE SQLSCRIPT
                 OPTIONS READ-ONLY .
    result = 'Hello World!';
  ENDMETHOD.
ENDCLASS.

Implementación Scalar Function

Scalar Function Implementation Reference
CDS Function

Además, es obligatorio agregar uno de los siguientes sufijos al nombre:

  • _ANA para funciones escalares analíticas.
  • _SQL para funciones escalares basadas en SQL.

Por otro lado, como cliente de SAP, solo tienes la posibilidad de crear funciones escalares basadas en SQL.

Restricción

Actualmente, solo SAP tiene permiso para crear, modificar o ampliar funciones escalares analíticas en CDS. Como cliente de SAP, puedes utilizarlas únicamente en vistas de proyección CDS que cuenten con un contrato de proveedor con una consulta analítica.

Agrega la referencia al AMDP

CDS Function

Creamos la CDS que utilizará la función

@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'DEMO_CDS_SCALAR_USE'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
    serviceQuality: #X,
    sizeCategory: #S,
    dataClass: #MIXED
}
define view entity ZDEMO_CDS_SCALAR_USE as select from ZCDS_BASE_SALES
{
    key id as id,
        ZDEMO_CDS_SCALAR_AM() as text   
}

Documentación OficialCDS Function Definitions SAP

Para más información sobre las Scalar Function sigue el siguiente enlace.