CDS - Grundlagen
Core Data Services sind in einem S/4 System gar nicht mehr weg zu denken, sie bilden logische Zugriffe auf Daten und bieten neue Wege bekannte Tabellen zu übersetzen.
Inhaltsverzeichnis
Artikel-Update: Seit Release 7.57 (S/4 HANA 2022) ist DEFINE VIEW als obsolet gekennzeichnet, stattdessen solltest du DEFINE VIEW ENTITY verwenden. Diese können an einigen Stellen zu den Beispielen abweichen. Mehr Informationen zu den neuen Views findest du in diesem Artikel.
Core Data Services, kurz CDS, gibt es bereits seit einem 7.40 (SP05) Release. Mit noch nicht besonders großem Umfang, aber schon für den ersten Einsatz bereit. CDS Views haben sich die letzten Jahre stark weiterentwickelt und bilden mittlerweile die Grundlage für das ABAP RESTful Programing Model.
Was sind CDS Views?
Core Data Services bilden eine neue Art von Views im System ab und können über die klassische Workbench nicht angelegt und erst in neuen Releases auch über die SAP GUI angeschaut werden. Sie werden vor allem für die folgenden Dinge eingesetzt:
- Abstrakte Schicht über der Datenbank
- Modellierung von Entitäten und Geschäftsobjekten
- Normalisierung von Daten
Die Views werden auf der Datenbank generiert und können dann zum Beispiel über die SE11 eingesehen werden. Dazu ist dann auch die DDL Source verfügbar, der eigentliche "Code" um die View zu erstellen.
Datenmodell
Schauen wir uns einmal eine Tabelle an, dann kann diese Tabelle im System frei gelesen werden und auch geändert werden. Im schlechtesten Fall gibt es keinen zentralen Zugriff (Single Point of Access) um die Daten zu lesen und zu ändern, sondern jedes Programm hat seine eigene Logik.
Mit CDS Views hast du nun die Möglichkeit diesen View oder Unterviews überall in deinen Programmen zu verwenden, ohne Sorgen zu machen das sich Felder in der Tabelle ändern. Sollte dies der Fall sein, muss nur der unterste View (Interface) angepasst werden und das gesamte Modell arbeitet weiterhin Fehlerfrei und bekommt von der Änderung nichts mit.
Wie bei der Verwendung von Interfaces ist die eigentliche Implementierung nicht relevant, solange die Schnittstelle stabil bleibt. Daher kommt auch der Name dieser Schicht.
Beispiel
Legen wir dazu einen einfachen CDS View für die Tabelle T001 an und geben den Feldern entsprechende englische Langnamen, um Bedeutung und Hintergrund besser verständlich zu machen. Der View könnte nun wie folgt aussehen:
@AbapCatalog.sqlViewName: 'ZBSICOMPCODE'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Example for T001'
define view ZBS_I_CompanyCode
as select from t001
{
key bukrs as CompanyCode,
butxt as CompanyCodeDescription,
land1 as Country,
waers as Currency,
spras as Language,
xprod as ProductiveFlag
}
Wir verwenden vor dem View sogenannte Annotationen die mit @ anfangen, hierbei handelt es sich nicht um Kommentare im View, sondern steuernde Eigenschaften. Die Annotation "sqlViewName" definiert den View auf der Datenbank und das "label" Feld definiert die Beschreibung des Views. Der Name des CDS Views kann nun länger sein als der Tabellenname und CamelCase funktioniert hier genau so.
Wenn du dir nun den View in der SE11 zum Beispiel anschaust, dann siehst du alle definierten Elemente wie wir sie auch in der Definition angelegt haben.
Vom SQL View kommen wir auf die Definition und anders herum. Ebenso sehen wir die übersetzten Feldnamen. Wie greifen wir nun auf diese Daten zu? Dazu kannst du einfach einen normalen SELECT verwenden, dieser funktioniert genau so wie mit Tabellen.
CLASS zcl_test_easy_cds DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_test_easy_cds IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
SELECT *
FROM ZBS_I_CompanyCode
INTO TABLE @DATA(lt_all_companies).
out->write( lt_all_companies ).
SELECT CompanyCode, CompanyCodeDescription
FROM ZBS_I_CompanyCode
INTO TABLE @DATA(lt_company_names).
out->write( lt_company_names ).
ENDMETHOD.
ENDCLASS.
Suche
Wie findest du Core Data Services in Eclipse? Dazu kannst du den "Type" Filter nutzen. Dazu musst den Typ DDLS angeben und kannst dann nach den entsprechenden Objekten suchen. Hier haben wir einmal eine Beispielsuche, in der wir als CDS Views mit Company und einem gewissen Pattern suchen wollen.
Code-Pushdown
Ein zentraler Bestandteil der neuen View ist der Code-Pushdown, wobei es vor allem um die Verlagerung von Rechenleistung auf die Datenbank geht. Operationen wie Aggregation, JOIN, UNION oder Berechnungen sollen durch die Datenbank durchgeführt werden. Das finale Ergebnis wird dann Richtung ABAP Stack transferiert und kann weiter verarbeitet werden. Damit kann ein Großteil der Aktionen auf dem Applikationsserver entfallen, um weitere Daten zu lesen und zusammenzuführen.
Im Artikel letzte Woche hatten wir den Unterschied von R/3 zu S/4 vorgestellt und das die Datenbank sehr schnell ist. Diese Funktion wollen wir an dieser Stelle auch nutzen.
Fazit
Core Data Services werden die nächsten Jahre immer wichtiger werden und Entwickler werden in einigen Jahren nur noch über die Views, anstatt Tabellen, reden. Im nächsten Artikel schauen wir uns das virtuelle Datenmodell etwas näher an.