ABAP 7.54 - Neuer Timestamp UTCLONG

ABAP® 7.54 – Neuer Timestamp UTCLONG

Bisher wurden für Zeitstempel-Felder die Datenelemente TIMESTAMP und TIMESTAMPL verwendet. Hinter diesen Datenelementen verbergen sich gewöhnliche ABAP Typen. Mit 7.54 enthält ABAP nun den eingebauten ABAP-Typ utclong. Ein auf 100 Nanosekunden genauer UTC Zeitstempel.

Es sind Werte von 0001-01-01T00:00:00,0000000 bis 9999-12-31T23:59:59,9999999 möglich. Die interne Darstellung der gültigen Werte ist 1 – 3.155.380.704.000.000.000, was uns aber eher nicht interessieren sollte.

ABAP Zeitstempelfunktionen

Damit wir diese neuen Zeitstempelfelder sinnvoll verwenden können, hat SAP zum Glück auch ein paar neue Funktionen zur Verfügung gestellt:

  • utclong_current( ) erzeugt einen aktuellen Zeitstempel
  • utclong_add( … ) addiert Tage, Stunden, Minuten oder Sekunden zu einem Zeitstempel
  • utclong_diff( … ) berechnet die Differenz von zwei Zeitstempel

ABAP SQL Zeitstempelfunktionen ab 7.55

Auch bei ABAP SQL SELECT Abfragen können die utclong Zeitstempel verwendet werden. Folgende SQL Funktionen stehen zusätzlich zur Verfügung:

  • utcl_current( ) erzeugt einen aktuellen Zeitstempel
  • utcl_add_seconds( … ) addiert x Sekunden zu einem Zeitstempel
  • utcl_seconds_between( … ) berechnet die Differenz von zwei Zeitstempel in Sekunden

ABAP Zeitstempelkonvertierungsfunktionen ab 7.55

Für die Konvertierungen zwischen einem ABAP Dictionary Type TIMESTAMPL und den neuen utclong Zeitstempel, wurden folgende Funktionen zur Verfügung gestellt:

  • tstmpl_to_utcl( … ) konvertiert einen ABAP Dictionary Type TIMESTAMPL in einen utclong Zeitstempel
  • tstmpl_from_utcl( … ) konvertiert einen utclong Zeitstempel in einen ABAP Dictionary Type TIMESTAMPL

Systemklasse CL_ABAP_UTCLONG

Diese Systemklasse bietet ein paar weitere hilfreiche Funktionen und Konstanten. In den Konstanten CL_ABAP_UTCLONG=>MIN und CL_ABAP_UTCLONG=>MAX sind die jeweiligen Minimal und Maximalwerte für ein utclong Feld definiert.

Die Klasse verfügt über folgende Methoden:

  • diff ermittelt die Differenz von zwei Zeitstempel – ähnlich wie Funktion utclong_diff
  • read_iso_format Konvertiert einen ISO 8601 Zeitstempel in einen utclong Zeitstempel
  • write_iso_format_with_offset Konvertiert einen utclong Zeitstempel in einen ISO 8601 Zeitstempel
  • from_system_timestamp Konveriert ein Datum und Uhrzeit in einen utclong Zeitstempel
  • to_system_timestamp Konvertiert einen utclong Zeitstempel in ein Datum und Uhrzeit

Webinar – ABAP® 7.55 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

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

Links

Blogs/Links

Unsere nächtes Webinar

SAP Community Call

SAP® Community Call – Was muss ein ABAP® Entwickler wissen um in S/4 bestehen zu können

Am 15. Dezember 2020 haben wir in einem von der SAP organisierten Community Call über ABAP und was ein Entwickler unbedingt wissen sollte um in S/4 bestehen zu können gesprochen. Natürlich gäbe es viel mehr Themen und mancher Teilnehmer sieht den einen oder anderen Punkt vielleicht anders. Jedenfalls haben wir im Call über die aus unserer Sicht wichtigsten Punkte gesprochen:

  • ABAP Syntax: ABAP Objects, Expressions
  • Code Pushdown: SQL Expressions, CTEs, CDS Views, AMDP
  • IDEs: ADT, BAS, Visual Studio Code
  • Tools in ABAP: Statische Codechecks, Analysetools in ABAP
  • Programmiermodelle: BOPF, RAP, OData, Fiori Elements, Gateway
  • Erweiterbarkeit: OnPrem, In-App, Side-by-Side
  • ABAP Steampunk
  • ABAP Open Source: dotabap.org, abapgit
  • Clean Code: Clean ABAP, Refactoring, Unit Tests

