Core Data Services (CDS) ABAP

CDS Table Functions

(C) Brandeis Consulting

Motivation: Warum Table Functions?

CDS Views reichen oft aus – aber manchmal braucht man mehr Features:

  • Wenn komplexe Logik nötig ist
  • Zugriff auf HANA-spezifische SQL-Funktionen oder SQLScript
  • Dynamische Datenzugriffe
  • Daten aus anderen DB-Schema

➡️ Dann kommen CDS Table Functions ins Spiel!

(C) Brandeis Consulting

Was ist eine CDS Table Function?

(C) Brandeis Consulting

Was ist eine CDS Table Function?

  • Kombination aus CDS-Definition & SQLScript-Logik
  • Kein klassischer View – sondern:
    • CDS DDL-Quelltext
    • ABAP-Methode in einer AMDP-Klasse
  • Rückgabe: Tabellarische Ergebnismenge wie bei CDS Views
(C) Brandeis Consulting

Aufbau einer CDS Table Function

@EndUserText.label: 'Table Function'

define table function zi_table_function

returns

{
  mandt : abap.clnt;
  Country : land1;
  CountryText: landx50;
}

implemented by method zcl_amdp_table_function=>CountryText;
(C) Brandeis Consulting

Implementierung in AMDP

CLASS zcl_amdp_table_function DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

    CLASS-METHODS CountryText FOR TABLE FUNCTION zi_table_function.

ENDCLASS.

CLASS zcl_amdp_table_function IMPLEMENTATION.
  METHOD countrytext BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY
  USING t005t.

    TMP = select distinct mandt,
                          land1 as Country,
                          landx as CountryText
                   from t005t
                   where mandt = session_context( 'CLIENT' );

    return select mandt,
                  Country,
                  string_agg( CountryText, '/' ) as CountryText
                  from :TMP
                  group by Country, mandt;
  ENDMETHOD.
ENDCLASS.
(C) Brandeis Consulting

Nutzung im ABAP

SELECT * FROM ztf_kunden_umsatz( p_kunnr = '123456' )
  INTO TABLE @DATA(result).

➡️ Direkte Verwendung im Open SQL
➡️ Auch in CDS konsumierbar

(C) Brandeis Consulting

Typische Use Cases

✅ Komplexe Berechnungen
✅ Viele aufeinander aufbauende Schritte
✅ Verwendung von HANA-spezifischen Funktionen und Features, die im CDS nicht möglich sind. z.B. Window Functions
✅ Zugriff auf andere Datenbankschema, z.B. _SYS_BIC

(C) Brandeis Consulting

Best Practices

✔️ Nur aus gutem Grund nutzen
✔️ Keine Imperative Logik
✔️ Clean SQLScript!

(C) Brandeis Consulting

Demo - Table Function anlegen

define table function ZTF_TASKS_WITH_USER
  returns {
    task_key : abap.char(10);
    summary  : abap.char(80);
    user     : abap.char(40);
  }
implemented by method
  zcl_tasks_tf=>get_tasks.

AMDP-Klasse:

METHOD get_tasks BY DATABASE FUNCTION FOR HDB
LANGUAGE SQLSCRIPT OPTIONS READ-ONLY
USING zbc_tasks zbc_users.

RETURN
  SELECT t.task_key, t.summary, u.firstname || ' ' || u.lastname as user
    FROM zbc_tasks AS t
    JOIN zbc_users AS u ON t.assignee = u.user_id;
(C) Brandeis Consulting

Zusammenfassung

  • Table Functions = CDS mit SQLScript-Logik im Hintergrund
  • Ermöglichen HANA-spezifische Features und komplexe Berechnungen
  • Kein Ersatz für CDS Views – sondern Ergänzung
  • Immer auf Performance & Lesbarkeit achten
(C) Brandeis Consulting
(C) Brandeis Consulting