Quantcast
Channel: Cadaxo GmbH
Viewing all 118 articles
Browse latest View live

Webinar – Boost Your ABAP

$
0
0

 

Vielen Dank für Ihre Teilnahme an unserem Webinar!

 

Unterlagen/Links zum Webinar „Boost Your ABAP – Tipps & Tricks für performance-optimierte Programmierung“

Unser nächstes Webinar

Wichtige Links aus dem Themengebiet „Skills“:

 

Wichtige Links aus dem Themengebiet „Optimize“:

The post Webinar – Boost Your ABAP appeared first on Cadaxo GmbH.


Webinar – Der SAP Abkürzungsdschungel

$
0
0

 

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:

 

The post Webinar – Der SAP Abkürzungsdschungel appeared first on Cadaxo GmbH.

Cadaxo SQL Cockpit 3.1

$
0
0

Das Sommer-Release des Cadaxo SQL Cockpits ist da! Bei der neuen 3.1 Version wurde der Fokus ganz klar auf Bug-Fixing gelegt, um den komplett neuen Parser, der alle neuen Open SQL Features am ABAP 7.40 unterstützt, noch stabiler zu machen.

Der Report Generator wurden ebenfalls auf Vordermann gebracht. Es können nun alle SQL Statements, die die neue Open SQL Syntax enthalten oder Zugriff auf CDS Views bieten, auf Knopfdruck in ein gewöhnlichen ABAP Report übernommen werden.

 

 

Neue Features

 

Auch diese neuen Features sind Bestandteil des brandneuen Cockpit Releases 3.1

 

Element Info

Die Element Info sorgt für eine noch bessere Usability im SQL Cockpit und lässt Sie noch schneller Ihre SQL Statements gestalten. Sie können sich nun alle notwendigen Informationen zu einer DB-Tabelle anzeigen lassen, indem Sie nur mit dem Mauszeiger über den Tabellen-Namen fahren.

Sie sehen alle wichtigen Informationen, wie Spaltennamen und die dazugehörige Beschreibung auf einen Blick. Mit Doppelklick oder Drag&Drop können Sie die Spaltennamen einfach in den Editor-Bereich des SQL Cockpits übernehmen uns sparen so wertvolle Zeit, indem Sie nicht selbt die Spaltennamen suchen und eintippen müssen.

Dieses kurze Video zeigt das neue Feature auf einen Blick: Element Info Video

 

Vergleichen von Ergebnislisten

Ab sofort können nun nicht nur gleiche Ergebnislisten miteinander verglichen werden, sondern auch Listen, die nicht den komplett gleichen Aufbau haben. Es müssen lediglich die Schlüsselfelder übereinstimmen. Alle namensgleichen Spalten werden gegenübergestellt und die Differenzen aufbereitet dargestellt.

Dabei können auch gespeicherte Listen, die einen unaktuellen Datenbestand zeigen, mit aktuell ausgewerteten Ergebnislisten verglichen werden.

Das Vergleichstool des SQL Cockpits bietet zudem eine komfortable Oberfläche mit vielen Funktionen, um die Differenzen des Vergleichs besser auswerten zu können.

 

 

The post Cadaxo SQL Cockpit 3.1 appeared first on Cadaxo GmbH.

Webinar – Clean Code in ABAP

Webinar – TDD mit ABAP Units

$
0
0

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „TDD mit ABAP Units“

Umfrageergebnisse:

Verwenden Sie ABAP Unit Tests?

umfrage abap untis

Interessante Auszüge aus dem Chat

Frage: Kann man die Unit Tests soweit integrieren, dass ein Transport nur möglich ist wenn keine Fehler auftreten?
Antwort: Ja sicher, über CI (Code Inspector) Prüfungen bei der Freigabe

Info: So ein Update zum falschen Zeitpunkt ist einem Kollegen kurz vor einer Kundenpräsentation unlängst auch passiert. (Anm. Föß: Danke das hilft!)

Info: Ich denke, der Prozess des Übergangs ist schwierig und ein eigenes Webinar wert. (Anm. Föß: Stimmt vollkommen, bereits während der Vorbereitung hab ich mir die gleichen Gedanken gemacht. Ich denke ich greife genau das Thema nochmals auf)

Frage: „Gibt es eigentlich Kennzahlen mit denen man sinnvoll die Einführung von Unit Tests darstellen kann? (Anm. Föß: Ja gibt’s (von Google selber z.B. ), aber leider hab ich von/über SAP da nichts passendes gefunden)