Der Community Call wurde aufgezeichnet und steht via https://www.youtube.com/watch?v=MdHwS_C7mHE&feature=youtu.be zur Verfügung.

PDF Slides mit Links: SAP Community Call S4ABAP Link

Zuordnung von Marketing-Attribute-Sets zu Geschäftspartnern

Marketing-Attribute-Sets sind eine Sammlung von einzelnen (1..n) Marketing-Attributen.

Sie können Geschäftspartnern zugeordnet werden, wodurch die Attribute des Set beim Partner bewertet werden können.

Attribute werden mit der Transaktion CRMD_PROF_CHAR Merkmale bearbeiten gepflegt. Die Set mit CRMD_PROF_TEMPL Merkmalsgruppen bearbeiten.

 

Um Geschäftspartner mit einem bestimmten Set zu finden, braucht man folgende Tabellen:

  • KLAH        Klassenkopf Daten
  • KSSK         Zuordnungstabelle: Objekt zu Klasse
  • INOB         Zuordnung einer internen Nummer zu einem bel. Objekt
  • BUT000    GP: Allgemeine Daten I

Mit diesem Select werden alle Partnernummern und Guids ermittelt, die das Attribut-Set ZCDX_DEMO_ATTR_SET zugewiesen haben

 

Und noch das Ergebnis – Nummer und GUID der relevanten BPs:

Information zum SQL Cockpit 3.6 – Releaseinfos

Webinar – SAP Fiori® Elements

Vielen Dank für Ihre Teilnahme an unserem Webinar!

 

Mit den SAP Fiori Elements hat uns SAP ein ziemlich cooles Werkzeug in die Hand gegeben, welches die Erstellung von Fiori Anwendungen extrem beschleunigt und vereinfacht. Als ABAP Entwickler kann man sich auf das Wesentliche konzentrieren, während sich das SAP Fiori Elements Framework darum kümmert, dass ein schönes, einheitliches Fiori Userinterface generiert werden.

In diesem Webinar haben wir einen Überblick über die SAP Fiori Elements vermittelt. Angereichert um ein paar live Demos.

Diesmal hat uns erneut Sören Schlegel von der Consilio unterstützt. Vielen Dank dafür!

Da wir wesentlich mehr Demos vorbereitet hätten, werden wir das nächste Webinar auch zum Thema „SAP Fiori Elements“ machen. Diesmal aber – No Slides, Just Code! Weitere Details weiter unten in diesem Blog bzw. direkter Link zur Anmeldung hier: SAP Fiori Elements Part 2 – Just Code.

Slides & Video

Links

Übersicht

SAP Blogs

Videos

Developer Tutorials

Buchtipp

Nicht vergessen, als DSAG Mitglied bekommt man bei SAP Press einen Preisnachlass. https://www.rheinwerk-verlag.de/dsag

Sonstige Links

Unser nächstes Webinar

Heuer findet noch ein weiteres Webinar statt. Da wir viel umfangreichere Live Demos vorbereitet hätten, wollen wir einen 2. Teil zum Thema SAP Fiori Elements machen. Diesmal jedoch NO SLIDES und gleich mal zur Sicherheit für 90 Minuten eingeplant. 60 Minuten Talk, 30 Minuten Q&A.

Common Table Expressions in ABAP®

Im Jahr 1999 wurde die vierte Überarbeitung von SQL unter dem Namen SQL:1999 bzw. SQL3 publiziert.  Unter anderem wurden mit SQL:1999 das WITH Konstrukt zur Verwendung von Common Table Expression eingeführt.

Eine Common Table Expression (CTE) erzeugt eine tabellarische Ergebnisliste welche nur temporär innerhalb einer SQL-Operation zur Verfügung steht.

Die Verwendung ist dann sinnvoll, wenn man z.B. Zwischenergebnisse benötigt, eine komplexe SQL-Anweisung übersichtlicher strukturieren will oder wenn die Zwischenergebnisse mehrfach benötigt werden.

Gerade wenn man sich um Clean Code bemüht, sollten auch CTE zur besseren Lesbarkeit eingesetzt werden.

