19,99 €
Dieses Buch bietet Ihnen einen Einstieg in die speziell für SAP-HANA entwickelten "ABAP Core Data Services" (ABAP CDS). Von den ersten Schritten in der Eclipse-IDE bis zu komplexen Services für Echtzeitauswertungen im SAP-ERP-System zeigt Ihnen dieses Werk die vielfältigen Einsatzszenarien für Core Data Services.
Mit zahlreichen Übungsprogrammen gewinnen Sie einen Einblick in Themen wie CDS Views, ODATA Services, Berechtigungskonzepte, virtuelle Datenmodelle und Testframeworks für Core Data Services.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Seitenzahl: 135
Veröffentlichungsjahr: 2020
Johannes Gerbershagen
SAP®-Praxishandbuch ABAP Core Data Services (CDS)
Johannes GerbershagenSAP®-Praxishandbuch ABAP Core Data Services (CDS)
ISBN:978-3-96012-710-9
Lektorat:Monika Hong
Korrektorat:Die Korrekturstube
Coverdesign:Philip Esch
Coverfoto:© eyewave | # 4846618 – stock.adobe.com
Satz & Layout:Johann-Christian Hanke
1. Auflage 2020
© Espresso Tutorials GmbH, Gleichen 2020
URL:www.espresso-tutorials.de
Das vorliegende Werk ist in allen seinen Teilen urheberrechtlich geschützt. Alle Rechte sind vorbehalten, insbesondere das Recht der Übersetzung, des Vortrags, der Reproduktion und der Vervielfältigung. Espresso Tutorials GmbH, Bahnhofstr. 2, 37130 Gleichen, Deutschland.
Ungeachtet der Sorgfalt, die auf die Erstellung von Text und Abbildungen verwendet wurde, können weder der Verlag noch die Autoren oder Herausgeber für mögliche Fehler und deren Folgen eine juristische Verantwortung oder Haftung übernehmen.
Feedback:Wir freuen uns über Fragen und Anmerkungen jeglicher Art. Bitte senden Sie diese an: [email protected].
Unser Ziel ist es, SAP-Wissen wie einen Espresso zu servieren: Auf das Wesentliche verdichtete Informationen anstelle langatmiger Kompendien – für ein effektives Lernen an konkreten Fallbeispielen. Viele unserer Bücher enthalten zusätzlich Videos, mit denen Sie Schritt für Schritt die vermittelten Inhalte nachvollziehen können. Besuchen Sie unseren YouTube-Kanal mit einer umfangreichen Auswahl frei zugänglicher Videos: https://www.youtube.com/user/EspressoTutorials.
Kennen Sie schon unser Forum? Hier erhalten Sie stets aktuelle Informationen zu Entwicklungen der SAP-Software, Hilfe zu Ihren Fragen und die Gelegenheit, mit anderen Anwendern zu diskutieren: http://www.fico-forum.de.
Rüdiger Deppe:
Schnelleinstieg in SAP
®
ABAP Objects 2., erweiterte Auflage
Christoph Lordieck:
SAP
®
-Schnelleinstieg: ABAP-Entwicklung in Eclipse
Christoph Lordieck:
Praxishandbuch BOPF – das Business Object Processing Framework
Sebastian Abshoff:
Mobile Apps mit den SAP
®
Cloud Platform Mobile Services
Dr. Boris Rubarth:
Schnittstellenprogrammierung in SAP
®
ABAP
Johannes Gerbershagen:
Qualitätsmanagement in der ABAP-Entwicklung unter SAP
®
Der ABAP-Open-SQL-Standard mit den klassischen Dictionary-Elementen unterstützt bereits die vereinheitlichten Elemente der Abfragesprache SQL (Structured Query Language), mit der Abfragen an rationelle Datenbanken gestellt und verarbeitet werden. Über diesen Standard hinaus bietet insbesondere die SAP-HANA-Datenbank viele Funktionen und Erweiterungen an, die keine Bestandteile der Open-SQL-Syntax sind. Zudem gestatten es die klassischen Dictionary-Elemente bis auf Views nicht, Daten aus mehreren Quellen zu aggregieren. Oftmals ist es in der Entwicklung aber wünschenswert, dem Anwendungsentwickler komplexere Aggregationen als Service bereitzustellen, den er für die Entwicklung klassischer ABAP- bzw. moderner UI5-Applikationen oder flexibler Auswertungen nutzen kann, wie sie vom Business Warehouse (BW) bekannt sind.
Aus diesen Gründen wurden seitens der SAP die Core Data Services (CDS) entwickelt, die ich Ihnen in diesem Buch vorstelle. Dabei stehen die beiden folgenden nicht kompatiblen Ausprägungen von Core Data Services zur Verfügung:
HANA-CDS
ABAP-CDS
Sie werden nachfolgend die ABAP-CDS kennenlernen, die auf ABAP-Applikationsservern entwickelt und ausgeführt werden. Bei den HANA-CDS handelt es sich um Dienste der HANA-Datenbank, die keinen ABAP-Applikationsserver benötigen. Sowohl HANA-CDS als auch ABAP-CDS besitzen jeweils separate anwendungsspezifische Programmiersprachen und separate Entwicklungsumgebungen.
In den ersten drei Kapiteln lernen Sie die verschiedenen Entwicklungsobjekte kennen, die Ihnen die Core Data Services zur Verfügung stellen. Das vierte Kapitel enthält das eigens für Core Data Services entwickelte Berechtigungskonzept. Im fünften Kapitel erläutere ich Ihnen einige fortgeschrittene Techniken wie Anmerkungen, virtuelle Felder und eingebaute Funktionen, die in CDS-Views Verwendung finden.
Abgerundet wird das Thema Core Data Services schließlich durch Kapitel 6 und 7, in denen Sie die Implementierung flexibler Auswertungen mit dem virtuellen Datenmodell sowie die CDS-Testumgebung kennenlernen werden. Für das sechste Kapitel sind Grundkenntnisse im BW hilfreich. Das siebte Kapitel ist für Entwickler gedacht, die die Vorteile automatisierter Unit-Tests auch für Core Data Services nutzen wollen.
Die Codebeispiele wurden unter Beachtung der Clean-Code-Gestaltungsrichtlinie (https://github.com/sap/styleguides) erstellt. Sie sind mit SAP NetWeaver Releases 7.51 und höher kompatibel und können im GitHub-Repository unter https://github.com/germanysources/cds_samples abgerufen werden. Neben der reinen Entwicklung auf dem ABAP-Applikationsserver finden Sie immer wieder Querverweise auf die Schnittstellen zwischen Core Data Services und UI5-Applikationen.
In den Text sind Kästen eingefügt, um wichtige Informationen besonders hervorzuheben. Jeder Kasten ist zusätzlich mit einem Piktogramm versehen, das diesen genauer klassifiziert:
Hinweis
Hinweise bieten praktische Tipps zum Umgang mit dem jeweiligen Thema.
Beispiel
Beispiele dienen dazu, ein Thema besser zu illustrieren.
Achtung
Warnungen weisen auf mögliche Fehlerquellen oder Stolpersteine im Zusammenhang mit einem Thema hin.
Um den Lesefluss nicht zu beeinträchtigen, wird im vorliegenden Buch bei personenbezogenen Substantiven und Pronomen zwar nur die gewohnte männliche Sprachform verwendet, stets aber die weibliche Form gleichermaßen mitgemeint.
Sämtliche in diesem Buch abgedruckten Screenshots unterliegen dem Copyright der SAP SE. Alle Rechte an den Screenshots hält die SAP SE. Der Einfachheit halber haben wir im Rest des Buches darauf verzichtet, dies unter jedem Screenshot gesondert auszuweisen.
Quellcode-Beispiele
Dieses Buch enthält viele Quellcode-Beispiele. Um die Lesbarkeit in Ihrem E-Book-Lesegerät zu verbessern und den Zeilenumbruch korrekt darzustellen, empfehlen wir, den Quellcode im Querformat zu betrachten oder die Schriftgröße kleiner zu zoomen.
In diesem Kapitel möchte ich Ihnen einen wichtigen Bestandteil der Core Data Services vorstellen, die CDS-Views, sowie einige Problemstellungen aufzeigen, die Sie mit CDS-Views elegant lösen können.
Wie bereits im Vorwort erwähnt, können Sie mit Core Data Services Aggregationen formulieren und diese in Datenbank-Views umsetzen. Entwicklungsseitig gesehen legen Sie hierfür sogenannte CDS-Views an, die Sie in diesem Kapitel kennenlernen.
CDS-Views sind Datenbank-Views. Sie werden in den ABAP Development Tools (ADT) editiert, die Ihnen in Abschnitt 1.1 begegnen, und besitzen eine eigene Syntax. In der ABAP-Sprachreferenz heißt diese Syntax Datendefinitionssprache (DDL), die ich Ihnen in Abschnitt 1.1.3 erläutere. In diesem Buch wird hierfür immer der Begriff CDS-Datendefinitionssprache verwendet. Diese Sprache bietet weit mehr Möglichkeiten als klassische Dictionary-Views, ist aber wie ABAP Open SQL von den Eigenheiten des Datenbanksystems unabhängig. Sie können diese Sprache deshalb sowohl auf ABAP-Applikationsservern mit einer SAP-HANA-Datenbank als auch auf ABAP-Applikationsservern mit Datenbanksystemen von Drittanbietern in derselben Art und Weise nutzen. Sie wird seit SAP NetWeaver Release 7.40 SP05 unterstützt.
Die ABAP Development Tools basieren auf der Eclipse-Entwicklungsumgebung. Diese können Sie unter https://eclipse.org/downloads herunterladen. Bei der Installation wählen Sie zwischen verschiedenen Sprachen (z.B. Java oder C++), wobei ABAP standardmäßig nicht enthalten ist. Für die ABAP-Entwicklung benötigen Sie ein eigenes Plugin der SAP, das Eclipse im Rahmen der Installation nicht bereitstellt. Dieses Plugin mitsamt Installationsanleitung laden Sie nochmals getrennt unter https://tools.hana.ondemand.com/#abap herunter – inklusive einer genauen Installationsanleitung.
Um Ihren ersten CDS-View zu erstellen, öffnen Sie die ADT und wählen File • New • Other (siehe Abbildung 1.1).
Abbildung 1.1: CDS-View erstellen – Schritt 1
Daraufhin öffnet sich der in Abbildung 1.2 gezeigte Dialog, in dem Sie die Kategorie Core Data Services • Data Definition auswählen, um den CDS-View zu definieren.
Abbildung 1.2: CDS-View erstellen – Schritt 2
Im dritten Fenster, das Sie in Abbildung 1.3 sehen, geben Sie das Entwicklungspaket (Package), den technischen Namen sowie die Beschreibung für den neuen CDS-View ein.
Abbildung 1.3: CDS-View erstellen – Schritt 3
Nun öffnet sich der in Abbildung 1.4 gezeigte Editor. Dieser enthält den CDS-View in der CDS-Datendefinitionssprache, die Sie, wie bereits erwähnt, in Abschnitt 1.1.3 näher kennenlernen werden.
Abbildung 1.4: ADT-Editor mit CDS-View
Ein CDS-View setzt sich aus zwei Bestandteilen zusammen:
1. CDS-Entität: Sie legt die Felder und die Attribute des CDS-Views fest. Diese Entität implementieren Sie in der CDS-Datendefinitionssprache (siehe Abbildung 1.4).
2. Datenbank-View mit zugehöriger Dictionary-Struktur: Für jeden CDS-View wird bei Aktivierung automatisch ein Datenbank-View mit einer äquivalenten Dictionary-Struktur angelegt, die alle Felder des Views enthält. Der Name des Datenbank-Views befindet sich hinter der Anmerkung (Annotation, siehe Abschnitt 5.1.1) @AbapCatalog.sqlViewName.
Die CDS-Entität und der Datenbank-View können somit unterschiedliche Namen besitzen. In Abbildung 1.4 heißt die CDS-Entität zfirst_cds_view und der Datenbank-View bekommt den Namen zf_cds_view.
In ABAP-Programmen unterscheidet sich die Handhabung von CDS-Entitäten und klassischen Dictionary-Views nicht. Sie können CDS-Entitäten folgendermaßen einsetzen:
zur Definition von Strukturen oder internen Tabellen
zur Anwendung in Open-SQL-SELECT-Anweisungen
Technisch gesehen ist es zwar möglich, den Datenbank-View direkt anzusprechen, allerdings wurde diese Variante als obsolet eingestuft und sollte nicht mehr verwendet werden.
Die Umsetzung des CDS-Views, der in der CDS-Datendefinitionssprache geschrieben wurde, in einen SQL-Datenbank-View können Sie im ADT-Editor über einen Rechtsklick im Menüpunkt Show SQL CREATE Statement überprüfen (siehe Abbildung 1.5).
Abbildung 1.5: ADT – SQL-CREATE-Anweisung
Alternativ finden Sie den Datenbank-View auch im ABAP-Dictionary (Transaktion SE11) unter dem Menüpunkt Views, allerdings können Sie den View dort nicht bearbeiten.
Prüfen und aktivieren können Sie den CDS-View über die Buttons , die Sie in der Menüleiste (siehe Abbildung 1.6) finden. Bei der Aktivierung erzeugt oder ändert das System den entsprechenden Datenbank-View.
Abbildung 1.6: ADT-Menüleiste
Syntaxfehler und Warnungen werden unterhalb des Editors ausgegeben (siehe Abbildung 1.7).
Abbildung 1.7: ADT-Syntaxprüfung
Nachdem Sie Ihren ersten View mit der Tastenkombination Strg + S gesichert haben, können Sie diesen mit dem Button in der Menüleiste erneut öffnen. Es erscheint sich der in Abbildung 1.8 gezeigte Dialog, in dem Ihre zuletzt verwendeten Objekte angezeigt werden oder in dem Sie nach bestimmten Objekten suchen können.
Abbildung 1.8: Dialog zum Öffnen von Entwicklungsobjekten in ADT
Wenn Sie ein Objekt suchen, brauchen Sie nur dessen Name in das Suchfeld einzugeben. Die Entwicklungsumgebung gibt automatisch alle Objekte aus (Programme, Klassen, Funktionsgruppen, Datendefinitionen), die dem Suchbegriff entsprechen.
In diesem Abschnitt möchte ich Ihnen den Teil der CDS-Datendefinitionssprache vorstellen, den Sie für CDS-Views benötigen. Die CDS-Datendefinitionssprache ist sehr viel mächtiger, als Sie in diesem Abschnitt vorgestellt wird. Mit ihr ist es unter anderem möglich, neben CDS-Views auch CDS-View-Erweiterungen und CDS-Tabellenfunktionen zu definieren. Mehr dazu erfahren Sie in den Kapiteln 2 und 3.
Ein CDS-View wird immer mit den Schlüsselwörtern DEFINE VIEW eingeleitet (siehe Abbildung 1.4 und Listing 1.1). An diese Schlüsselwörter schließen sich die folgenden Elemente an:
1. der technische Name der CDS-Entität, den Sie bei der Erstellung gewählt haben (siehe Abbildung 1.3);
2. die Datenquelle, die mit AS SELECT FROM eingeleitet wird; dies kann eine einzelne Datenbanktabelle, eine Verknüpfung aus mehreren Datenbanktabellen (ein sogenannter JOIN bzw. eine Assoziation) oder wiederum ein CDS-View sein.
Wie bei Open-SQL-SELECT-Anweisungen geben Sie als Nächstes die View-Felder in der Feldliste ein, die Sie mit geschweiften Klammern umschließen. Schlüsselfelder werden mit dem Schlüsselwort KEY eingeleitet. Bei Open-SQL-Anweisungen verknüpft das Sonderzeichen »~« die Datenbanktabelle mit dem Feld. Bei CDS-Views müssen Sie dieses Sonderzeichen durch einen Punkt ersetzen. Mit dem Schlüsselwort AS können Sie dem Feld einen alternativen Namen (Aliasnamen) geben. In Listing 1.1 bekommt das Feld CARRID aus der Tabelle SBOOK den Aliasnamen CARRIER.
@AbapCatalog.preserveKey: true define view zflight_booking as select from sbook{ key carrid as carrier, key connid as connection_id, key fldate as flight_date, key bookid as booking_number, class, cancelled }
Listing 1.1: Einfacher CDS-View »zflight_booking«
Damit das System auch die Schlüssel verwendet, die Sie im Quelltext eingetragen haben, ist die Anmerkung (Annotation) @AbapCatalog.preserveKey: true vor der Definition des Views notwendig. Der Quelltext im ADT-Editor enthält diese Anmerkung direkt bei der Erstellung eines neuen CDS-Views (siehe Abbildung 1.4). Im Regelfall müssen Sie die Anmerkung deshalb nicht manuell eintragen.
Wenn Sie diese Anmerkung löschen, vergibt das System die Schlüssel selbstständig wie bei der Aktivierung eines klassischen Dictionary-Views.
Feldliste mit Stern (*)
Eine Feldliste, die nur aus einem Stern (*) besteht, übernimmt wie von Open SQL bekannt alle Felder aus den Datenquellen.
Anstatt Aliasnamen über die AS-Klausel zu vergeben, können Sie auch direkt nach dem Namen der CDS-Entität eine Namensliste angeben, die die Aliasnamen aller Felder enthält. Die Namensliste umschließen Sie wie in Listing 1.2 mit runden Klammern und trennen die einzelnen Namen durch Kommata.
@AbapCatalog.preserveKey: true define view zfirst_cds_view_namelist(carrier, connection_id, flight_date, booking_number, class, cancelled) as select from sbook { key carrid, key connid, key fldate, key bookid, class, cancelled }
Listing 1.2: CDS-View mit Namensliste
Bitte beachten Sie, dass Sie für alle Felder in der Feldliste einen Aliasnamen angeben müssen.
Innerhalb von CDS-Views können Sie nicht nur bereits vorhandene Felder aus den Datenquellen übernehmen (siehe Listing 1.1), sondern auch Felder nach eigenen Regeln definieren. Wie Sie später in diesem Abschnitt noch sehen werden, habe ich diese Möglichkeit in Listing 1.13 und Listing 1.15 genutzt. Daher möchte ich Ihnen die Regeln in diesem Abschnitt schon einmal vorstellen:
1. Aggregatsfunktionen:
Maximum
max( feld )
Minimum
min( feld )
arithmetischer Mittelwert
avg( feld )
Summe
sum( feld )
Anzahl
count(*)
Die Aggregatsfunktion wird für mehrere Werte eines Feldes gebildet. Daher ist bei Verwendung einer Aggregatsfunktion immer eine GROUP BY-Klausel notwendig.
2. arithmetische Ausdrücke:
Summe
feld1 + feld2
Subtraktion
feld1 – feld2
Multiplikation
feld1 * feld2
Division
feld1 / feld2
Die Operanden müssen dabei numerische Felder sein.
3. Fallunterscheidungen: Abhängig vom Wert des Vergleichsfeldes wird der Wert des resultierenden Feldes gebildet (case feld1 when wert1 then resultat1 when wert2 then resultat2 else resultat3 end). Den Wert des resultierenden Feldes können Sie dabei aus den in dieser Liste aufgeführten Regeln festlegen. Dies kann beispielsweise ein arithmetischer Ausdruck sein, eine Aggregatsfunktion oder eine geschachtelte Fallunterscheidung.
4. Konvertierungen zwischen Dictionary-Typen, beispielsweise vom Typ Dezimalzahl in den Typ Gleitkommazahl (cast( feld1 as abap.fltp )).
Listing 1.3 zeigt die Syntax der Aggregatsfunktionen Summation (sum( paymentsum )), Maximum (max( price )), Minimum (min( price)), arithmetischer Mittelwert (avg( price )) und Anzahl (count(*)):
@AbapCatalog.sqlViewName: 'zs_agg_func' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Sample for aggregate function' define view zsample_aggregat_functions as select from sflight { key carrid, key connid, sum( paymentsum ) as paymentsum, max( price ) as max_price, min( price ) as min_price, avg( price ) as average_price, count(*) as count_flights } group by carrid, connid
Listing 1.3: Felddefinitionen mittels Aggregatsfunktionen
Listing 1.4 zeigt die Syntax für folgende Optionen der Felddefinition:
1. arithmetischer Ausdruck (seatsmax – seatsocc subtrahiert die Anzahl belegter Sitzplätze von der maximalen Sitzplatzanzahl)
2. Fallunterscheidung (case planetype when 'A340' then 4 else 2 end gibt vier Triebwerke für den Flugzeugtyp A340 aus, sonst zwei)
3. Konvertierungssyntax (cast( price as abap.fltp ) konvertiert den Preis in eine Gleitkommazahl)
@AbapCatalog.sqlViewName: 'zs_field_rules' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'field rules (arithmetic expressions, case and cast)' define view zsample_field_rules as select from sflight { key carrid, key connid, key fldate, seatsmax - seatsocc as free_seats, case planetype when 'A340' then 4 else 2 end as engines, cast( price as abap.fltp ) as price_float }
Listing 1.4: Felddefinitionen mittels arithmetischer Ausdrücke – Fallunterscheidungen und Konvertierungen
Diese Regeln sind schachtelbar. Ein arithmetischer Ausdruck kann beispielsweise mit einer Aggregatsfunktion umschlossen werden.
Wie bereits erwähnt, kann ein CDS-View mehrere Datenbanktabellen als Quellen enthalten. Zur Verknüpfung dieser Datenbanktabellen bestehen folgende Möglichkeiten:
1. INNER JOIN
2 LEFT OUTER JOIN
3 RIGHT OUTER JOIN
4. CROSS JOIN
5. Assoziation
Die Ergebnismenge weist jeweils folgenden Inhalt auf:
INNER JOIN: alle Zeilen, die in der Tabelle sowohl auf der linken Seite als auch auf der rechten Seite enthalten sind.
LEFT OUTER JOIN: alle Zeilen, die in der Tabelle auf der linken Seite enthalten sind. Ist die Zeile nicht in der Tabelle auf der rechten Seite vorhanden, enthalten die Felder dieser Tabelle in der Ergebnismenge Initialwerte.
RIGHT OUTER JOIN: alle Zeilen, die in der Tabelle auf der rechten Seite enthalten sind. Ist die Zeile nicht in der Tabelle auf der linken Seite vorhanden, enthalten die Felder dieser Tabelle in der Ergebnismenge Initialwerte.
CROSS JOIN: das Kreuzprodukt aus den Zeilen der Tabelle der linken Seite und rechten Seite.
Eine Assoziation kann entweder als INNER JOIN oder als LEFT OUTER JOIN implementiert werden. Dies können Sie über sogenannte Pfadausdrücke steuern. Die Definition scarr[left outer].carrname stellt einen beispielhaften Pfadausdruck dar. In eckigen Klammern finden Sie die Information, dass die Tabelle SCARR über einen LEFT OUTER JOIN mit der Tabelle verknüpft wird, die sich auf der linken Seite der Assoziation befindet.
Wenn Sie auf die Angabe eines Pfadausdrucks (siehe Listing 1.5) verzichten, wandelt das System die Assoziation bei der Aktivierung automatisch in einen LEFT OUTER JOIN um.
Listing 1.5: Assoziation ohne Pfadausdrücke