Typische Support Anfragen in SAP Systemen

Typische Support Anfragen in SAP® Systemen

und wie das SQL Cockpit uns das Leben vereinfachen kann

Wer kennt das nicht. Die Systeme sind aufgesetzt und eingestellt, die Erweiterungen programmiert und die Schnittstellen laufen. Die Tests waren erfolgreich und das SAP System wurde produktiv gesetzt. Dennoch kommen immer wieder Supportanfragen herein. 

Das kann natürlich verschiedenste Gründe haben. Nehmen wir mal an, dass die Entwicklungen sehr sauber waren, das System gründlich getestet wurde und wenig es kaum neue Anforderungen gibt, die umgesetzt werden, gibt. Unrealistisch? Wahrscheinlich! Aber das es in einem agilen Umfeld mit laufenden Erweiterungen an den Systemen zu Fehlern kommt, ist irgendwie nachvollziehbar. Da ist ja immer alles in Bewegung. 

Aber was sind die häufigsten Gründe für Fehlertickets abseits vom typischen Projektgeschäft? Mir fallen da spontan 2 Gründe ein. 

  1. Verständnisfragen. Gerade, wenn User Transaktionen selten aufrufen, kann es zu Fragen wie „Was muss ich hier eingeben? Warum bekomme ich da einen Fehler?“ . Das kann man meist mit guten Schulungsunterlagen in den Griff bekommen.
  2. seltene Datenkonstellationen. Da kommt auf einmal ein Kunde vom Typ X, aus dem Land Y und der VKORG Z daher. Und da funktioniert dann die Partnerfindung im Beleg plötzlich nicht. Der Grund kann sein, dass diese seltene Kombination beim Test nie abgefragt wurde. Solche Datenkonstellationen können entweder durch Benutzer eingegeben worden sein, aber auch durch Programme verursacht worden sein (zB durch eine Migration oder Schnittstelle)

Wie löst man nun diese Fälle von Datenproblemen?

Im ersten Schritt schaut man sich wohl den Beleg, die Stammdaten des Partners und dann vielleicht auch das Customizing an. Über die regulären Transaktionen im SAP System. Wann man dann gleich draufkommt, super! Fall gelöst.

Aber meistens kommt man da nicht weiter. Vor allem im Second und Third Level Support ist man eher im Programm Code und auf der Datenbank unterwegs um Fehler zu finden und auch um abzuprüfen, ob es auch mehrere ähnlich gelagerte Fälle gibt. Und genau da lässt einen das SAP System meist ordentlich im Stich.

Der übliche Weg führt einen dann in die SE16 (wer den Transaktionscode nicht kennt: da geht es zur Einzeltabellenansicht). Dort sucht man dann nach dem entsprechenden Datensatz und hantelt sich dann langsam von Tabelle zu Tabelle. Mit dem Umweg über das Notepad oder Excel, in dem man die Daten copy&paste zwischen lagert. Das ist mühsam und aufwendig. Aber noch schlimmer: ich muss beim nächsten Mal die gleichen Schritte nochmal machen. Und ganz ehrlich, bei SAP geht es um Daten. Daten, die in einer Datenbank abgelegt sind. Und seit Anbeginn (das sind auf R/2 bezogen 42 und auf R/3 gerechnet 30 Jahre) gibt es keine vernünftige Lösung, damit diese Daten schnell, flexibel und vA auch sicher durchforstet werden können.

Ein klassisches Beispiel sind wohl Inkonsistenzen bei Adressen. Wohl auch, weil die meisten SAP Berater und Kollegen den Teil der SAP Welt auch gut kennen. Geschäftspartner werden fast überall verwendet. Um Adressen zu Geschäftspartnern zu analysieren muss man zuerst vom BP Stamm (BUT000) über den Adresslink (BUT020) zu den Adressen (ADRC) springen.

Also Tabelle – Excel – Selektionsschirm – Tabelle – Excel – Selektionsschirm – Tabelle. Schon ist man am Ziel. Aber dann kommt man drauf, dass es um Personen geht und dort auch das Feld PERSNR mitspielt. Also wieder alles von vorne…