Ab dem ABAP Release 7.51 stehen die Common Table Expressions nun auch für uns ABAP Entwickler zur Verfüfung.

Syntax

Die Syntax ist recht einfach. Eingeleitet  werden CTEs mit WITH:

  • Durch die optionale Angabe der Spaltennamen mit ( name1, name2, … ) direkt im Anschluss an den CTE Namen, können die Spaltennamen in der CTE Ergebnisliste überschrieben werden
  • Die CTEs müssen in der Hauptabfrage verwendet werden

Beispiele

Im nachfolgenden Beispiel werden Personen und Unternehmen mit CTEs gelesen. Im SELECT werden diese beiden CTEs mit der Relationstabelle BUT050 verknüpft.

In diesem Beispiel wird das Ergebnis der CTE als Subselect im SELECT verwendet.

Ergänzende Hinweise

  • Mit dem WITH Kommando wird die SAP-Pufferung umgangen
  • Sobald man WITH verwendet, wird die Syntaxprüfung mit strikten Modus 7.51 ausgeführt
  • ENDWITH ist ggf. gleich einzusetzen wie ENDSELECT
  • In der SAP Dokumentation sind die CTEs als „allgemeine Tabellenausrücke“ übersetzt

Links

Webinar – SAP®/ABAP® und Microsoft

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Ein Datenaustausch zwischen MS und SAP muss nicht immer ein CSV Up- oder Download sein. Dass hier mehr möglich ist, haben wir in diesem Webinar gezeigt.

Diesmal hat uns Sören Schlegel von der Consilio unterstützt. Vielen Dank dafür!

Unterlagen/Links zum Webinar „SAP/ABAP und Microsoft

Links

Unser nächtes Webinar

Das nächste Webinar findet nach der Sommerpause statt. Das Thema wird noch rechtzeitig bekannt gegeben, aber mit Sicherheit wird es wieder sehr interessant!

Refactoring mit den ABAP® Development Tools

In diesem Blog werde ich auf die wichtigsten bzw. interessantesten Refactoring Funktionen der ABAP Development Tools eingehen. Ich werde an dieser Stelle nicht weiter ausführen was Refactoring an sich ist bzw. warum wir unsere Entwicklungen regelmäßig einem Refactoring unterziehen sollten. Wer sich darüber informieren will, der soll bitte Googlen oder sich das Buch „Refactoring“ von Martin Fowler besorgen.

Bevor wir uns nun mit ADT beschäftigen, schauen wir mal, ob bzw. wie man bereits in der SE24 den Code überarbeiten kann bzw. ob es auch da schon ein Tool gibt?

Refactoring in der SE24

Ja, gibt es – Aber nur sehr wenige Entwickler kennen den Refactoring Assistent in der SE24. Mit Hilfe dieses Asistenten können Attribute oder Methoden einer Klasse in eine Superklasse oder ein Interface verschoben werden. Das war es dann aber auch schon wieder.

In einigen sehr alten Blogs ist noch von weiteren Funktionen die Rede, bei meinen Tests in aktuellen Systemen konnte ich jedoch keine der erwähnten Möglichkeiten vorfinden.

Ich gehe daher davon aus, dass dieses Tool irgendwann einmal da war und dann zumindest teilweise wieder entfernt wurde.

ABAP Development Tools

Nun aber zum eigentlichen Thema. Die Vorteile von ADT gegenüber der SE80 aufzuzählen, sprengt diesen Rahmen – aber ein wesentlicher Unterschied sind die umfangreichen Tools die so eine moderne IDE liefert. Und die Unterstützung des Refactoring-Prozesses mit dem Quick Assist ist dabei nur ein Aspekt.

Quick Assist

ADT stellt mit dem Quick Assist eine große Anzahl von Funktionen zur Verfügung die uns bei der Verbesserung unserer Entwicklungen unterstützen. Die zur Verfügung gestellten Funktionen können im groben in die zwei Bereiche eingeteilt werden:

  • ABAP Refactoring um die Struktur des Source Codes zu verbessern
  • ABAP Quick Fixes um Fehler oder Warnung zu beheben

Ergänzend dazu gibt es noch Quick Assists welche weder das eine noch das andere sind. Dazu zählen z.B. das Generieren von CONSTRUCTOR oder FACTORY Methoden oder die Erstellung von Text Symbolen. Ziemlich cool finde ich auch das Erzeugen von SET- bzw. GET-Methoden für ein Attribut.

