Webinar – ABAP® 7.53/7.54 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP 7.53/7.54 Releaseabhängige Änderungen

Links

Blogs

Unsere nächtes Webinar

Webinar – ABAP® Managed Database Procedures – 31. Jänner 2020

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP Managed Database Procedures“

Bücher

  • SQLScript for SAP HANA , SAPPress, 2018, ISBN 978-3-8362-6208-8, Jörg Brandeis

Andere Blogs/Links zu dem Thema

Unser nächtes Webinar

Wir freuen uns schon auf die kommenden Webinare!

Webinar – ABAP® Development Tools vom 27. September 2019

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP Development Tools

Umfrageergebnisse

Interessante Social Media Accounts

Wenn man sich für aktuelle Informationen rund um ADT interessiert, sollte man unbedingt diesen beiden Kollegen der SAP folgen.

Bücher

  • ABAP-Entwicklung in Eclipse, SAPPress, 2015, ISBN 978-3-8362-3040-7, Daniel Schön
  • ABAP to the Future, SAPPress 2019, ISBN 978-1-4932-1161-6, Paul Hardy
  • SAP-Schnelleinstieg: ABAP-Entwicklung in Eclipse, Espresso Tutorials, ISBN 9783960126652, Christoph Lordieck
  • Refactoring: Improving the Design of Existing Code, ISBN 978-0-13-475759-9, 2019, Martin Fowler

Andere Blogs zu dem Thema

Unser nächtes Webinar

Aufgrund der vielen anderen Termine im Herbst, findet unser nächstes Webinar erst im Jänner 2020 statt. Das Thema wird noch vor Weihnachten fixiert, aber natürlich kann man sich jederzeit registrieren.

Webinar – Modern ABAP®

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „Modern ABAP

Links

ABAP in the Cloud

ABAP CodeRetreat

ABAP Development Tools

ABAP News

ABAP OO

ABAP Obsolete Sprachelemente

ABAPGit

ABAP Open Source Projects

  • https://dotabap.org/

ABAP CDS Views

ABAP Open Checks

ABAP Analyse Tools

ABAP Unit Tests

Unsere nächtes Webinar

Vergangene Webinare mit ähnlichem Thema

 

Webinar – ABAP® 7.51 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP 7.51 Releaseabhängige Änderungen

Umfrageergebnisse (in %)

Auf welchem ABAP Release arbeiten Sie hauptsächlich?

Verwenden Sie bereits SAP HANA als Primäre Datenbank?

Links

Blogs

Unsere nächtes Webinar

Vergangene Webinare mit ähnlichem Thema

 

DDL Source (CDS View) in ADT formatieren

Ab dem Release ABAP 7.51 und den ABAP Development Tools 2.68 gibt es eine Format-Funktion für DDL Source Codes. Es besteht die Möglichkeit sich sein eigenes Profil zu definieren, das  SAP Standardprofil oder ein Teamprofil je Entwicklungspaket zu verwenden.

Formatieren eines DDL Source Code

Das Formatieren eines DDL Source Codes kann wie folgt aufgerufen werden:

  • Shortcut SHIFT + F1
  • Menü bzw. Context Menü: Source Code – Format
  • Automatisch beim Speichern

 

 

 

 

 

 

 

 

 

Formatierungseinstellungen

Die Formatierungseinstellungen können in den Preferences unter ABAP Development – Editors – Source Code Editors – DDL Formatter angepasst werden. Es sind 3 unterschiedliche Gültigkeitsbereiche möglich.

  • SAP Standard Profil – SAP liefert eine nicht veränderbare Voreinstellung aus. Diese steht sofort zur Verfügung.
  • Eigenes Profil – Wenn das Standardprofil nicht ausreicht, kann ein eigenes Profil definiert werden. Eigene Profile können mit der Export- bzw. Import Funktion mit anderen Entwicklern und Systemen ausgetauscht werden.
  • Team Profil – Das SAP Standardprofil kann auf Basis von ABAP Paketen zentral am Server überschrieben werden. Dies ist eine Möglichkeit um unterschiedliche Profile je System oder Paket zu definieren. Technisch erfolgt die Steuerung der Profile im Backend durch eine Implementierung auf den BADI SDDIC_ADT_DDLS_PP_CONF.