Info: Martin Fowler hat unlängst in einem Blog geschrieben wie schwer es ist als erster mit Unit Tests anzufangen. Da ist es oft notwendig kreativ Lösungen zu finden. (Anm. Föß: Page von Martin Fowler: http://martinfowler.com )

Info: Interfaces ist eine Methode für Datenbankzugriffe, Paul Hardy nennt Unterklassen. Ich nutze manchmal einfach nur If-Statements dafür. (Anm. Föß: Stimmt, ist eine Lösung. In diesem Zusammenhang ein Hinweis auf 7.50 und auf die sogenannten Test seams bzw. Test injections: http://help.sap.com/abapdocu_750/en/index.htm?file=abennews-750-abap_unit.htm )

Info: Working Effectively with Legacy Code““ beschreibt sehr schön wie Tests nachträglich eingeführt werden können. (Anm. Föß: ISBN-13: 978-0131177055)

Bücher:

Nützliche Links

Twitter User denen man folgen sollte:

Bild

Man beachte den rechten Laptop, der war 45 Minuten mit Updates beschäftigt!

20160923_102511

Unsere nächsten Webinare

The post Webinar – TDD mit ABAP Units appeared first on Cadaxo GmbH.

Webinar – ABAP 7.50 Releaseabhängige Änderungen

$
0
0

Webinar – SAP BOPF

$
0
0

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zu unserem Webinar „SAP BOPF

SAP Entwickler 2.0

$
0
0

Lange Zeit hat sich die Welt eines ABAP Entwicklers nicht wesentlich geändert. Da wurde mal ein Report erstellt, dort ein Funktionsbaustein. Manchmal wurde ein Userexit implementiert und selten auch einmal eine ganze Dynpro Transaktion. Ja es war sogar lange Zeit möglich die objektorientierte Welt mit geringem Aufwand zu umschiffen.

Die Zeiten sind nun definitiv vorbei!

Gerade in den letzten Jahren hat die Programmiersprache ABAP eine enorme Weiterentwicklung erlebt. Insbesondere mit ABAP 7.40 und ABAP 7.50 wurden eine ganze Reihe moderner Konzepte aus anderen Programmiersprachen in ABAP übernommen. Ergänzend dazu stehen neue Tools, Frameworks und Entwicklungsumgebungen einem SAP Entwickler zur Verfügung.

S/4 HANA Programmiermodell

Bei der SAP TechEd 2016 in Las Vegas wurde erstmals vom neuen S/4 HANA Programmiermodell gesprochen. Das Programmiermodell besteht aus mehren Schichten und vereint die gängigen Technologien eines SAP Entwicklers:

Modernes ABAP

Wie weiter oben erwähnt, wurde und wird ABAP durch die SAP kontinuierlich weiterentwickelt. Es gibt eine große Anzahl von Büchern, Kursen, Blogeinträgen, … die sich mit modernen ABAP Themen beschäftigen, deshalb erspare ich mir hier eine exakte Aufzählung. Nachfolgend eine Auflistung von Themen die für mich unter modernes ABAP fallen und jeder Entwickler im SAP kennen sollte:

  • Objektorientiertes Design
  • Open SQL Expressions
  • String Expressions
  • Table Expressions
  • Regular Expressions
  • Class Based Exceptions
  • Enhancement Framework
  • CDS Views
  • ABAP Shared Objects
  • ABAP Push Channels, ABAP Message Channels

Unabhängig von ABAP selber sollte sich ein Entwickler zumindest noch mit folgenden Themen beschäftigen:

  • Clean Code
  • Unit Tests & TDD
  • Design Patterns

Weiterführende Informationen

Title Bereich Details
ABAP 7.50 Releasenotes Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-abap-7-50-releaseabhaengige-aenderungen/
Clean Code in ABAP Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-clean-code-abap/
Boost Your ABAP Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-boost-abap/
SDN Community ABAP SDN http://www.sap.com/community/topic/abap.html
SAP Press SAP Press Bücher https://www.sap-press.com/programming

ABAP Development Tools (ADT) & SAP Web IDE

ADT (=ABAP for Eclipse) ist SAP’s state-of-the-art IDE für ABAP. Obwohl das ADT nicht wirklich neu ist, entwickelt die überwiegende Mehrheit der ABAP Entwickler nach wie vor ausschließlich in der SE80.

Und das, obwohl Entwicklungen mit ADT meist einfacher und schneller umgesetzt werden können. ADT bietet in der Handhabung generell viele Vorteile, aber ein wichtiges Featureset sind die Refactoring Funktionen, welche gerade im Bereich der agilen Software Entwicklung wesentlicher Bestandteil sind.

Einzelne Entwicklungsobjekte wie z.B. die CDS Views können bisher ausschließlich mit ADT bearbeitet werden. Andere Objekte wie z.B. BOPF Objekte bieten in ADT wesentlich intuitivere Modellierungsmöglichkeiten.

Ein professioneller ABAP Entwickler sollte sowohl in der ABAP Workbench (SE80) als auch im ADT zu Hause sein, um je nach Aufgabenstellung das passende Entwicklungstool zu wählen.

Für die Erstellung von SAPUI5 bzw. Fiori Anwendungen hat SAP ergänzend zu den ABAP Development Tools die cloudbasierte SAP Web IDE zur Verfügung gestellt.

Weiterführende Informationen

Title Bereich Details
Webinar – ABAP Entwicklung in Eclipse & SAP Web IDE Einführung Cadaxo Webinar http://www.cadaxo.com/uncategorized/webinar-abap-entwicklung-eclipse-sap-web-ide-einfuehrung/
ABAP Development User Guide help.sap.com http://help.sap.com/saphelp_nw75/helpdata/en/4e/c0ca886e391014adc9fffe4e204223/frameset.htm
ABAP Development Tools Eclipse help.sap.com http://help.sap.com/saphelp_nw74/helpdata/en/a3/314a7fd9384ce8a40eff2d3b144628/frameset.htm
ABAP Development Tools Tutorials SDN Blog https://blogs.sap.com/2012/09/18/abap-development-tools-tutorials-learn-how-to-use-abap-in-eclipse/
Get Started with the ABAP Development Tools SDN Blog https://blogs.sap.com/2012/06/19/get-started-with-the-abap-development-tools-for-sap-netweaver/
What is SAP Web IDE developer.sap.com http://www.sap.com/developer/topics/sap-webide.html
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2
ABAP-Entwicklung in Eclipse SAP Press Book ISBN 978-3-8362-3040-7

ABAP Units & Test Driven Development

Als Entwickler ist es uns natürlich ein Anliegen, fehlerfreie Software zu erstellen. Traditionell geschehen Unit Tests in SAP oft mit eigens erstellten Testprogrammen oder einer Testausführung von Klassen/Methoden bzw. Funktionsbausteinen. Also völlig unstrukturiert, undokumentiert und schwer reproduzierbar.

Mit den ABAP Units steht jedoch auch im ABAP ein Test-Framework zur automatisierten Ausführung und Analyse von Unit Tests zur Verfügung.

Der Einsatz von ABAP Unit Tests reduziert die Hemmschwelle eines Entwicklers produktives Coding zu optimieren. Eine Testausführung würde ihm sofort direktes Feedback geben ob trotz der Optimierung das Coding weiterhin einwandfrei funktioniert.

ABAP Units verfügen über eine enge Integration in andere Tools wie z.B. dem Code Inspector bzw. ATC.

Die Steigerungsform von Unit Tests wäre Test Driven Development. Vom Ansatz her ist TDD genial, in der ABAP Community wird darüber kontrovers diskutiert.

Weiterführende Informationen

Title Bereich Details
TDD mit ABAP Units Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-tdd-mit-abap-units/
ABAP Unit help.sap.com http://help.sap.com/abapdocu_750/de/index.htm?file=ABENabap_unit.htm

Business Object Processing Framework (SAP BOPF)

Aktuell (noch) relativ unbekannt ist das sogenannte SAP Business Object Processing Framework. SAP BOPF ist ein auf ABAP basierendes Framework zum Modellieren und Entwickeln von Geschäftsobjekten. Bisher gab es in SAP Systemen (Ausnahme SAP CRM mit BOL/GENIL) nichts Ähnliches, alles musste „zu Fuß“ ausprogrammiert werden.

SAP BOPF nimmt einem Entwickler zeitraubende und meist auch langweilige Implementierungsaufgaben ab und ermöglicht einem Entwickler sich auf die wesentlichen Businessanforderungen zu konzentrieren.

Die größten Vorteile von SAP BOPF wären:

  • Klare Trennung von UI und Business Logik
  • Ermöglicht verteilte Entwicklung durch mehrere Entwickler
  • Beschleunigt den Entwicklungsprozess enorm
  • Bereits viele Verwender (Gateway, FPM, BRFplus, … ) vorhanden
  • Einfache Integration in Eigentwicklungen

Weiterführende Informationen

Title Bereich Details
SAP BOPF Cadaxo Webinar http://www.cadaxo.com/high-class-development/webinar-sap-bopf/
BOPF Modelling in ADT SDN Blog https://blogs.sap.com/2014/05/09/bopf-modelling-in-eclipse
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2

Fiori/SAPUI5 & Floorplan Manager/Web Dynpro for ABAP

User Interfaces haben bei der SAP historisch einen schlechten Ruf. Lange Zeit mussten sich Anwender mit veralteten SAP Gui Anwendungen abmühen. Längst bietet SAP alternative Technologien für die Realisierung moderner User Interfaces.

SAPUI5 basiert technisch auf etablierten Webstandards (Javascript, HTML5, …) und liefert die technische Grundlage für moderne Fiori Anwendungen. SAPUI5 / Fiori ist DIE UI Strategie der SAP, sprich zukünftige Oberflächen in den SAP Systemen (OnPremise oder Cloud) werden – Stand Jänner 2017 – in Form von SAPUI5 / Fiori realisiert.

Web Dynpro for ABAP (WDA) ist (zumindest war) bereits seit vielen Jahren quasi der Standard für die Erstellung von transaktionalen Anwendungen in einem SAP System. Um die Realisierung von Web Dynpro Anwendungen zu beschleunigen und zu standardisieren wurde der darauf aufbauende Floorplan Manager (FPM) entwickelt. Web Dynpro for ABAP bzw. der Floorplan Manager richten sich eher an Power User, an interne Mitarbeiter eines Unternehmens.

Ein professioneller ABAP Entwickler sollte in jedem Fall beide Technologien kennen und einsetzen können.

Weiterführende Informationen

Title Bereich Details
What is SAPUI5 developer.sap.com http://www.sap.com/developer/topics/ui5.html
User Interface Developer developer.sap.com http://www.sap.com/developer/topics/ui-development.html
Web Dynpro ABAP and Floorplan Manager Community developer.sap.com http://www.sap.com/community/topic/web-dynpro-abap-and-floorplan-manager.html
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2
SAPUI5 Das umfassende Handbuch SAP Press Book ISBN 978-3-8362-4456-5

SAP Gateway (OData)

Im Jahr 2011 hat SAP SAP Gateway auf den Markt gebracht. SAP Gateway öffnet ABAP Systeme um eine standardisierte und zentralisierte Schnittstelle mit der Außenwelt.

Technisch setzt SAP Gateway auf verbreitete Standards wie REST, Atom und OData wodurch die Kommunikation mit anderen Systemen die ebenfalls diese Standards nutzen denkbar einfach realisiert werden kann. SAPUI5 bzw. Fiori Anwendungen nutzen ebenfalls SAP Gateway für die Kommunikation mit den Backendsystemen.

Weiterführende Informationen

Title Bereich Details
SAP Gateway Community developer.sap.com http://www.sap.com/community/topic/gateway.html
SAP Gateway Developer Guide help.sap.com https://help.sap.com/saphelp_gateway20sp10/helpdata/en/56/d0cc05b564411e841141f68294e29f/content.htm
SAP Gateway und OData SAP Press Book ISBN 978-3-8362-4019-2

CDS Views

Die CDS Views zählen für mich zu den innovativsten ABAP Neuheiten der letzten Jahre. Durch die regelmäßigen Funktionserweiterungen handelt es sich hier nicht mehr nur um eine neue Form von Datenbank Views.

Durch Annotations können CDS Views um weitere technische und semantische Eigenschaften ergänzt werden. So können beispielsweise seit ABAP 7.50 Gateway oder BOPF Objekte generiert werden.

Ebenfalls ab 7.50 können implizite Berechtigungsprüfungen mit der sogenannten Data Control Language (DCL) abgebildet werden.

Weiterführende Informationen

Title Bereich Details
CDS Views help.sap.com http://help.sap.com/abapdocu_750/en/abencds.htm
CDS Annotations 7.50 help.sap.com http://help.sap.com/abapdocu_750/en/abencds_f1_view_entity_annotations.htm
CDS Annotations 7.51 help.sap.com http://help.sap.com/abapdocu_751/en/index.htm?file=abencds_annotations_abap.htm
CDS Views SDN Blog https://blogs.sap.com/2015/07/20/cds-one-model-two-flavors
ABAP to the Future SAP Press Book ISBN 978-1-4932-1411-2

The post SAP Entwickler 2.0 appeared first on Cadaxo GmbH.


Beispiele zur Verwendung von ABAP CONCATENATE

$
0
0

Der ABAP Befehl CONCATENATE wird sehr oft benötigt. In diesem kurzen Blog zeige ich anhand einiger Beispiele wie Zeichenketten im ABAP „concatendated“ werden können. In den Beispielen finden sich auch die „moderneren“ Formen mit && bzw. der Stringfunktion concat_lines_of. Ansonsten ist, denke ich. das Codingbeispiel eigentlich selbsterklärend und bedarf keiner weiteren Worte.

 

REPORT zyfoes01.

DATA l_string_1 TYPE string VALUE 'String 1'.
DATA l_string_2 TYPE string VALUE 'String 2'.
DATA l_hex1 TYPE x LENGTH 1 VALUE 01.
DATA l_hex2 TYPE x LENGTH 1 VALUE 02.
DATA l_hex_result TYPE x LENGTH 2.
DATA l_char_1 TYPE c LENGTH 10 VALUE 'Char 1'.
DATA l_char_2 TYPE c LENGTH 10 VALUE 'Char 2'.
DATA l_string_result TYPE string.

DATA lt_table LIKE TABLE OF l_string_1.

APPEND 'Row1' TO lt_table.
APPEND 'Row2' TO lt_table.
APPEND 'Row3' TO lt_table.

START-OF-SELECTION.

* concatenate strings
  CONCATENATE l_string_1 l_string_2 INTO l_string_result.
  WRITE: / 'Example 1 :', l_string_result.

* concatenate strings, respecting blanks.
  CONCATENATE l_string_1 l_string_2 INTO l_string_result RESPECTING BLANKS.
  WRITE: / 'Example 2 :', l_string_result.

* concatenate strings, separated by character
  CONCATENATE l_string_1 l_string_2 INTO l_string_result SEPARATED BY ';'.
  WRITE: / 'Example 3 :',l_string_result.

* concatenate char
  CONCATENATE l_char_1 l_char_2 INTO l_string_result.
  WRITE: / 'Example 4 :',l_string_result.

* concatenate char, respecting blanks
  CONCATENATE l_char_1 l_char_2 INTO l_string_result RESPECTING BLANKS.
  WRITE: / 'Example 5 :', l_string_result.

* concatenate char, separated by character
  CONCATENATE l_char_1 l_char_2 INTO l_string_result SEPARATED BY ';'.
  WRITE: / 'Example 6 :', l_string_result.

* concatenate lines of a table
  CONCATENATE LINES OF lt_table INTO l_string_result.
  WRITE: / 'Example 7 :', l_string_result.

* concatenate lines of a table separated by character
  CONCATENATE LINES OF lt_table INTO l_string_result SEPARATED BY ';'.
  WRITE: / 'Example 8 :', l_string_result.

* concatenate hex, in BYTE MODE
  CONCATENATE l_hex1 l_hex2 INTO l_hex_result IN BYTE MODE.
  WRITE: / 'Example 9 :', l_hex_result.

* chaining operator &&
  l_string_result = l_char_1 && l_char_2 && l_string_1 && l_string_2.
  WRITE: / 'Example 10:', l_string_result.

* concatenation function - concat_lines_of
  l_string_result = concat_lines_of( table = lt_table sep = ';' ).
  WRITE: / 'Example 11:', l_string_result.

 

The post Beispiele zur Verwendung von ABAP CONCATENATE appeared first on Cadaxo GmbH.

SAP Hana – das SQL Cockpit kann helfen

$
0
0

In den vergangenen Jahren gab es in der Software Architektur die Bestrebungen, alles zu abstrahieren. Die tatsächlichen Zugriffe auf die Datenbank wurden dadurch immer weiter in den Hintergrund gedrängt.

Das hatte den Vorteil, dass es für Entwickler leichter wurde, da die relevanten Daten schön in Objekten vorhanden waren. Auf der anderen Seite haben die Entwickler damit den Zugang zu den Daten aus den Augen verloren. Dies zeigt sich vor allem in performancekritischen Applikationen, da dort viele inperformante und oft auch zu viele unnötige Datenbankzugriffe vorhanden waren, und dies sehr schnell spürbar wurde.

SAP HANA verhilft mit seiner in Memory Technologie nun den Datenbankzugängen zu einer neuen Renaissance. Plötzlich sind SAP Berater gefordert, die Performance bereits an der Quelle (der Datenbank) zu optimieren.

Wenn man nun in einem HANA Implementierungsprojekt einen Prozess aus einem System (z.B. SAP ERP) in die in Memory Technologie verlagern möchte, dann muss man zunächst diesen Prozess und die relevanten Daten analysieren. Danach werden die Daten in das HANA System geladen und dort die Zugriffe optimiert. Für den ersten Teil (die Analyse) gibt es nur die üblichen SAP Standardmittel (die meisten Berater nehmen dann die SE16), um die Daten auszuwerten. Danach werden sie transferiert und im HANA System gibt es dann externe Tools (also schon von SAP, aber nicht innerhalb des SAP Systems, sondern als Plugin in der Java Entwicklungsumgebung Eclipse), um die SQL Zugriffe zu optimieren.

Genau bei diesen beiden Prozesschritten kann das Cadaxo SQL Cockpit aber wichtige Dienste leisten, um den Einführungsprozess wesentlich zu beschleunigen. Zuerst können die Daten bereits im Quellsystem mit SQL Syntax analysiert werden. Das ermöglicht bereits eine erste Abschätzung der Optimierungspotenziale. Und quasi als „Abfallprodukt“ sind für die SQL Optimierungen die Statements schon vorbereitet.

Der Medienbruch ist auch nicht zu unterschätzen. Für SAP Berater, die seit Jahren alle Tätigkeiten innerhalb eines Systems (SAP NetWeaver) durchführen konnten, und ohne externe Tools ausgekommen sind, ist es viel einfacher im SAP System die Daten zu analysieren, als zunächst ein externes Tool zu installieren, die Zugriffe (Security) auf das System einzurichten, um dann die Analysen durchzuführen. Auch die tiefe Integration (z..B. konsequente Vorwärtsnavigation) innerhalb eines SAP Systems verhilft einem Berater zu wesentlich schnelleren Ergebnissen, als dies durch externe Zugriffe möglich wäre.

Aus diesem Grund sind interne Applikationen externen vorzuziehen. Dies gilt zumindest bei SAP Systemen immer!  Somit wäre das SQL Cockpit (intern) für alle SAP HANA Projekte ein wesentlicher Beschleunigungsfaktor.

The post SAP Hana – das SQL Cockpit kann helfen appeared first on Cadaxo GmbH.

Cadaxo SQL Cockpit 3.2 – Releaseinfos

$
0
0

Für die Version 3.2 unseres SQL Cockpits haben wir neben einigen kleineren Verbesserungen und Korrekturen ein paar sehr interessante Features eingebaut bzw. erweitert.

Vergleichen von Ergebnislisten

Der Vergleich von Ergebnislisten wurde komplett runderneuert. Nun können beliebige Ergebnislisten miteinander verglichen werden. Über eine komfortable Mappingoberfläche können die zu vergleichenden Felder verlinkt werden. Es spielt dabei keine Rolle, ob es sich dabei um neu erstellte Ergebnislisten oder um gespeicherte Listen handelt.

SQL Cockpit 3.2 - Comparing Result Lists

Tipp: Gespeicherte Listen können exportiert bzw. importiert werden. Dadurch ist ein systemübergreifender Ergebnislistenvergleich möglich!

Open SQL Features 7.50

SAP hat mit 7.40 SP5 / SP8 bzw. 7.50 umfangreiche Erweiterungen für den ABAP Open SQL Syntax aufgenommen. Das Cadaxo SQL Cockpit 3.2 unterstützt alle diese neuen SQL Features.

Nachfolgend eine Aufstellung der wichtigsten ABAP Open SQL Features:

  • Open SQL Expressions
  • Open SQL Functions
  • Host Expressions
  • Unions
  • Zugriff auf CDS Views
  • Pfadausdrücke für Assoziationen von CDS-Views
  • CDS-Views mit Eingabeparametern

Integration ADT

Über die Usersettings kann sich nun jeder Anwender einstellen, ob die Vorwärtsnavigation bei einem Doppelklick auf eine Tabelle wie bisher innerhalb des SAP Gui oder ob die Anzeige mit den ADT (ABAP Developer Tools = Eclipse!) erfolgen soll.

Beispielsweise können CDS Views nur mit den ABAP Developer Tools gepflegt werden. Innerhalb von SAP Gui ist lediglich eine Anzeige möglich.

Elementinfo für CDS Views

Die Anzeige der CDS Views wurde in die Elementinfo aufgenommen. Die Element Info sorgt für eine bessere Usability im SQL Cockpit. Notwendige Informationen zu einer DB-Tabelle werden einfach angezeigt, wenn man einen Moment mit dem Mauszeiger über einen Tabellen- oder CDS-View-Namen fährt.

The post Cadaxo SQL Cockpit 3.2 – Releaseinfos appeared first on Cadaxo GmbH.

ABAP CDS Views – 6 Schritte zum Verständnis

$
0
0

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

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX1D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientDependent: true
@EndUserText.label: 'BUT050 with Texts'

define view Zwb_But050_Txt_E as select from but050

left outer join tbz9a as cattx
 on but050.reltyp = cattx.reltyp {

 key but050.partner1, 
 key but050.partner2, 
 key but050.date_to,
 key but050.reltyp,
 but050.date_from, 
 
 @Semantics.language: true
 @EndUserText.label: 'Sprache'
 cattx.spras,
 cattx.bez50,
 cattx.bez50_2
 
}

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:

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX1D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@ClientDependent: true
@EndUserText.label: 'BUT050 with Texts'
...

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

...
key but050.reltyp,
but050.date_from,

@Semantics.language: true // Definition VOR dem Element
@EndUserText.label: 'Sprache'
cattx.spras
@<EndUserText.quickInfo: 'Sprache', // Definition NACH dem Element

cattx.bez50,
...

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

... INTO TABLE @DATA(lt_but050_txt) ...

muss an den entsprechenden Stellen eingefügt werden.

Cadaxo SQL Cockpit

Das entspricht dem ABAP Befehl:

SELECT *
 FROM zwb_but050_txt_e
 INTO TABLE @DATA(lt_but050_txt)
 WHERE partner2 = '0000000011'.

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

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX3D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts'

define view ZWb_But050_Text1_E as select from but050

left outer join tbz9a as cattx
    on but050.reltyp = cattx.reltyp {

    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.date_from, 
    
    @Semantics.language: true
    @EndUserText.label: 'Sprache'
    cattx.spras,
    cattx.bez50,
    cattx.bez50_2,
    
    dats_days_between(but050.date_from, but050.date_to) as period // Eingebaute Funktion
    
}

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

SELECT * FROM ZWB_BUT050_TEXT1_E. " View mit eingebauter Funktion

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:

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX4D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts with Parameter'

define view ZwbBut050_Txt_Param_E 

with parameters p_langu:abap.lang 
               
as select from but050

left outer join tbz9a as cattx
    on but050.reltyp = cattx.reltyp 
    and cattx.spras = :p_langu  // eg here
    
inner join but000 as partner1
    on but050.partner1 = partner1.partner
    
inner join but000 as partner2
    on but050.partner2 = partner2.partner {

    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.date_from, 
    
    @Semantics.language: true
    @EndUserText.label: 'Sprache'
    cattx.spras,
    cattx.bez50,
    cattx.bez50_2,
    
    case when partner1.name_last <> '' then partner1.name_last
         else partner1.name_org1 end as p1_name,
    
    case when partner2.name_last <> '' then partner2.name_last
         else partner2.name_org1 end as p2_name
}

where cattx.spras = $parameters.p_langu // or here

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:

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX4D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts with Parameter'

define view ZwbBut050_Txt_Param_E 

with parameters 
  @Environment.systemField : #SYSTEM_LANGUAGE 
  p_langu:abap.lang 

                
as select from but050

left outer join tbz9a as cattx
    on but050.reltyp = cattx.reltyp 
    and cattx.spras = $parameters.p_langu  // eg here
    
inner join but000 as partner1
    on but050.partner1 = partner1.partner
    
inner join but000 as partner2
    on but050.partner2 = partner2.partner {

    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.date_from, 
    
    @Semantics.language: true
    @EndUserText.label: 'Sprache'
    cattx.spras,
    cattx.bez50,
    cattx.bez50_2,
    
    case when partner1.name_last <> '' then partner1.name_last
         else partner1.name_org1 end as p1_name,
    
    case when partner2.name_last <> '' then partner2.name_last
         else partner2.name_org1 end as p2_name
}

 

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:

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX5D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts with Parameter 1'

define view ZwbBut050_Txt_Param1_E

with parameters p_langu:abap.lang 
                @<Environment.systemField : #SYSTEM_LANGUAGE,
                p_name_first:abap.char( 1 )

as select from but050

left outer join tbz9a as cattx
    on but050.reltyp = cattx.reltyp 
    and cattx.spras = :p_langu 
    
inner join but000 as partner1
    on but050.partner1 = partner1.partner
    
inner join but000 as partner2
    on but050.partner2 = partner2.partner {

    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.relnr,
    but050.date_from, 

    cattx.spras,
    cattx.bez50,
    cattx.bez50_2,
    
    $parameters.p_name_first as use_first,
    
    case :p_name_first
         when 'F' then 
              case when partner1.name_first <> '' then partner1.name_first
                   else partner1.name_org1 end
         else 
              case when partner1.name_last <> '' then partner1.name_last
                   else partner1.name_org1 end
          end as p1_name,
          
    case :p_name_first
         when 'F' then 
              case when partner2.name_first <> '' then partner2.name_first
                   else partner2.name_org1 end
         else 
              case when partner2.name_last <> '' then partner2.name_last
                   else partner2.name_org1 end
          end as p2_name
}

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 – Assiociations

Assiociations sind am einfachsten als „JOINs On Demand“ zu beschreiben. Durch Assiociations 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 Assiociations gelesen werden müssen, also ein Feld aus der Association in der Select-Liste oder Where-Klausel verwendet wird.

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX6D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts with Association'

define view Zwb_But050_Txt_Asso_E  

with parameters @Environment.systemField : #SYSTEM_LANGUAGE p_langu:abap.lang 

as select from but050

// left outer join tbz9a as cattx
association [0..*] to tbz9a as _cattx
    on but050.reltyp = _cattx.reltyp 
//    and _cattx.spras = $parameters.p_langu  // jetzt als FILTER!

// inner join but000 as partner1
association [1] to but000 as _partner1
    on but050.partner1 = _partner1.partner

// inner join but000 as partner2
association [1]to  but000 as _partner2
    on but050.partner2 = _partner2.partner
{
    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.date_from, 

    _cattx[spras = $parameters.p_langu ].spras,
    _cattx[spras = $parameters.p_langu ].bez50,
    _cattx[spras = $parameters.p_langu ].bez50_2

    _cattx[spras = 'D'].bez50 as bez50_d,
    _cattx[spras = 'D'].bez50_2 as bez50_2_d,    

    _partner1,
    _partner2
    }

Zunächst modellieren wir unsere JOINs als Assiociations 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 Assiociation _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 Assiociations standardmäßig als LEFT OUTER JOIN gebildet werden. Das kann aber übersteuert werden:

@AbapCatalog.sqlViewName: 'ZWB_BUT050_TX6D'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'BUT050 with Texts with Association'

define view Zwb_But050_Txt_Asso_E  

with parameters p_langu:abap.lang @<Environment.systemField : #SYSTEM_LANGUAGE

as select from but050

// left outer join tbz9a as cattx
association [0..*] to tbz9a as _cattx
    on but050.reltyp = _cattx.reltyp 
//    and _cattx.spras = $parameters.p_langu  // jetzt als FILTER!

// inner join but000 as partner1
association [1] to but000 as _partner1
    on but050.partner1 = _partner1.partner

// inner join but000 as partner2
association [1]to  but000 as _partner2
    on but050.partner2 = _partner2.partner
{
    key but050.partner1, 
    key but050.partner2, 
    key but050.date_to,
    key but050.reltyp,
    but050.date_from, 

    _cattx[1: inner where spras = $parameters.p_langu ].spras,
    _cattx[1: inner where spras = $parameters.p_langu ].bez50,
    _cattx[1: inner where spras = $parameters.p_langu ].bez50_2,
    
    _cattx[1: inner where spras = 'D'].bez50 as bez50_d,
    _cattx[1: inner where spras = 'D'].bez50_2 as bez50_2_d,    

    _partner1,
    _partner2
    }

Ü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:

 

Assiociations veröffentlichen – Pfadzugriffe

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

Select PARTNER, TYPE, NAME_ORG1, NAME_LAST, MC_NAME1 
  from Zwb_But050_Txt_Asso_E\_partner2

Hier wird über die Entität Zwb_But050_Txt_Asso_E selektiert, es werden aber nur Felder der Assiociation _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:

Select Zwb_But050_Txt_Asso_E~*,
       \_partner2-PARTNER as p2_partner, 
       \_partner2-TYPE as p2_type, 
       \_partner2-MC_NAME1 as p2_mc_name1
  from Zwb_But050_Txt_Asso_E

Oder in der Where-Klausel verwenden:

SELECT zwb_but050_txt_asso_e~*,
       \_partner2-partner AS p2_partner,
       \_partner2-type AS p2_type,
       \_partner2-mc_name1 AS p2_mc_name1
  FROM zwb_but050_txt_asso_e
  WHERE \_partner1-partner <> '0000000013'

 

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

 

Compare Filter

Wir haben bisher immer die View-Annotation

@AbapCatalog.compiler.compareFilter: true

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 Assiociation _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 Assiociation-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 zusaätzliche Assiciations und Felder erweitert werden:

@AbapCatalog.sqlViewAppendName: 'ZWB_BUT050_TX7D'
@EndUserText.label: 'View Extend'

extend view Zwb_But050_Txt_Asso_E with Zwb_But050_Txt_Ext1_E 

association [0..*] to but100 as _roles
    on _roles.partner = but050.partner2 
    
{
    but050.relnr,
    _roles
}

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

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

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

 

Und auch im ABAP:

SELECT partner2 as partner,
       reltyp as reltyp,
       \_partner2-mc_name1 as name,
       \_roles-rltyp as roletyp
   FROM ZWB_BUT050_TXT_ASSO_E.

 

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…>

The post ABAP CDS Views – 6 Schritte zum Verständnis appeared first on Cadaxo GmbH.

Webinar – ABAP CDS Views

$
0
0

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

The post Webinar – ABAP CDS Views appeared first on Cadaxo GmbH.

7 Reasons Why You Should Use Cadaxo SQL Cockpit

$
0
0

You might have heard about our Cadaxo SQL Cockpit already – it is an Add-on to your SAP System. Here is an animated video which shows very nice overview about it:

In this blog post I am not going to describe every possible use case and feature of the SQL Cockpit. I think everybody needs to find the beauty of the SQL Cockpit by himself/herself. This is how I found mine.

I am professionally the youngest guy in our Cadaxo Team but I adopted the usage of SQL Cockpit super-fast. Here are my 7 reasons why you should use Cadaxo SQL Cockpit as well.

 

1. Writing complicated queries has never been easier

When I started with ABAP couple years ago I was sometimes going crazy with the limitations of SE16 and other transactions. Now I read data from the database almost every time by writing a simple SELECT to SQL Cockpit.

But it is not only about simple SELECTs of course. As an ABAP Developer when I run into very complicated SELECT with JOINs or WHERE conditions I simply copy the SELECT from my code to SQL Cockpit and see the results/error immediately. It saves my time with beloved debugger.

 

2. Generating Reports

Not only that all queries stay in History for later usage, it is also possible to generate reports out of your queries. It is really simple – there is a wizard for it. You don’t need any ABAP skills to write cool Reports very fast with select-options and everything you need.

 

3. Comparing Results on Site

Do you remember last time when you copied/exported data from one table to your spreadsheet, then from another table and another table… and then visually compared the results?

Well, in SQL Cockpit I just run two or more SQL statements next to each other and can compare the results with our Compare result list function, while staying on the same site. No CTRL+C, no CTRL+V, no Excel 😊

 

4. Modern Up-To-Date ABAP

SQL Cockpit supports Open SQL Expressions, Functions, Host Expressions, Unions… (more info here)

 

5. CDS Views Supported

… and yes, (one of the FAQ these days) even access to CDS Views works very well.

 

6. Talk about performance

As a developer, I like to think about my code before saving it. In SQL Cockpit I can see the time needed to perform my SQL statement. I can even write two SQL statements and compare its performance. (Usually the first thought – the first query – is slower 😉

 

7. Overall user experience and support

I must say, I really like working with SQL Cockpit. We at Cadaxo do care about User Experience, all features are just one click away.

I hope you will find your reasons soon as well!

The post 7 Reasons Why You Should Use Cadaxo SQL Cockpit appeared first on Cadaxo GmbH.

R/2 bzw. ABAP /4 Programmierer gesucht? Echt jetzt?

$
0
0

Wie die vielen anderen U-Bahn Fahrgäste starre ich während dem morgendlichen Weg in die Arbeit auf mein Handy und scrolle Facebook, Instagram und Twitter durch. Vor ein paar Tagen wurde ich plötzlich auf Twitter bei einem Jobinserat stutzig:

Da sucht doch tatsächlich eine Firma aus Berlin einen ABAP /4 Entwickler. Echt? Gibt’s ja nicht! Zumal ich mich erinnere, dass ABAP als ABAP /4 nur in der R/2 und den ganz frühen R/3 Zeiten bezeichnet wurde. Sucht da tatsächlich jemand einen R/2 Entwickler? Oder einen R/3 Entwickler der nicht objektorientiert entwickeln kann? Oder meinen die vielleicht einen S/4HANA Entwickler? Der Zusatz /4 wurde jedenfalls noch vor dem Jahrtausendwechsel mit dem Einzug der objektorientierten Welt in ABAP entfernt. Da der Bewerber auch noch ABAP-OO kennen soll war mir dann doch schnell klar, dass ich leider nicht mehr als R/2 Entwickler einsteigen kann.

 

ABAP – ABAP /4 – ABAP Objects/ABAP OO – modernes ABAP

Vermutlich weiß jeder, dass ABAP für Allgmeiner Berichts Aufbereitungs Prozessor oder in der englischen Form für Advanced Business Application Programming steht.

ABAP /4 wurde die Programmiersprache bereits unter R/2 bezeichnet und in den frühen R/3 Zeiten wieder entfernt. /4 sollte zeigen, dass es sich bei ABAP um eine Programmiersprache der 4. Generation (4GL) handelt.

Als ABAP Objects/ABAP OO wird der Bestandteil von ABAP bezeichnet, der die objektorientierte Programmierung auf Basis von Klassen und Interfaces erlaubt. ABAP Objects wurde mit SAP R/3 4.6 verfügbar und sollte in der Zwischenzeit jeder ABAP Entwickler beherrschen.

Zuletzt taucht auch immer öfter der Begriff modernes ABAP. ABAP ist eine sehr lebendige Programmiersprache welche laufend weiterentwickelt. Als ABAP Entwickler sollten wir danach trachten immer den aktuellesten, möglichen ABAP Syntax – modernes ABAP – einzusetzen.

Modernes ABAP

Im Laufe der Jahre wurden viele Weiterentwicklungen an vorhandenen Spracheigenschaften vorgenommen oder gänzlich neue Funktionen hinzugefügt. ABAP Objects war sicherlich die mächtigste Erweiterung von ABAP, aber auch kleinere Erweiterungen wie z.B. die Regular Expressions (REGEX) oder zuletzt die impliziten Datendefinitionen können hier genannt werden.

SAP verfolgt im ABAP seit den ersten Anfängen die strikte Abwärtskompatibilität. Ein nicht unbedeutender Teil der nach wie vor laufenden Entwicklungen wurden vor 10, 20 Jahren oder gar noch zu R/2 Zeiten erstellt. Nachfolgend ein Beispiel aus einem ABAP 7.50 System:

Diese strikte Abwärtskompatibilität birgt aber für die ABAP Entwickler große Gefahren:

  • Ein arrivierter ABAP Entwickler kann auch mit einem etwas angegrauten Wissen nach wie vor ABAP Programme erstellen. In einem R/3 System kann er sogar ohne ABAP Objects tarnen und täuschen. Es besteht oft keine zwingende Notwendigkeit neue Konzepte einzusetzen.
  • Ein neuer ABAP Entwickler wird wegen der vielen Möglichkeiten verwirrt sein. Sehr oft werden bestehende Programme angepasst oder kopiert wodurch die alten Konzepte fortgesetzt werden.

Um dieses Verrotten der Entwicklungen zu verhindern muss man im Hinblick auf den ABAP Syntax nur zwei Regeln beachten:

Verwenden Sie keine obsoleten Sprachelemente

Informieren Sie sich regelmäßig über Neuheiten und die ABAP Releasenotes

 

Obsolte Sprachelemente

Bei ABAP Objects ist ein Großteil der obsoleten Anweisungen bereits verboten. Allein schon deshalb sollte man unbedingt ABAP Objects einsetzen. Obsolete Sprachelemente sollten in jedem Fall vermieden werden. Es gibt für alle diese Sprachelemente neuer Formen mit wesentlich mehr Möglichkeiten.

Betrachten wir das einfache Beispiel MOVE

MOVE ist schon seit einigen Jahren obsolet und wird aber nach wie vor in vielen Programmen eingesetzt. Mit MOVE kann man z.B. weder Konstrukturausdrücke oder Tabellenaustrücke verwenden noch eine Inline-Deklaration einsetzten. Statt MOVE sollte nur mehr einheitlich mit = oder ?= gearbeitet werden:

lv_target = lv_source.
lv_target = EXACT #( lv_source ).
lv_target = lt_table[ 1 ]-source.

 

Übersicht über die obsoleten ABAP Sprachelemente

 

ABAP Releasenotes

Mit jedem neuen ABAP Release, aktualisiert SAP auch die ABAP Releasenotes. Ja, es gibt tatsächlich ABAP Releasenotes und ein regelmäßiger Blick lohnt sich. Meistens findet man bei neuen ABAP Releases auch unzählige Blogs auf sdn.sap.com. Hier zwei Blogs zum aktuellen ABAP Release welche einen optimalen Überblick liefern:

Links zu den ABAP Releasenotes

Unter dem nachfolgenden Link findet man alle ABAP Releasenotes seit der Version 3.0 bis zum jetzt aktuellesten System ABAP 7.52:

 

Fazit

Wir ABAP Entwickler sind dafür verantwortlich gute und wartungsfreundliche Entwicklungen vorzunehmen. Die Vermeidung von obsoleten Kommandos oder Verfahren ist ein wichtiger Bestandteil von wartungsfreundlichen Entwicklungen. Wir selbst gehen ja auch davon aus, dass sich Ärzte, Automechaniker oder sogar Politiker regelmäßig weiterbilden und „obsolete“ Verfahren nicht mehr einsetzen.

 

The post R/2 bzw. ABAP /4 Programmierer gesucht? Echt jetzt? appeared first on Cadaxo GmbH.


Cadaxo SQL Cockpit 3.3 – Releaseinfos

$
0
0

In der Cadaxo SQL Cockpits Version 3.3 haben wir neben kleinern Korrekturen und Anpassungen auch einiges an Kundenwünschen eingebaut.

 

Typisierte Symbole und Multi Value Symbole

Ein Symbol kann ab jetzt nicht nur einen einzeln Wert enthalten!

Multivalue-Symbole speichern mehrere Werten von gleichen Type, die in der WHERE Klausel – derzeit- nur hinter IN vorkommen dürfen.

Beispiel der Verwendung:

Der Cockpit SELECT

SELECT * FROM BUT000 WHERE PARTNER IN &PARTNER_MULTI&

wird als folgender openSQL SELECT ausgeführt:

SELECT * FROM BUT000 WHERE PARTNER IN ('0000000001','0000000002','0000000003')

 

 

Konvertierungsexits für Symbolwerte

Für einwertige Symbole kann jetzt ein Datenelement definiert werden. Wenn möglich, wird der eingegebene Wert mittels Konvertierungsexit in den internen Wert geändert. Dies ist für vollständige Literale und Werte möglich.

Die 3 Partner-Symbole haben über das Datenelement BU_PARTNER (bzw. dessen Domäne BU_PARTNER) eine Länge von 10 Zeichen und die Konvertierungsroutine ALPHA zugewiesen. Bevor der SELECT ausgeführt wird, werden die Symbolwerte entsprechend angepasst:

  • ‚112‘ => ‚0000000112‘
  • 113 => 0000000113
  • 1234567890123 => 1234567890

 

Filtern nach Benutzern in der Rollenpfelge

Die Benutzer in der Cockpit Rollen Pflege (Admin-Funktion) können jetzt über die Benutzer-ID und den Benutzernamen gefiltert werden:

Filtern nach Benutzer

Filter aufrufen

 

Suche nach ID

Filtern nach Benutzer-ID

 

Gefilterte Liste und Zurücksetzten des Filters

Gefilterte Liste und zurücksetzten des Filters

 

Cockpit-Rollen für Referenzuser

Auch Referenzbenutzer können jetzt Cockpit-Rollen zugewiesen werden. Die Rollen sind auch für alle Benutzer gültig, die auf dem Referenzbenutzer basieren.

Benutzer mit Referenzbenutzer

 

 

Listvergleich

Eine Checkbox in der Legende des Tabellenvergleichs gibt Aufschluss darüber, ob es sich um eine gespeicherte List handelt.

Mapping im Tabellenvergleich

Mapping im Tabellenvergleich

 

Saved List Kennzeichnung im Vergleich

Saved List Kennzeichnung im Vergleich

 

Editorbereich teilen

Das SQL Cockpit wurde in diesem Release für eine API vorbereitet, um Daten (SQL SELECTS, Listen, Symbolwerte,…) aus verschiedenen Quellen in das Cockpit schicken zu können.

Vorerst wird darauf aber nur innerhalb des Cockpits zugegriffen: „Editor teilen“ und „Meine Queue“: 

Mit Hilfe des ersten Buttons kann der User seinen derzeitigen Inhalt des SQL Bereich mit einem anderen User teilen: Ich möchte über einen SELECT mit einem Kollegen diskutieren oder Feedback dazu einholen.

SELECT (Editorbereich) teilen

SELECT (Editorbereich) teilen

 

Der zweite Button zeigt den „Posteingang“ des des Benutzers an.

Posteingang des Benutzers

 

Per Doppelklick wird der geschickte Inhalt in den Editorbereich übernommen.

Wird eine Eintrag nicht mehr benötigt, kann er gelöscht werden.

 

Premium Version – PDF Attachments Erweiterung

Ab jetzt kann ein Administrator eine maximale Größe von PDF-Dokument SQL Cockpit – Admin Bereich festlegen. Wird diese Größe überschritten, wird das PDF Dokument auf mehrere aufgeteilt und als separate Mail verschickt.

Der Änderunglog kann jetzt auch als Attachment an das Solution Manager Ticket gehängt werden. Entweder als Textdokument oder als PDF-Dokumente mit der entsprechenden Maximalgröße.

Premium Edition - Admin Bereich

Premium Edition – Admin Bereich

 

Zwei verschiedene Formulare stehen ab jetzt zur Verfügung:

/CADAXO/SQLC_UPDATE_LOG_FORM – Bisheriges Formular

/CADAXO/SQLC_UPDATE_LOG_SMALL – Neues, speicheroptimiertes Formular

 

 

The post Cadaxo SQL Cockpit 3.3 – Releaseinfos appeared first on Cadaxo GmbH.

CONTINUE, CHECK, EXIT und RETURN

$
0
0

Vor kurzem musste ich wieder einmal ein ABAP Klasse korrigieren, in der die Bedeutung von CONTINUE und RETURN offensichtlich verwechselt wurde. Eigentlich sollte innerhalb eines Schleifendurchlaufs an einer Stelle der aktuelle Durchlauf beendet werden und mit dem nächsten Tabelleneintrag weitergemacht werden. Aber leider wurde dies mit RETURN Anweisung implementiert. RETURN verlässt sofort die komplette Methode.

Daraufhin habe ich mit einigen Kollegen über die Aufgabenstellung diskutiert und es hat sich herausgestellt, dass manchmal Unklarheit bei der Verwendung von CONTINUE, RETURN, STOP, EXIT, CHECK … herrscht.

Daher versuche ich hier kurz Klarheit in die vielen Kommandos zu bringen. Bitte beachtet, dass ich nicht auf die Ausnahmen (klassisch und klassenbasierte) eingehe, das ist ein gänzlich anderes Thema. Aber natürlich wird auch durch Ausnahmen eine Prozedur verlassen.

 

Schleifen abbrechen

SAP kennt die folgenden Schleifenarten: LOOP / ENDLOOP, DO / ENDDO, WHILE / ENDWHILE und nicht zu vergessen SELECT / ENDSELECT – Wobei, eigentlich kann man SELECT/ENDSELECT gerne vergessen …

  • Mit CONTINUE kann man den aktuellen Schleifendurchlauf ohne Bedingung abbrechen. Nach der Anweisung werden die übrigen Anweisungen übersprungen und der nächste Schleifendurchlauf beginnt.
  • Mit CHECK <bedingung> kann man ebenfalls den aktuellen Schleifendurchlauf mit Bedingung abbrechen. Wenn die Bedingung nicht erfüllt ist, wird gleich wie bei CONTINUE die weitere Verarbeitung übersprungen und der nächste Durchlauf beginnt.
  • Verwendet man hingegen EXIT, wird die aktuelle Schleife vollständig beendet und der Programmablauf nach dem schließenden Teil (ENDLOOP, ENDDO, ENDWHILE, ENDSELECT) fortgesetzt. Wenn es sich um verschachtelte Schleifen handelt, wird hier nur die aktuelle Schleife beendet.

 

Prozeduren verlassen

Prozeduren verlassen

Wenn man Prozeduren vor der END… – Anweisung verlassen möchte, so stehen ans ich in ABAP die Kommandos RETURN, EXIT und CHECK <bedingung> zur Verfügung. Diese Anweisungen beenden eine Prozedur ordnungsgemäß, dadurch werden auch Ausgabe- bzw. Rückgabewerte an die aufrufende Stelle übergeben.

Im Sinne der Lesbarkeit gibt auch SAP die Empfehlung aus, Prozeduren nur mit RETURN zu verlassen.

Prozeduren können weiters wie folgt verlassen werden:

  • Aufruf einer Einheit ohne Rückkehr (SUBMIT, CALL TRANSACTION, … )
  • Auslösen einer Ausnahme
  • Senden einer Dialognachricht (MESSAGE)

 

Ereignisblöcke verlassen

Der Vollständigkeit halber sind hier noch die Anweisungen REJECT und STOP zu erwähnen. Damit können Ereignisblöcke von Dialogmodulen und Reports (AT, … ) verlassen werden. Da es jedoch schon lange die Regel gibt, in klassischen Ereignisblöcken nur noch Methodenaufrufe von Klassen zu implementieren, sollten diese Fälle in neuen Programmen nicht mehr auftreten. Siehe auch https://help.sap.com/doc/abapdocu_750_index_htm/7.50/de-DE/abenabap_obj_progr_model_guidl.htm

Leider können RETURN, EXIT und CHECK auch zum Beenden von Ereignisblöcken eingesetzt werden und REJECT und STOP können auch bei Prozeduren eingesetzt werden. Dies sollte jedoch unbedingt vermieden werden.

 

Zusammenfassend

  • Schleifendurchlauf mit CONTINUE oder CHECK beenden
  • Schleife mit EXIT beenden
  • Prozeduren mit RETURN verlassen

The post CONTINUE, CHECK, EXIT und RETURN appeared first on Cadaxo GmbH.

Webinar – SAP Gateway

$
0
0

SAP Web IDE Versionen

$
0
0

Ich wurde zuletzt mehrmals gefragt, was es mit den unterschiedlichen Web IDE Versionen auf sich hat.  Nachfolgend ein ganz kurzer Überblick über die aktuell verfügbaren Versionen:

 

SAP Web IDE for SAP HANA

Diese Web IDE Version ist zum Erstellen und Warten von SAP HANA nativen Anwendungen vorgesehen. Die Version ist mit SAP HANA verfügbar und auch Teil der downloadbaren SAP HANA Express Edition und kann somit offline verwendet werden.

 

SAP Cloud Platform, Web IDE

Zum Erstellen oder Warten von SAP UI5/Fiori Anwendungen wurde/wird die SAP Cloud Platform, Web IDE verwendet. Die Anwendungen können u.a. in der SAP Cloud als auch in einem ABAP Repository deployed werden.

 

SAP Cloud Platform, Web IDE Personal Edition

Die Personal Edition ist eine deutlich abgespeckte Version der SAP Cloud Platform, Web IDE welche unter https://tools.hana.ondemand.com/#sapui5 heruntergeladen und somit offline verwendet werden kann. Einige Funktionen wie z.B. das Erstellen neuer Templates sind in der Personal Edition nicht verfügbar.

Eine Übersicht über die Personal Edition und deren Einschränkungen findet ihr unter https://help.sap.com/viewer/825270ffffe74d9f988a0f0066ad59f0/CF/en-US/5b8bca3147ee4dfd99be8aaf6bd4f421.html

 

SAP Cloud Platform, Web IDE Full Stack

Mit der neuen Full Stack Version können neben den klassischen SAP UI5 bzw. Fiori Anwendungen auch alle neuen Komponenten wie z.B. Leonardo, SAP Business Hub oder SAP Cloud Workflow bearbeitet werden. Vereinfacht ausgedrückt kann gesagt werden, dass die Full Stack Version alles bietet was auch die SAP Cloud Platform, Web IDE bietet – und eben noch deutlich mehr!

Früher oder später wird es die „alte“ SAP Cloud Platform Web IDE nicht mehr geben. Laut SAP wird die alte SAP Cloud Platform weiterhin gewartet, neu Funktionen werden jedoch definitiv nur in der Full Stack Version zur Verfügung gestellt.

Developers Guid für die Full Stack Version: https://help.sap.com/viewer/825270ffffe74d9f988a0f0066ad59f0/CF/en-US/0221845d73ad403ab2852142f3179177.html

 

Ein Wort zu den ABAP Developer Tools

Ich wurde zuletzt auch gefragt, ob die Web IDE nun die ABAP Developer Tools (Eclipse) ablösen wird. Ich kann nicht sagen, was SAP in Zukunft in Sachen ABAP plant, aber zum aktuellen Zeitpunkt ist für die ABAP Entwicklung weiterhin ADT (und nicht SE80 😉 ) das Tool der Wahl.

 

Und noch ein Wort zu ABAP in der Cloud

Auf der SAP TechEd 2017 hat Björn Goerke gezeigt, dass in Zukunft auch ABAP für Cloud Entwicklungen eingesetzt werden kann. In seinem Demo hat er auch ADT für die ABAP Entwicklung verwendet. Ich gehe davon aus, dass früher oder später ABAP (zumindest ABAP in der Cloud) auch in der Full Stack Version unterstützt wird aber so wie es aussieht werden wir auch hier vorläufig mit den ABAP Developer Tools arbeiten.

 

Weitere Informationen:

The post SAP Web IDE Versionen appeared first on Cadaxo GmbH.

Domi Bigl und die ABAP Development Tools

$
0
0

Domi Bigl war bei Cadaxo der Erste, der sich ausführlich mit den ABAP Development Tools beschäftigt hat. In der Zwischenzeit verwendet er seit langer Zeit fast ausschließlich ADT für die ABAP Entwicklung. Grund genug, ihm mal ein paar Fragen zu den ABAP Development Tools zu stellen:

Du bist ja bekanntlich ein Early Adopter der ABAP Development Tools. Seit wann verwendest Du ADT und was hat dich zum Umstieg bewogen?

Eclipse verwende ich schon sehr lange für alle möglichen Programmiersprachen. Im SAP Umfeld wurde es als Netweaver Developer Studio schon für z.B. Portal Entwicklungen am Java-Stack eingesetzt. Seit HANA, SAPUI5 und CDS Views ist Eclipse auch für den ABAP-Stack notwendig geworden. Mit den ADT war dann endlich auch ABAP Programmierung im Eclipse möglich – das wollte ich natürlich sofort ausprobieren!

Ging der Umstieg für dich einfach oder hattest Du in gewissen Bereichen Schwierigkeiten?

Mit Eclipse war ich ja schon vertraut, hatte also keine Probleme mit dem generellen Handling, Views, Perspektiven usw. Gewöhnungsbedürftig war der „quelltextbasierte Class Builder“, im GUI habe ich immer den formularbasierten verwendet. Und der Doppelklick. Die Funktionen von Doppelklick und Strg-Klick sind genau andersrum wie im GUI, dass muß einem einmal einfallen ;-). Der Debugger ist auch noch etwas unhandlich und kommt manchmal mit dem GUI durcheinander.

Bekanntlich werden noch nicht alle Entwicklungsaufgaben durch ADT unterstützt. Beispielsweise können derzeit noch keine Enhancements gepflegt werden und der Debugger verfügt auch noch nicht über die gleichen Möglichkeiten wie der SE80 Debugger?

Stimmt, aber in einem Enhancement sollte man ja ohnehin nur einen Methodenaufruf einer Z-Klasse drinnen haben, das ist dann nicht so das Problem, außerdem kommt das ja mit 752! Der Debugger wird auch ständig verbessert – und als der neue Debugger im GUI kam, hat anfangs auch beinahe jeder auf den alten Debugger umgeschalten, oder?

In eine Ähnliche Richtung gehen Entwicklungen von z.B. SAP CRM. Dort gibt es eigene Tools welche ausschließlich in SAP Gui lauffähig sind. Wie gehst Du damit um?

Ich verwende auch z.B. für die Component Workbench den embedded SAP GUI. Per Doppelklick öffnen sich die Klassen oder Methoden dann wieder im ADT Editor. Das funktioniert einwandfrei. Es wird ja auch für andere Objekte der embedded GUI aufgerufen: Tabellen (und Strukturen) bzw. DDIC generell – je nach Release halt, oder Berechtigungsobjekte oder … . Was noch fehlt, ist der Transaktionsbaum – also SESSION_MANAGER aus dem GUI, man muss die Transaktionen wissen bzw eben irgendwie suchen und eingeben – Tx SE93 oder Tabelle TSTCT… Es gibt auch ein cooles Plugin: ABAP Favorites (https://abapblog.com/)

Was würdest Du einem klassischen ABAP Entwickler, der in die ADT Welt einsteigen möchte, raten? Hast Du Tipps wie der Einstieg optimal verlaufen kann?

Einfach starten! Jetzt! Und mit jetzt mein ich vor 5 Monaten! Nein, im Ernst: wer jetzt noch nicht nicht mit ADT arbeitet, darf sich nicht mehr ABAP Entwickler nennen. Und die Basis-, Software- oder Securityteams als Ausrede zu verwenden, zählt einfach nicht mehr: ADT gehört zur SAP Entwicklung, wie sonst wollt ihr schnell und Clean-Code konform entwickeln, oder CDS Views erstellen oder auch nur anschauen – außer mit dem SQL Cockpit vielleicht ;-)? Und gerade wenn man noch nicht mit CDS Views, UI5 Apps, HANA Views und dergleichen zu tun hat, für die (zumindest) Eclipse notwendig sind, sollte man sich doch mit Altbekanntem – ABAP Programmierung – an eine neue IDE gewöhnen und nicht CDS, DDL, DCL, Javascript, einerseits… UND eine neue Umgebung andererseits kennen lernen müssen!

Die ABAP Development Tools werden kontinuierlich verbessert, gibt es dennoch Dinge die deiner Meinung nach fehlen und dringend eingebaut werden sollten?

Wie schon erwähnt: der SESSION_MANAGER fehlt schon etwas. Und dass eine Klasse in einem Auftrag gesperrt wird, obwohl ich nur Methoden-Coding ändere? Zwei Methoden in jeweils unterschiedlichen Transportaufträgen und die Klasse ist mit ADT nicht bearbeitbar?!?! Ähnliches gilt für Enhancements – nur weil eine Methode Erweitert wurde, muss man doch nicht die ganze Klasse tabu sein! Zum Glück trifft einen das nur selten – vor allem, wenn andere Teammitglieder noch die SE24 bevorzugen… Die meiste Zeit freut man sich über 7 neben-, über-, und untereinander offenen Objekte oder die Quickfixes, Quickinfos, Refactoring Möglichkeiten, … und hofft, dass der Debugger diesmal im Eclipse aufgeht – oder vielleicht doch besser im GUI 😉

Gibt es sonst noch etwas dass Du zum Thema ABAP Development Tools sagen möchtest?

Die Zeiten von Report mit 5k Zeilen mit FORMs und vielleicht auch noch ohne INCLUDEs sind vorbei – OOP, TDD, CI, ARP, CDS, SAPUI5, SAP Cloud Platform ABAP Environment, Git… Das sind nicht nur schöne Schlagworte – damit verändert sich auch die Art wie, wo und was ein ABAP Entwickler implementiert und mit welchen Tools. Die SE80 ist dafür nicht mehr zeitgemäß, die WebIDE wird (zumindest derzeit) nicht für ABAP Entwicklung erweitert werden – damit bleiben nur die ADT in Eclipse! Aus meiner Sicht werden zumindest die nächsten 5-10 Jahre die ADT DIE IDE für ABAP/SAP Development sein! Probiert es aus, freundet euch damit an und nach einer Woche werdet ihr die SE38/SE24/SE80/… nicht mehr vermissen!

Vielen Dank für deine Antworten!

Links

Eclipse Plugins: https://marketplace.eclipse.org/search/site/ABAP

ABAP Developer Tools FAQs SAP Community Blog: https://blogs.sap.com/2012/06/12/faqs-abap-development-tools-for-eclipse/

 

The post Domi Bigl und die ABAP Development Tools appeared first on Cadaxo GmbH.

Viewing all 118 articles
Browse latest View live