Und jetzt kommt das SQL Cockpit ins Spiel. Hier kann ich mir die Tabellen alle gleichzeitig anschauen und verknüpfen. Da sehe ich das Problem dann auch einen Blick. Und was noch besser ist, einmal ausgeführt, bleibt die Abfrage in meiner Historie bestehen und ich kann sie jederzeit wieder ausführen. Beim ersten Problem bin ich mit dem SQL Cockpit vielleicht nur geringfügig schneller als „von Hand“, aber beim zweiten Mal spar ich schon 90% der Zeit. Und wenn es dann doch öfters auftritt, dann speichere ich diese Abfragen zusätzlich ab und stelle sie sogar meinen Kollegen zur Verfügung.

Am nächsten Tag einfach das Statement von gestern genommen:

und irgendwann nach dem 3,4 Mal (ok, bei mir wahrscheinlich nach dem 20. Mal – ich bewundere die Kollegen die so strukturiert sind) wird das ganze abgespeichert damit es auch die Kollegen nutzen können:

Ich nutze das SQL Cockpit seit 10 Jahren bei meinen Kunden. Und es ist aus meiner täglichen Arbeit nicht mehr weg zu denken. Manche Kunden nutzen es noch nicht, da muss ich dann auch immer über die SE16 arbeiten 🙁

Zählt doch mal, wie oft ihr täglich die SE16 nutzt. Wenn ihr in eurem Unternehmen auf weniger als 10 Abfragen pro Tag kommt (wohlgemerkt im gesamten Unternehmen, nicht pro User!), dann ist das SQL Cockpit für euch wahrscheinlich nicht geeignet. Sobald ihr mehr Abfragen macht, dann wird es sehr nützlich sein!.

Symbol aus Ergebnisliste generieren

Symbole aus Ergebnisliste generieren

Im SQL Cockpit können Symbole als Platzhalter verwendet werden. Ein Symbol kann entweder einen einzelnen Wert oder eine Range-Tabelle enthalten und wird im Normalfall manuell durch den User gepflegt.

In diesem Beispiel wurde ein Symbol SIMPLE_SYMBOL mit dem Wert ‘0001‘ definiert.

In einem SELECT könnte das Symbol wie folgt in der WHERE Bedingung verwendet werden:

Das SQL Cockpit kann aber auch mit mehrwertigen Symbolen umgehen. Dazu muss zum Symbol noch ein Datenelement gepflegt werden. Dann können die Werte über den Button in der Typ-Spalte gepflegt werden.

Die Wertepflege sieht dann z.B. wie folgt aus:

Die Verwendung im SELECT ist geringfügig anders, anstelle einer beliebigen Vergleichsoperation muss hier natürlich vor dem Symbol ein IN verwendet werden:

Symbolgenerierung aus einer Ergebnisliste

Nun aber zum eigentlichen Thema dieses Blogs. Angenommen, man hat eine relativ umfangreiche Liste erstellt und möchte aus einer Spalte alle Werte als Selektionsparameter für einen anderen Select verwenden.

Um diese Anforderung abzudecken haben wir im Kontextmenü der Spaltenüberschriften eine Funktion zum Erstellen eines Symbols ergänzt. Nach Auswahl der Funktion muss lediglich der Symbolname in einem Popup angegeben werden.

Das zugrundeliegende Datenelement ist bereits gefüllt. Alle Werte werden als „Einzelwerte Selektieren“ in das Symbol aufgenommen. Doppelte Einträge werden natürlich entfernt, leere Werte werden nicht übernommen. Das Symbol kann sofort nach der Generierung verwendet werden.

Benennen der Ergebnisliste

Benennen der Ergebnisliste


Notice: A non well formed numeric value encountered in /srv/www/j/jfoessleitner/cadaxo.com/wordpress/wp-includes/media.php on line 3236

Notice: A non well formed numeric value encountered in /srv/www/j/jfoessleitner/cadaxo.com/wordpress/wp-includes/media.php on line 3236

Wenn man im SQL Cockpit viele Listen gleichzeitig darstellen muss, kann man schon mal die Übersicht verlieren. Deshalb haben wir bereits vor einigen Releases die Möglichkeit zum Benennen der Ergebnislisten ergänzt.

Mit dem Kürzel *&%HEADER <name der liste> direkt vor einer SQL Abfrage, wird der Text <name der liste> als Überschrift in der Ergebnisliste verwendet.

SQL Cockpit_Releaseinfos

Cadaxo SQL Cockpit 3.7 – Releaseinfos

Die SQL Cockpit Version 3.7 ist fertig und bietet wieder ein paar Korrekturen/Verbesserungen und einige interessante neue Features. Nachfolgend ein Überblick über die wichtigsten Neuerungen.

Tabs Layout

Bisher konnten mehrere Listen in folgenden drei Layouts dargestellt werden: Vertikal, Horizontal oder Matrix. Mit diesem Release haben wir die neue Layout-Variante Tabs ergänzt. Dadurch wird immer nur eine Ergebnisliste dargestellt und nutzt somit den gesamten Ergebnisbereich. Im Header-Bereich der Listen kann zwischen den Ergebnislisten hin- und hergeschalten werden.

Domain Text

Die Beschreibungstexte von Domänen-Festwerten können nun in die Liste automatisch mit aufgenommen werden. Für Spalte mit einer Domäne wird eine zweite Spalte mit gleicher Überschrift erzeugt in welcher der Beschreibungstext des Festwerts enthalten ist. Dieses Feature ist vorerst nur verfügbar, wenn der strikte ABAP SQL Modus verwendet wird. (strikter Modus: Select Felder mit Beistrich getrennt, … )

Listenvergleich

Im Bereich des Listenvergleichs haben wir eine zweite Darstellungsform des Ergebnisses eines Vergleich aufgenommen. Bisher wurden die Spalten der beiden Listen nebeneinander dargestellt. Durch die neue Darstellung werden die Spalten nun untereinander dargestellt.

Darstellung nebeneinander Darstellung untereinander

CSV Export

Beim CSV Export von Ergebnislisten erscheint nun vor dem Export ein Popup in dem folgende Einstellungen vorgenommen werden:

Report Template Erweitert – Gruppierung von Selektionsparametern

Im Wizard zur Generierung eines Reports mit dem erweiterten Template, kann die neue Funktion Tabellen-Auswahlblöcke markiert werden. Im generierten Report werden dann die Selektionsfelder nach ihrer Tabellenzugehörigkeit in eigene Selektionsblöcke gruppiert.

 

Ausblick 4.0

Nach dem Release ist vor dem Release. Im nächsten SQL Cockpit Release werden wir nun die länger geplanten tiefgreifendern Erweiterungen vornehmen um alle ABAP SQL Select Operationen (CTE, … ) eines S/4 HANA Systems zu unterstützen! 

Wir rechnen damit, dass das SQL Cockpit 4.0 im 3. Quartal 2022 erscheinen wird. 

 

Cadaxo SQL Cockpit 3.6 – Releaseinfos

Die SQL Cockpit Version 3.6 ist fertig und bietet wieder ein paar Korrekturen bzw. kleineren Optimiereungen und einige interessante neue Features.

Elementinfo

In der Elementinfo wird nun zusätzlich das zugrunde liegende Datenelement angezeigt. Die Information wird als Hyperlink dargestellt, es besteht daher die Möglichkeit gleich direkt auf die Definition des Datenelements zu navigieren. Weiters wird jetzt im Fußbereich der Elementinfo die Auslieferungsklasse der Tabelle angezeigt. 

 

XML / HTML in Datenbanken

XML oder HTML Inhalte in Datenbanktabellen können im SAP Standard nur durch Zusatzentwicklungen angezeigt werden. Mit dem SQL Cockpit können nun diese XML oder HTML Inhalte in einem eigenen Popup dargestellt werden. Die Funktion ist über das Kontextmenü der Ergebnistabelle erreichbar.

Schnelle Tabellenanzeige

Wenn lediglich eine Tabelle oder View angegeben ist, wird beim Ausführen ein SELECT * auf diese Tabellen ausgeführt. Dies ermöglicht eine sehr schnelle Auswertung von Tabellen.

Layouts in generierten Reports

Bei der Verwendung des Templates /CADAXO/REPORT_A zum Generieren von Reports, kann nun die definiert werden, in welcher Weise der Report das Erstellen bzw. Sichern von Layouts dem Anwender ermöglicht.

Je nach gewählter Einstellung können dann die Anwender bei den generierten Reports ihre eigenen Layoutvarianten erstellen und sichern.

Einfärben von Ergebniszeilen

Durch Angabe eines SAP-Farbcodes für die SQL Cockpit Framework Spalte CDXLINECOLOR kann nun eine ganze Zeile dynamisch eingefärbt werden. Im nachfolgenden Beispiel sollen alle Zeilen abhängig vom Wert in der Spalte TYPE eingefärbt werden. Wenn der Typ ‚1‘ ist, sollen die Zeilen orange werden, wenn der Typ ‚3‘ ist grün. Alle restlichen Zeilen sollen blau werden:

  • 0 GUI-abhängig
  • 1 Graublau
  • 2 Hellgrau
  • 3 Gelb
  • 4 Blaugrün
  • 5 Grün
  • 6 Rot
  • 7 Orange

C300, C310, C311, C301 = Gelb
C600, C610, C611, C601 = Rot

Redesign Variantenpflege

Die Usability der Variantenpflege wurde komplett überarbeitet um eine noch intuitivere Handhabung zu ermöglichen. Alle Menüpunkte befinden sich dort wo man es sich erwarten würde. Neben der Menüzeile sind alle Funktionen auch als Kontextmenü bei den Varianten verfügbar.

Ausblick 4.0

Nach dem Release ist vor dem Release. Im nächsten SQL Cockpit Release werden wir einige tiefgreifendere Erweiterungen vornehmen um alle ABAP SQL Select Operationen eines S/4 HANA Systems zu unterstützen! 

Wir rechnen damit, dass das SQL Cockpit 4.0 im 3. Quartal 2021 erscheinen wird. 

Cadaxo SQL Cockpit 3.5 – Releaseinfos

Auch für die Version 3.5 unseres SQL Cockpits haben wir neben ein paar Verbesserungen und Korrekturen wieder einige interessante Erweiterungen vorgenommen.

CSV Attachments in Job Mailbenachrichtigung

Email-Benachrichtigungen von beendeten Hintergrundjobs können nun die Ergebnisse als CSV Dateien enthalten. Im Wizard für die Jobeinplanung kann dies durch markieren von „Ergebnis als Attachment versenden“ aktiviert werden. Die Listen werden in Form eines ZIP Files an das Email angehängt. Das verwendete CSV Format entsprecht dem seit Release 3.4 verfügbarem „Performanten CSV“, welches beim Export von Listen zur Verfügung steht.

Werte größer als 128 Zeichen vollständig anzeigen

Ergebniswerte welche länger als 128 Zeichen sind, können in einer ALV Tabelle nur bis zu 128 Stelle angezeigt werden. Sollten mehr als 128 Zeichen vorhanden sein, kann mit der Kontext-Funktion „vollen Wert anzeigen“ der gesamte Wert in einem eigenen Popup angezeigt werden. Wenn der Wert z.B. per Drag/Drop oder Doppelklick weiterverwendet wird, wurde bereits bisher immer der volle Wert verwendet. Auch in der Premium-Version, in der das Ändern von Inhalten möglich ist, wurden bereits Felder mit einer größeren Länge als 128 Zeichen unterstützt.

 

Teilen von Varianten

Ergänzend zum Teilen vom Editor und Symbolen, können nun auch Varianten mit anderen Benutzern geteilt werden. Die Funktion kann über das Kontextmenü der Veriantenpflege aufgerufen werden.

Mehrwertige Symbole – Uneingeschränkte Select-Options Funktionalität

Mehrwertige Symbole unterstützen nun die vollständige Select-Options Funktionalität. Es können Werte ein- oder ausgeschlossen werden, es können Bereiche angegeben werden und es besteht die Möglichkeit Werte per Upload oder aus der Zwischenablage zu ergänzen.

SE80 Debugger – SQL Cockpit Script Integration – BETA

Mit den Debugger Scripts, kann der SE80 Debugger um individuelle Logik ergänzt werden. Wir haben mit diesem Release eine erste Version unsere SQL Cockpit Debugger Scripts als BETA zur Verfügung gestellt.

Mit dem SQL Cockpit Debugger Script /CADAXO/DBG_SEND_2_COCKPIT können SQL Statements, in denen man aktuell in einer Debugging Session steht, in das SQL Cockpit übertragen werden. Variable Inhalte in der WHERE Bedingung werden als Symbole angelegt.

Hier eine Abfolge der notwendigen Schritte:

Cadaxo SQL Cockpit 3.4 – Releaseinfos

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

 

Schnelleinstellung für „Up to“

Mit Hilfe dieser Funktion kann gezielt nur eine bestimmte Anzahl von Einträgen gelesen werden, ohne die Benutzereinstellungen zu ändern oder den ABAP SQL Befehl UP TO x ROWS eingegeben zu müssen. Eine explizite Angabe über UP TO x ROWS wird nicht überschreiben!

  • Die Werte 1, 500 und 1000 sind immer vorhanden
  • Über „Wert eingeben“ kann ein zusätzlicher Wert eingegeben werden
  • An erster Stelle steht immer der Vorschlagswert aus den Benutzereinstellungen

 

Performanter CSV Export

Die im Standard in den ALV Listen vorhandene Exportfunktionen sind bei größeren Mengen sehr langsam bzw. brechen im Extremfall sogar mit Kurzdumps ab.
Aus diesem Grund wurde eine performante Variante zum Export von Daten in ein CSV Format ergänzt.

Suche bzw. Filtern von Varianten

Das Suchen oder Filtern von Varianten war bisher nicht möglich. Über die neue Filterfunktion können Varianten einfach und intuitiv gefiltert werden.

Hintergrundjob an mehrere Verteiler

Die Fertigstellung von Hintergrundjobs kann nun an mehrere Empfänger per Mail mitgeteilt werden. Mehrere Empfänger können einfach durch ; getrennt eingegeben werden.

Report Generatoren

Die Report Generatoren wurden dahingehend überarbeitet, dass diese nun State-of-the-art Coding generieren.

 

ABAP SQL FIELDS, OFFSET, CROSS JOIN

Mit 7.50 bzw. 7.51 wurde der ABAP SQL um die Funktionen CROSS JOIN, FIELDS und OFFSET erweitert. Ab diesem SQL Cockpit Release unterstützen wir diese neuen ABAP SQL Möglichkeiten.

 

Teilen von Symbolen

Ähnliche wie das Teilen des Editors, können nun auch Symbole mit anderen Benutzern geteilt werden.

Remote Teilen von Inhalten

Beim Teilen des Editors bzw. der Symbole kann nun auch eine RFC Destination gewählt werden. Somit besteht die Möglichkeit die Inhalte mit anderen SAP Systemen oder Mandaten auszutauschen.

Meine Queue

Da nun die Inhalte des Editors und der Symbole geteilt werden können, wurde die Queuedarstellung von „Meine Queue“ um eine Feld Typ erweitert. Mögliche Inhalte derzeit SQL (= Inhalte des Editors) oder Symbol.

Felder mit mehr als 128 Zeichen Länge – Premium Edition

Jetzt können auch Felder mit einer Länge über 128 Zeichen bearbeitet werden. Die Zelle wird als Link dargestellt und beim Anklicken öffnet sich ein Popup mit Textfeld. Der Inhalt des Textfeldes wird mit allen Zeilenumbrüchen gespeichert.

Cadaxo SQL Cockpit 3.3 – Releaseinfos

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

wird als folgender openSQL SELECT ausgeführt:

 

 

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

 

 

7 Reasons Why You Should Use Cadaxo SQL Cockpit

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!

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