Formatierungsdetails

Die Formatierung des DDL Source Codes kann sehr detailliert eingestellt und angepasst werden. Um ein einheitliches Aussehen innerhalb des Systems zu gewährleisten, sollte ein einheitlicher Standard definiert und angewendet werden. Die Verteilung dieser Variante kann entweder über Export/Import erfolgen oder über den oben erwähnten BADI zentral vorbelegt werden.

 

Webinar – ABAP® CDS Views

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „ABAP CDS Views“

Umfrageergebnisse:

Welches Webinar sollen wir im September wiederholen?

Da als einziger Vorschlag ebenfalls BOPF gewählt wurde, steht das Ergebnis wohl fest.

Wir werden das berücksichtigen, behalten uns aber vor, doch die Würfel zu befragen 😉

Nützliche Links

 

Interessante Blogs

Domi Bigl – ABAP CDS Views – 6 Schritte zum Verständnis – die Beispiele der LiveDemos im Webinar

Johann Fößleitner – ABAP CDS Access Control mit DCL

Jerry Wang – My CDS view self study tutorial

SDN Sammlung – CDS – Core Data Services

Horst Keller – CDS – One Concept, Two Flavors

Horst Keller – ABAP News for Release 7.50 – ABAP CDS Access Control

Horst Keller – ABAP News for Release 7.50 – Environment Information in ABAP CDS

Horst Keller – ABAP News for Release 7.50 – Annotations in ABAP CDS

Horst Keller – From Open SQL Joins to CDS Associations

Bilder

Es war noch nicht allzu heiß und der Ton ging noch 😉

 

Unsere nächsten Webinare

  • Freitag 29.09.2017 10:00 Uhr – voraussichtlich BOPF – Anmeldung
  • Freitag 24.11.2017 10:00 Uhr – SAP NetWeaver Gateway – Anmeldung

ABAP® CDS Views – 6 Schritte zum Verständnis

Einführung

Core Data Service Views – CDS Views – sind die neue Form der DDIC (SE11)-Datenbankview – aber absolut nicht vergleichbar!

CDS Views werden mit der Data Definition Language – DDL – in den Abap Development Tools definiert und können mit der Data Control Language – DCL – um Berechtigungen bzw. Zugriffsbeschränkungen erweitert werden.

Sie sind eine Möglichkeit des Code Push-Down im ABAP und zentraler Bestandteil des S/4 HANA ABAP-Programmiermodels (mehr Details gibt’s in den Folien zum Webinar).

Die hier gezeigten Beispiele wurden in unserem Webinar ABAP CDS Views verwendet und basieren auf Geschäftspartner-Beziehungen. Als System diente SAP NETWEAVER 750 SP1, bei niedrigeren Releases (ab 740 SP5/SP8) stehen manche Funktionen noch nicht zu Verfügung!

Die verwendeten Tabellen sind:

  • BUT000 GP: Allgemeine Daten I
  • BUT050 GP-Beziehungen/GP-Rollenfindungen: Allgemeine Daten
  • TBZ9A GP-Beziehungstypen: Texte
  • BUT100 GP: Rollen

Und hier noch die Datenbasis aus der Geschäftspartnerpflege:

 Schritt 1 – Ein erster CDS View mit JOIN

Definition eines CDS Views mittels DDL

Wir haben hier einem LEFT OUTER JOIN der BUT050 mit TBZ9A (Alias cattx) und den Viewfeldern Partner1, Partner1, Date_to, Reltyp, Date_from aus der Tabelle BUT050 und Spras, Bez50 und Bez50_2 aus der Tabelle TBZ9A. Als Ergebnis erhalten wir alle Beziehungen aus der BUT050 und den entsprechenden Texten zum Beziehungstyp aus der TBZ9A.

Das ist jetzt noch nicht wirklich aufregend und, abgesehen vom Syntax, auch nicht neu. Das schafft man auch mittels SE11-Datenbankview.

Wir wollen dieses einfache Beispiel aber nutzen, um die verschiedenen Bereiche, Befehle und Tools genauer zu beschreiben.

DDL Bereiche

Objekte und Namen

