CDS Views und TableFunctions sind für tabellarische Ergebnisse gedacht. Aber was, wenn man einzelne Werte berechnen möchte?
Wiederverwendbare Berechnungen Nutzt SQLScript-Logik im CDS-Kontext Kann in CDS Views, AMDP oder ABAP SQL eingebettet werden
abap.int4
abap.string
abap.bool
Wird wie ein Funktionsaufruf verwendet, z. B. get_priority_cat( t.priority )
get_priority_cat( t.priority )
define scalar function ZUDF_NAME with parameters Firstname: abap.char( 50 ), Lastname: abap.char( 50 ) returns abap.char( 53 ); //Jörg Brandeis ==> J. Brandeis
Parameter können mehrere sein Der Rückgabewert ist genau ein Feld
Die Verbindung von der Function zur Implementierung ist ein eigenes Entwicklungsobjekt.
Der Name muss mit _SQL enden.
_SQL
CLASS zcl_amdp_udf DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_amdp_marker_hdb. CLASS-METHODS name FOR SCALAR FUNCTION zudf_name. ENDCLASS. CLASS zcl_amdp_udf IMPLEMENTATION. METHOD name BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY. result = left( upper( Firstname ), 1 )|| '- ' || initcap( Lastname ); ENDMETHOD. ENDCLASS.
define view entity ZI_00_USERS as select from zbc_users { key user_id as UserId, zudf_Name( Firstname => firstname, Lastname => lastname) as Name }
So einfach wie jede andere SQL-Funktion verwendbar!
Laut Doku in Cloud Systemen (Public/Steampunk) möglich, aber auf 2023 lieft das noch Fehler!
SELECT FROM zbc_users FIELDS user_id, zudf_Name( Firstname = firstname, Lastname = lastname ) AS NAME INTO TABLE @DATA(Result).
Kategorisierung (z. B. Prio, Alter, Umsatzgruppen) Validierung & Transformation von Eingabewerten Kürzel, Formatierungen, kurze Berechnungen Reusable Business Logic auf SQLScript-Basis
CDS Scalar Functions = kleine, wiederverwendbare Recheneinheiten Rückgabe ist genau ein Wert Einsetzbar in CDS, Open SQL, AMDP Implementierung erfolgt in SQLScript