Der Quick Assist/Quick Fix kann an jeder Stelle des Codes entweder über STRG 1 oder über das Kontextmenü aufgerufen werden:

Quick Assist View

Es gibt auch einen Quick Assist View welcher über STRG Shift 1 eingeblendet werden kann:

Ergänzenden zum Popup wird im View die zuletzt vorgenommene Anpassung im Bereich Previous Result angezeigt. Man kann hier direkt zu den veränderten oder erzeugten Elementen verzweigen. Im View werden die möglichen Quick Assists kontextabhängig permanent aktualisiert. Das Layout und die anzuzeigenden Inhalte des Views kann man über die Toolbar individuell anpassen.

Quick Assist Funktionen

Aktuell (ABAP 7.54 und ADT 3.10) gibt es um die 50 verschiedene Quick Assist Funktionen. Nachfolgend werde ich auf jene Funktionen eingeben, die uns beim Überarbeitung der Codes – dem Refactoring – unterstützen.

Umbenennen von Bezeichnern

Eine der wichtigsten Regeln für sauberen und lesbaren Code sind wohlüberlegte und aussagekräftige Namen für Methoden, Variablen oder auch Form Routinen. Mit der Quick Assist Funktion Rename können diese Bezeichner entweder nur lokal im aktuellen Source Code oder zusätzlich in allen anderen Source Codes wo die Komponente verwendet wird umbenannt werden.

Die beiden Funktionen können auch über die Shortcuts ALT SHIFT R oder STRG 2, R direkt aufgerufen werden. Zudem befindet sich die Funktion auch im Kontextmenü.

Variablen oder Konstanten extrahieren oder konvertieren

Zur Erstellung oder Änderung von Variablen existieren viele Möglichkeiten:

  • Lokale Variablen aus einer Expression erzeugen
  • Lokale Variable in ein Klassen Element umwandeln (Attribut oder Konstante)
  • Lokale Variable in einen Methodenparameter umwandeln
  • Lokale Variable aus einem funktionalen Methodenaufruf generieren
  • Inline deklarierte Variable in explizite Variable umwandeln
  • Nicht verwendete Variablen löschen
  • Konstanten aus einer Variable erzeugen
  • Bestehende Konstanten wiederverwenden

Nachfolgend ein Beispiel wie aus einer Expression eine lokale Variable erzeugt wird:

Und hier noch ein Beispiel, wie aus einer Variable eine Klassenkonstante erzeugt wird:

Methoden extrahieren

Vielleicht die wichtigste und hilfreichste Refactoring Funktion ist das Extrahieren von Codesegmenten oder einer markierten Expression in eine neu Methode.

Man kann neue Methoden aus einem markierten Codebereich oder aus einer markierten Expression generieren. Klingt nach nicht viel, ist aber vielleicht die wichtigste Refactoring Funktion überhaupt.

Verwirrend ist hier der Umstand dass die im Quick Assist View auswählbare Funktion Extract Method lediglich den Code in eine neue private Methode extrahiert. Es gibt jedoch zusätzlich die Möglichkeit mit ALT SHIFT M oder dem Kontextmenü einen Wizard für die Extraktion aufzurufen. Hier können detaillierte Angaben zur zu erstellenden Methode vorgenommen werden:

Wenn im zu extrahierenden Code mit impliziten Datendefinitionen oder impliziten Feldsymbolen gearbeitet wird, kann es bei der Generierung zu Problemen kommen. Um diese impliziten Definitionen in Explizite umzuwandeln gibt es glücklicherweise auch einen Quick Assist:

Methoden und Attribute verschieben

Manchmal muss die Sichtbarkeit verändert werden oder Methoden sollen in ein Interface verschoben werden. Um dies zu erreichen, gibt es folgende Quick Assists:

  • Sichtbarkeit von Methoden, Attributen oder Konstanten ändern
  • Methoden, Attribute oder Konstante in die Superklasse verschieben
  • Methoden, Attribute oder Konstante in ein Interface verschieben.

Im nachfolgenden Beispiel wird eine Methode in ein Interface verschoben:

Um die Sichtbarkeit eines Attributes oder eine Methode zu ändern, genügt es natürlich auch im Source Code der Klassendefinition das entsprechende Objekt per cut/past in einen anderen Sichtbarkeitsbereich zu verschieben.

Ausnahmenbehandlung

Das mit den Ausnahmen ist in ABAP so eine Sache. Sehr oft werden Ausnahmen gar nicht, teilweise oder einfach falsch eingesetzt. Die meisten Quick Assists für Ausnahmen sind leider erst mit 7.50 zur Verfügung.

Unter anderem können folgende Quick Assists verwendet werden:

  • Unbehandelte Ausnahmen in die Methodensignatur aufnehmen
  • TRY/CATCH für einen markierten Bereich erzeugen
  • Catch Variable extrahieren

Links

Zusammenfassung

Es gibt nur eins: Jetzt wird gerefactored!

Webinar – Online gegen Corona im SAP® Umfeld

Vielen Dank für Ihre Teilnahme am Webinar!

Ich möchte mich nochmals ausdrücklich bei allen Co-Hosts und bei Svea Becker bedanken!

Damir Majer @majcon
Christian Drumm @ceedee666
Enno Wulff @ennowulff
Sören Schlegel @SoSchlegel87
Domi Bigl @DomiBiglSAP
Johann Fößleitner @foessleitnerj
Svea Becker @sveabecker3112

 

Unterlagen/Links zum Webinar „Online gegen Corona im SAP Umfeld

 

Links aus den Folien

Nachfolgend alle Links aus den Folien

 

Ressourcen der SAP und HPI

developers.sap.com
answers.sap.com
blogs.sap.com
developers.sap.com/tutorial-navigator.html
community.sap.com/programs
community.sap.com/resources/community-calls
events.sap.com/teched/en/sessions.aspx
open.sap.com
open.hpi.de

 

Community Blogs

abapblog.com (by Łukasz Pęgiel)
tricktresor.de (by Enno Wulff)
zevolving.com (by Naimesh Patel)
sapyard.com
codezentrale.de

 

Community Newsletter

abapweekly.info  – (ABAP Newsletter by Damir Majer)

 

Community Events

wiki.scn.sap.com/wiki/display/events (SAP Inside Tracks, ABAP Events, Stammtische)
opensit.net (Recent SAP Inside Tracks)
blogs.sap.com/2020/02/21/announcing-sap-inside-track-online-in-may-2020 (SAP Online Track in May 2020)
wiki.scn.sap.com/wiki/display/events/ABAP+CodeRetreat (ABAP CodeRetreat)
wiki.scn.sap.com/wiki/display/events/SAP+Inside+Track – (Inside Tracks, Stammtische, ABAP Events)

 

Streaming & Videos

youtube.com/playlist?list=PLzLY5gikd9hCE52Xlz9e9tYGQj_U2ThYx  – (Max’s Adventure in SAP Cloud Platform by Max Streifeneder)
youtube.com/playlist?list=PL068D7CC6E905E638 – (SAP Code Talk by Ian Thain)
youtube.com/c/christiandrumm – (Christian Drumm FH Achen)
youtu.be/mxybNzCjN98 – (ABAP Freak Show by Thomas Jung)
youtube.com/playlist?list=PL6RpkC85SLQAIntm7MkNk78ysDm3Ua8t0 – (Hands – on SAP dev with qmacro by DJ Adams)
youtube.com/playlist?list=PLmhd8krmIyyhUkFBuGYG0k4lXYWG63RK_ – (Code at home with qmacro by DJ Adams)
youtube.com/channel/UCRhV_0Jlwgz_v3jmAuhHYZg – (SAP Hana Academy)
blogs.sap.com/tag/sapcommunityreportlive – (SAP Community Report Live by Craig Cmehil)

 

Podcasts

open.sap.com/static/education-newscast/ (Education NewsCast)
anchor.fm/sap-community-podcast (Coffee Corner Radio)
se-radio.net/ (SERadio)
innoq.com/de/podcast/ (INNOQ Podcast)

 

Sonstiges

dsag.de/veranstaltungen/liste (DSAG Veranstaltungen)
rheinwerk-verlag.de/sap/ (SAP PRESS)
rheinwerk-verlag.de/dsag/ (SAP PRESS – DSAG Discount!)
de.espresso-tutorials.com/ (Espresso Tutorials)
dotabap.org/ (ABAP Open Source Projects)

 

Unsere nächstes Webinar

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

Vielen Dank für Ihre Teilnahme an unserem Webinar!

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

Links

Blogs

Unsere nächtes Webinar