CDS Entity Name (Datenquellenobjekt ): Die CDS Entity wird als Datenquelle z.B. im ABAP Open SQL Statement verwendet.
CDS Datenbank View (generierter SE11 Datenbankview): Für jede Entity wird ein SE11 Datenbankview mit entsprechendem Namen generiert.
CDS Viewname (Sourcecode): Name des DDL Sourcecode Objekt.

Generierter DDL View in der SE11:

Generierter SE11 DDL View

Annotiations

Annotations bieten die Möglichkeit Eigenschaften, Einstellungen und Metadaten für einem CDS View zu definieren. Diese Werte werden z.B. von der ABAP Runtime oder diversen Frameworks (u.a. Gateway/OData Service, BOPF,…) ausgelesen und steuern deren Verhalten bzw. die Ausgabe.

Annotations gelten entweder für den gesamten View – View Annotations:

Oder für einzelne Elemente/Felder – Element Annotations:

Natürlich gibt’s auch Code Completion:

Annotations zu CDS Entitäten bzw. deren Feldern können mit der API Klasse CL_DD_DDL_ANNOTATION_SERVICE ausgelesen werden. Es wird auch die Möglichkeit kundeneigener Annotations geben (derzeit noch nicht offiziell unterstützt).

Weitere Details gibt’s hier:

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_view_entity_annotations.htm

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_element_annotation.htm

https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_parameter_annotations.htm

SELECT Liste

Die Select Liste (Datenbankfelder, Literale, Parameter, Funktionen, Systemfelder,…) kann entweder VOR oder NACH den Datenquelle angegeben werden:

Datenquellen

Als Datenquellen können Datenbanktabellen, SE11-Datenbankviews und andere CDS Entitäten angegeben werden. Für ON-Bedingungen von Joins gelten ähnliche Regeln, wie im Open SQL. Vor allem ist auch hier noch kein CAST möglich.

Details findet man hier: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_joined_data_source.htm

Datenvorschau

Die Ergebnisse eines CDS Views kann in den ADT über die Data Preview angezeigt werden. Der Aufruf erfolgt über das Kontextmenü im DDL Code oder im Project Explorer oder direkt mittels F8:

Die Ausgabe der Data Preview:

Über Add filter kann, ähnlich der SE16, auf einzelne Feldwerte eingeschränkt werden:

In der SQL Console kann der abgesetzte SQL SELECT Befehl angezeigt und angepasst werden:

Cadaxo SQL Cockpit

Um den ABAP Open SQL Aufruf bzw. Syntax zu zeigen, wird das Cadaxo SQL Cockpit verwendet. Die angeführten SELECT Statement können genauso in ABAP Coding verwendet werden. Einzig der Befehl

muss an den entsprechenden Stellen eingefügt werden.

Cadaxo SQL Cockpit

Das entspricht dem ABAP Befehl:

http://www.cadaxo.com/produkte/cadaxo-sql-cockpit/

Schritt 2 – Eingebaute Funktionen

Die CDS Views biete eine ganze Fülle von eingebauten Funktionen, mit denen z.B. mathematische Funktionen und Stringopperationen ausgeführt, Währungs- und Mengeneinheiten umgerechnet, Zeit- und Datumsangaben geprüft oder Datumsintervalle berechnet werden können.

Eine vollständige Liste gibt’s hier: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_f1_builtin_functions.htm

Hier wird die eingebaute Funktion DATS_DAYS_BETWEEN verwendet, um die Gültigkeit jeder Beziehung in Tagen zu berechen, und als Viewfeld Period bereitzustellen:

Im Ergebnis sehen wir die unterschiedlich langen Gültigkeitsbereiche in der Spalte PERIOD.

Schritt 3 – Views mit Parametern

Für CDS Views können Parameter definiert werden, die beim SELECT übergeben bzw. befüllt werden müssen:

Der SELECT wurde um zwei JOINs auf die BUT000 erweitert, um Details zu den Partner zu ermitteln. Durch die beiden CASE Anweisungen werden auch Name_last bzw Name_org1 aus dem entsprechenden BUT000-Eintrag geliefert (natürlich sollte hier das Feld BUT000-TYPE zur Fallunterscheidung verwendet werden, zur Demonstration der Funktionalität reicht uns aber die Prüfung <> “).

Der interessante Teil ist aber die Definition des Parameters p_langu mit dem Datentype abap.lang (entspricht dem ABAP Dictionary Type LANG). Der Parameterwert wird in der ON-Bedingung des JOINs verwendnet, um die Einträge auf die gewünschte Sprache einzuschränken. Er kann aber genauso in die WHERE-Bedingung  geschrieben werden. Die beiden Schreibweisen $parameters.p_langu und :p_langu sind gleichwertig und austauschbar.

Beim Aufruf der Data Preview erscheint jetzt zuerst ein Popup für die Parametereingabe:

Die Ergebniszeilen werden entsprechend eingeschränkt und auch die CASE Anweisung arbeitet richtig:

Der Open SQL Aufruf erfolgt ähnliche einem Methodenaufruf:

Als Typen können DDIC-Datenelemente oder vordefinierte Datentypen verwendet werden: https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/index.htm?file=abencds_typing.htm

Die  Code Completion unterstützt auch hier:

Über spezielle Parameter Annotations, die Environment Annotationen, können Systemfelder (z.B. SY-UNAME) als Defaultwerte für Parameter definiert werden. Wird der SELECT im ABAP ausgeführt, kann der Parameter weggelassen werden und wird auf den aktuellen Systemwert gesetzt:

Derzeit ist das für diese SY-Felder möglich:

sy-mandt#CLIENT
sy-datum#SYSTEM_DATE
sy-uzeit#SYSTEM_TIME
sy-langu#SYSTEM_LANGUAGE
sy-uname#USER

Das ist zwar nett, kann aber auch über eine Where-Bedingung erreicht werden. Wirklich lustig werden Parameter aber, wenn man mit ihnen Logik in die CDS Views bring:

Wir legen einen weiteren Parameter p_name_first an und verwenden ihn in einer CASE Anweisung. Wird der Parameter mit dem Wert ‚F‘ übergeben, soll für Personen der Vorname (name_first) geliefert werden. Bei jedem anderen Wert kommt wie bisher der Nachname (name_last):

Die Ergebnislisten der beiden Select enthalten die erwarteten Namen:

Schritt 4 – Associations

Associations sind am einfachsten als „JOINs On Demand“ zu beschreiben. Durch Associations können Abhängigkeiten zwischen CDS View Entitäten (also Datenbanktabellen) abgebildet und damit komplexe Datenmodelle definiert werden. Datenbankseitig entsprechen sie JOINs. Die JOIN Bedingung wird aber nur ausgeführt, wenn wirklich Daten über die Associations gelesen werden müssen, also ein Feld aus der Association in der Select-Liste oder Where-Klausel verwendet wird.

Zunächst modellieren wir unsere JOINs als Associations und definieren die entsprechende Kardinalität. In unserem Fall [1..1] für die Partner Beziehung und [0..*] für die Text Beziehung. Die Kardinalität dient derzeit noch hauptsächlich rein zur Abbildung des Datenmodells und wird durch die Syntaxprüfung nur teilweise berücksichtigt. Eine Ausnahme ist die Verwendung in der WHERE-Klausel, wo als Kardinalität nur [0..1] oder [1..1] erlaubt ist.

Wir verwenden hier einige Felder aus der Association _cattx mit einem FILTER auf das Feld Spras. Damit werden nur Einträge geliefert, die auch dem Filter entsprechen („Where-Klausel“). Die Texte zum Beziehungstyp werden einerseits zu übergebenen Sprache im Parameter p_langu gelesen, aber zusätzlich auch für Deutsch. Wir sehen hier auch eine Warnung bezüglich der Kardinalität ([0..*] für TBZ9A), können den View aber trotzdem ausführen:

Auch im ABAP:

Interessanterweise erhalten wir aber mehr Zeilen als über die JOIN-Verknüpfung in Schritt 3!?!

Das liegt daran, dass Associations standardmäßig als LEFT OUTER JOIN gebildet werden. Das kann aber übersteuert werden:

Über die Angabe inner in den Filterwerten, mit dem Zusatz where, wird nun ein INNER JOIN generiert. Die ebenfalls neue Anweisung 1: setzt die Kardinalität für diese Verwendung auf [0..1]. Die Warnung wird nicht mehr angezeigt:

Das Ergebnis ist wieder gleich der JOIN Variante:

Associations veröffentlichen – Pfadzugriffe

Wer sich bisher gewundert hat, warum in der SELECT-Liste der Viewdefintion die beiden Associations _partner1 und _partner2 (Alisasnamen für Associations sollten mit ‚_‘ beginnen) angegeben sind, in der Ergebnisliste aber nicht wirklich aufscheinen: Damit wird Association nur veröffentlicht. Sie kann also „von außen“ durch einen Aufrufer verwendet werden. Der Zugriff auf Associations mittels Open SQL erfolgt über Pfade:

Hier wird über die Entität Zwb_But050_Txt_Asso_E selektiert, es werden aber nur Felder der Association _partner2 abgerufen, also Felder aus der Datenbanktabelle BUT000. Im SQL Trace (Transaktion ST05) ist der abgesetzte SELECT Befehl ersichtlich:

Es wird also zur Laufzeit ein JOIN mit der ON-Bedingung der Association gebildet.

Natürlich kann man auch nur einzelne Felder über Pfadausdrücke ansprechen:

Oder in der Where-Klausel verwenden:

Der Zugriff auf nicht veröffentlichte Associationen von außen ist nicht möglich:

Compare Filter

Wir haben bisher immer die View-Annotation

verwendet, diese aber noch nicht erklärt. Um zu verstehen, was diese macht, müssen wir uns den generierten, technischen SQL Befehl anschauen. Das ist über das Kontextmenü möglich:

Wir erkennen, dass für die Association _cattx (technischer Alias A0) nur eine JOIN Verknüpfung angelegt wird.

Setzen wir den Annotationwert auf false und betrachten den technischen SQL Befehl erneut:

Jetzt wird für jedes Association-Feld eine JOIN-Bedingung definiert!

Kardinalitätsfehler in der Where-Klausel

Für das Beispiel wurde auch die Assiocation _cattx nach außen veröffentlicht.

Schritt 5 – Viewerweiterungen

SAP bietet auch die Möglichkeit CDS Views modifikationsfrei zu erweitern. Dazu kann über einen Extend View eine Entität um zusätzliche Assiciations und Felder erweitert werden:

Die Entität Zwb_But050_Txt_Asso_E liefert jetzt auch das Feld Relnr der Tabelle BUT050 und es gibt die Association _roles:

Die Data Preview bietet auch die Möglichkeit auf Assiocaitions zuzugreifen:

Daten der hinzugefügten Association _roles für eine Ergebniszeile der Entität.

Und auch im ABAP:

Schritt 6 – einfach ausprobieren

 CDS Views erscheinen auf den ersten Blick vielleicht etwas fremd und komplex. Aber jeder ABAP Entwickler, der bereits über ein SELECT * FROM table hinausgekommen ist und etwas Erfahrung mit ADT hat, findet sich sehr schnell zurecht! Einfach mal ein paar Beispiele ausprobieren und die Templates zum Anlegen verwendet – dann wird man die CDS Views kennen und lieben lernen! Zumindest wars bei mir so 😉

Und spätestens mit S/4 HANA kommen wir an CDS Views nicht mehr vorbei…

ABAP® CDS Access Control mit DCL

Appendix

Mit dem Cadaxo SQL Coskpit ist es möglich die DDL Source auch im SAP GUI anzuzeigen, ohne Eclipse starten zu müssen:

ADT Templates

In den ADT können neue DDL Sourcen angelegt werden und es stehen einige Templates bereit:

<Screens skipped…>

Webinar – Der SAP® Abkürzungsdschungel

 

Vielen Dank für Ihre Teilnahme an unserem Webinar!

 

Unterlagen/Links zum Webinar „Der SAP Abkürzungsdschungel – Was steckt hinter HCP, S/4, C4C, …“

 
 

Unsere nächsten Webinare

 

Juli

  • Saville – Cadaxo bringt Fiori auf den nächsten Level (Anmeldelink folgt)

August

 
 

Nützliche Links: