Kundenindividueller Object Collector für den SAP®/ABAP® Code Inspector

Die Objekt-Selektion des Code-Inspectors kann durch einen eigenen Object Collector erweitert werden. Der Standard bietet zwar viele Selektionsmöglichkeiten, manchmal reichen dies aber einfach nicht aus.

ci_own_collector_1

Die notwendige Erweiterung gestaltet sich relativ einfach. Es muss lediglich eine Klasse mit dem Interface IF_CI_COLLECTOR implementiert werden. Üblicherweise wird die Super-Klasse CL_CI_COLLECTOR_ROOT vererbt. Das Interface verfügt über folgende Methoden:

Interface IF_CI_COLLECTOR Methoden

  • COLLECT In dieser Methode ist die Objekt-Selektion auszuprogrammieren und dem Export-Parameter P_OBJSLIST zu übergeben. Anwender können den Objekt-Collector mit Filterwerten starten, diese Werte stehen in den Parametern P_CONFINE_* zur Verfügung.
  • QUERY_ATTRIBUTES In dieser Methode werden Attribute wie der Titel der Selektion bzw. die Select-Options/Parameter definiert. Als Vorlage bei der Implementierung kann man sich die Implementierung der Klasse CL_CI_COLLECTOR_ST22 ansehen.
  • GET_ATTRIBUTES/SET_ATTRIBUTES Die Methoden dienen der Kommunkation zwischen Code Inspector Framework und dier implementierten Klasse. Mittels EXPORT/IMPORT from MEMORY werden die Attribute übergeben. Auch hier kann die Klasse CL_CI_COLLECTOR_ST22 als Vorlage verwendet werden.
  • DISPLAY_DOCUMENTATION Wenn der Collector über eine Dokumentation verfügt, kann hier die Anzeige der Dokumentation gestartet werden.

Interface IF_CI_COLLECTOR Attribute

Das Interface verfügt über einige Steuerparameter welche als globale Attribute umgesetzt wurden. Hier die wichtigsten Attribute:

  • DESCRIPTION Kurzbeschreibung des Object Collector.
  • NAME Name des Object Collectors
  • HAS_DOCUMENTATION ABAP_TRUE bzw. ABAP_FALSE je nachdem, ob der Collector über eine Dokumentation verfügt. Wenn ABAP_TRUE ist im Popup der Button für die Dokumentation aktiv. (siehe Methode DISPLAY_DOCUMENTATION)
  • HAS_ATTRIBUTES ABAP_TRUE/ABAP_FALSE je nachdem, ob der Collector über Attribute verfügt. Wenn ABAP_TRUE ist im Popup der Button für die Parameter aktiv.

Meine Empfehlung

Am Einfachsten und Schnellsten gestaltet sich die Implementierung, wenn man die vorhandenen Code Inspector Collectoren (CL_CI_COLLECTOR*) der SAP als Vorlage verwendet.

Einbinden einer eigenen CSS Styleklasse in SAPUI5® Controls

Die visuelle Darstellung eines SAP UI5 Controls kann mit mehreren Möglichkeiten angepasst werden. Eine Möglichkeit besteht darin, eine eigene CSS Style Klasse zu definieren und an das SAP UI5 Control anzuhängen.

Erweiterung der SAP UI5 INDEX Datei

In der index.html Datei wird die neue Style Klasse hinzugefügt:

democssclass1

Anpassung im SAP UI5 View

Im SAPUI5 View kann die neue CSS Style Klasse nun mit der Methode addStyleClass an ein SAPUI5 Control angehängt werden:

democssclass2

Darstellung des SAP UI5 Controls

Wie erwartet sieht dann das gewünschte Ergebnis (weißer Text, kursiv auf schwarzem Hintergrund) wie folgt aus:

democssclass3

Wie eine Smartwatch mein Leben verändert hat

Pebble TimeIch war schon länger auf der Suche nach einem smarten Begleiter für mein Handgelenk. Aber bisher hat mir keines dieser Dinger so recht zugesagt. Die wenigen, die mir auch optisch halbwegs gefallen haben, sind aus verschiedenen Gründen ausgeschieden:

  • Zu kurze Akkulaufzeit
  • Ungenügender Wasserschutz
  • Zu hoher Preis
  • Nicht kompatibel mit Android Phones

Dann hat aber Pebble die Pebble Time via Kickstarter angekündigt. Ich hätte diese Smartwatch nicht besser für mich designen können. Das Aussehen, die Leistung, die Funktionen – alles ist so ziemlich genau so, wie ich es designen würde. Wer braucht schon ein WLAN in der Uhr oder eine SIM Karte. – Ich jedenfalls nicht. Ich will ein Ding welches mir mein Leben erleichtert und nicht verkompliziert.

Der Bestellprozess bei Kickstarter war eigentlich recht einfach, auch wenn meine Kreditkartenfirma vorsorglich meine Karte gesperrt hat. Ihnen sei das Unternehmen „Kickstarter“ dubios vorgekommen.

Was bringt mir die Pebble?

Welch Überraschung: Die primäre Aufgabe liegt schlichtweg darin, mir die aktuelle Uhrzeit anzuzeigen. In einem von mir ausgewählten Watchface.

Das nächste entscheidende Feature einer Smartwatch liegt für mich darin, mich über verschiedenste Ereignisse – die ich selber steuern kann – am Laufenden zu halten:

  • Eingehende MailsPebble Time
  • Eingehende/Versäumte Anrufe
  • Anstehende Termine
  • Etc.

Auch das gehört natürlich zu den Kern-Funktionen einer Pebbel Time und wurde von Pebble ideal umgesetzt. Pebble ist sogar noch einen Schritt weiter gegangen und hat die Timeline eingeführt. In der Timeline findet man vergangene oder zukünftige Ereignisse chronologisch gereiht.

Dann wären da noch die Apps die mir mein Leben erleichtern. Beispielsweise im Sport, beim Radfahren oder Laufen. – Das Handy ist in der Tasche, die Pebble zeigt mir die wichtigsten Informationen von Runtastic oder Strawa an.

Das Killerargument hat aber nichts mit Features und Funktionen zu tun. Der Akku hält tatsächlich die angekündigten 7 Tage. Und das bei permanenten Farbdisplay. Da kann keine derzeit am Markt befindliche Uhr mithalten.

Aussehen

Normalerweise stelle ich immer den Zweck und die Funktion über das Design. Aber die anderen Smartwatches waren ganz einfach hässlich. Ich bin ein Kind der 80er, bin mit Commodore, Zurück in die Zukunft und VHS Rekordern aufgewachsen. Und diese Uhr erinnert mich einfach an diese sehr coole Zeit.
Ich programmiere wieder C!

Ein nicht unwesentlicher Entscheidungsgrund für die Pebble war die Tatsache, dass man relativ einfach eigene Watchfaces oder Watchapps entwickeln kann. Am Anfang war es etwas holprig, aber nach und nach bin ich wieder in die Entwicklung mit C reingekommen.

Und jetzt, nach 3 Monaten Pebble

Abgesehen von ein paar Kratzern bin ich nach wie vor begeistert von der Uhr. Früher hab ich keine Uhren getragen, jetzt bin ich wieder auf den Geschmack gekommen. Bevor ich in der Früh meine Wohnung verlasse, schnalle ich mir die Pebble um. Tag für Tag.

 

Update nach 5 Jahren

In der Zwischenzeit wurde Pebble durch Fitbit (und Fitbit durch Google) gekauft. Die Uhr wurde sofort eingestellt und die Server sind nun auch schon seit einiger Zeit abgedreht. Es hat sich aber ein Fangemeinde gefunden welche unter dem Projekt Rebble die Uhren I(bzw. die Server) am leben hält. Ich verwende die Uhr derzeit unregelmäßig da ich relativ viele Uhren habe und immer wieder wechsle.

ABAP® 7.02 New Features – Neue Stringfunktionen

SAP hat mit SAP NetWeaver 7.02 im ABAP Stack einige neue, interessante Stringfunktionen hinzugefügt. Die neuen Funktionen ersetzen einerseits bestehende ABAP Kommandos, andererseits liefern die Funktionen teilweise völlig neue Funktionalitäten. Nachfolgend gehe ich auf die einzelnen Stringfunktionen näher ein und zeige anhand von Beispielen die Anwendung der Funktionen.

cmax/cmin – Zeichenartige Extremwertfunktion

Mit den neuen Extremwertfunktionen cmax bzw. cmin können bis zu 9 zeichenartige Argumente verglichen werden und man erhält die größte oder das kleinste der übergebenen Zeichen als Ergebnis. Verglichen werden die Zeichen auf Basis der verwendeten Codepage von links nach rechts.

Beispiele:

Ergebnis: AAAD

Ergebnis: AZAB

Ergebnis: AAAB

Ergebnis: 0AAC

condense – Verdichtungsfunktion

Die Zeichenkettenfunktion condense verdichtet den Inhalt einer Zeichenkette. Im Gegensatz zum ABAP Kommando bietet die Funktion darüber hinaus jedoch noch einige weitere Möglichkeiten. Beispielsweise können mit der Funktion auch führende oder endende Zeichen entfernt werden.

Nachfolgendes Beispiel entfernt die führenden und endenden X und verdichtet die X zwischen abc und def auf ein X:

Ergebnis: abcXdef

concat_lines_of – Verkettungsfunktion

Diese Funktion verkettet die Zeilen einer internen Tabelle in eine Zeichenkette. Mit dem Zusatz sep kann ein Separator als Trenner zwischen den Zeilen eingefügt werden. Mit dem folgenden Beispiel werden alle Zeilen der Tabelle TAB in einen String, getrennt durch einen Strichpunkt verkettet:

escape – Fluchtsymbolfunktion

Die Funktion escape ermöglicht das regelbasierte Ersetzen eines Strings durch Fluchtsymbole. Die möglichen Regeln sind in cl_abap_format als Konstanten definiert.

Ergebnis:

insert – Einfügefunktion

Diese Funktion ermöglicht das Einfügen einer Zeichenkette an der ersten oder einer bliebigen Stelle einer anderen Zeichenkette. Nachfolgend ein Beispiel mit dem an der bestehenden Zeichenkette an einer spezifischen Stelle eine andere Zeichenkette eingefügt wird. Nach Ausführen der folgenden Zeilen enthält l_string den Wert ‘News in ABAP‘.

match – Abgleichfunktion

Die Funktion match durchsucht einen Text nach einer bestimmten Regex-Übereinstimmung und liefert die gefundene Teilmenge zurück. Groß-/Kleinschreibung wird standardmäßig berücksichtigt, kann jedoch übersteuert werden. Für weitere Informationen zu Regex in SAP bitte die SAP Online Dokumentation verwenden.

repeat – Wiederholfunktion

Hier wird eine Zeichenkette zurückgegeben, welche den Inhalt einer anderen Zeichenkette beliebig oft wiederholt. Mir fällt aktuell keine sinnvolle Anwendung ein, aber hier jedenfalls ein Beispiel, welches die Zeichenkette ‘ABC‘ 5-mal wiederholt und in das Feld l_string stellt:

replace – Ersetzungsfunktion

Mit replace wird ein Teilbereich einer Zeichenkette durch eine Übergebene Zeichenkette ersetzt. Einerseits besteht die Möglichkeit den Teilbereich über eine Offset- bzw. Längenangabe oder über ein Regex zu ermitteln.

Beispiele:

Ergebnis: ‘ABAP xISx GOOD‘

Ergebnis: ‘ABAPISGOOD‘

reverse – Umdrehfunktion

Auch diese Funktion klingt zwar sehr interessant, aber in meinem bisherigen ABAP Leben hab ich so eine Funktion noch nicht vermisst. Trotzdem hier kurz ein Beispiel, welches als Ergebnis den Inhalt einer Zeichenkette komplett umdreht:

Ergebnis: ABAP

Für ältere SAP Systeme existiert der Funktionbaustein STRING_REVERSE welcher den gleichen Zweck erfüllt.

shift_left/shift_right – Verschiebefunktion

Diese neuen Funktionen ersetzen im Prinzip das Kommando SHIFT bieten aber mit dem SUB-Zusatz (Substring) eine zusätzliche Funktion.

Beispiele:

Ergebnis: ‘CD‘

Ergebnis: ‘CDAB‘

Ergebnis: ‘CD‘

substring, substring_… – Teilfeldfunktion

Mit Hilfe dieser neuen Funktionen kann aus einer übergebenen Zeichenkette ein Teilfeld ermittelt werden. Ein wesentlicher Vorteil dieser neuen Funktion liegt darin, dass hier auch Regular Expressions verwendet werden können. Nachfolgend Beispiele für alle vorhandenen Substring-Funktionen:

Ergebnis: ‘DEFG‘ – Bei dieser Variante ist es jedoch sinnvoller (und schneller) mit l_result = l_field+3(4) zu arbeiten.

Ergebnis: ‘DEFGH‘

Ergebnis: ‘GH‘

Ergebnis: ‘ABC‘

Ergebnis: ‘ABCDEF‘

to_upper, to_lower, to_mixed, from_mixed – Groß-/Kleinschreibungsfunktionen

Auch hier handelt es sich um Funktionen, die teilweise bestehende Kommandos ersetzen. „to_upper“ und „to_lower“ wandeln die Inhalte einer Zeichenkette in Groß- bzw. Kleinbuchstaben um. Völlig gleiches Ergebnis wie bei dem Kommando TRANSLATE TO UPPER/LOWER CASE.

Neu und interessant sind die beiden Funktionen to_mixed bzw. from_mixed. „to_mixed“ setzt alle Buchstaben ab der 2. Position in Kleinbuchstaben um. „from_mixed“ fügt von links nach rechts ab der 2. Position das erste im Zusatz sep angegebene Zeichen ein. Durch die Zusätze sep, case und min kann auf das Verhalten beider Funktionen Einfluss genommen werden.

Beispiel:

Ergebnis: ‘Cadaxo gmbh‘

translate – Umsetzfunktion

Auch hier wieder eine Funktion, die ähnlich zum bekannten ABAP Kommando TRANSLATE … USING … ist. Die Funktion liefert eine Zeichenkette zurück, bei der die Zeichen, die in FROM vorkommen durch das Zeichen ersetzt werden, welche in TO an der gleichen Stelle wie in FROM vorkommen. (Sorry für den verwirrenden Satz, einfach ein paar Mal durchlesen, dann wird’s klarer J )

Beispiel:

Ergebnis: ‘YBZD‘

distance – Ähnlichkeitsfunktion

Diese Funktion ist sehr interessant. Sie gibt den Editierabstand (Levenshtein-Distanz) zweier Zeichenketten zurück. Das ist die minimale Anzahl von Einfüge-, Lösch- oder Ersetzungsvorgängen, die notwendig sind, um die eine Zeichenkette in die andere Zeichenkette zu überführen. Mit dem Zusatz max kann ein Wert angegeben werden, der die Berechnung abbricht, sobald die Anzahl der Änderungsvorgänge größer wird. Die Verwendung der Funktion könnte z. B. bei Doublettenprüfungen interessant sein.

Beispiele:

Ergebnis: 2 (Ein „C“ und ein Leerzeichen müssen eingefügt werden)

Ergebnis: 4 (Alle Zeichen müssen ausgetauscht werden)

Erklärung und Anwendung von TIMESTAMPs in ABAP®/SAP®

Allgemeines zu den Timestamps

Gerade SAP Kunden sind meist global agierende Unternehmen, mit Mitarbeitern in verschiedenen Kontinenten bzw. Zeitzonen. Da leider immer noch viele Entwicklungen – auch im SAP Standard – nach wie vor nur mit sy-uzeit bzw. sy-datum arbeiten, habe ich mich entschlossen, hier ein paar Informationen zu Timestamps in ABAP bzw. SAP niederzuschreiben.

Die bereits erwähnten Systemfelder sy-datum und sy-uzeit sind für viele Anwendungen nicht ausreichend:

  • bei sy-datum und sy-uzeit handelt es sich um lokale Zeitangaben. Global agierende Unternehmen, mit Standorten in verschiedenen Zeitzonen müssen den Anwendern Zeiten in deren Zeitzone darstellen können.
  • sy-uzeit enthält die Zeit lediglich auf Sekunden genau.

Erzeugung eines Timestamps in ABAP bzw. SAP mit GET TIME STAMP

Für die Erzeugung eines aktuellen Timestamps in einem SAP System wird das ABAP Kommando get time stamp … verwendet. Das Kommando erzeugt einen Zeitstempel für die UTC-Zeit des aktuellen ABAP Systems. Entsprechend der Definition des Zielfeldes wird der Timestamp entweder in der Kurz- oder Langform erstellt. Üblicherweise werden für die Felddefinition der Timestamp-Felder die Datenelemente timestamp bzw. timestampl verwendet.

Im nachfolgenden Beispiel werden beide Timestamp-Formate erstellt:

Hinweis: Ein Timestamp ist nicht immer „eindeutig“. Sprich, ein Programm dass in kurzer Zeit mehrere Timestamps zieht, könnte unter Umständen die gleichen Timestamps ziehen.

Konvertierung/Umrechnung von Timestamps

Timestamps können mit Hilfe des Kommandos convert time stamp … in bzw. von Datum- bzw. Uhrzeitfeld (type d und t) konvertiert werden. Für die Konvertierung eines Timestamps in ein Datum- bzw. Uhrzeitfeld ist mit dem Zusatz time zone die Zeitzone anzugeben. Wie oben erwähnt, erhält man bei get time stamp den Zeitstempel in UTC Zeit. Bei der Konvertierung eines Datums bzw. Uhrzeit in einen Timestamp kann mit dem Zusatz time zone die Zeitzone für das Datum- bzw. Uhrzeitfeld mitgegeben werden.

Nachfolgendes Beispiel konvertiert einen Timestamp in ein Datum- bzw. Uhrzeitfeld. Als Ziel-Zeitzone wird die Zeitzone des Anwenders sy-zonlo verwendet. Die Zeitzone kann in den persönlichen Einstellungen am Userstamm eingestellt werden.

Nachfolgend das Gegenstück, ein Beispiel zur Konvertierung eines Datum- bzw. Uhrzeitfeldes in einen Timestamp:

Manchmal besteht die Anforderung darin, ein Datum/Zeit von einer Zeitzone in eine andere Zeitzone zu konveriteren. Ich verwende dazu als Hilfe die Konvertierung in einen Timestamp. Sprich, zuerst Konvertierung von Datum/Uhrzeit der Ausgangszeitzone in einen Timestamp, dann Konvertierung des Timestamps in Datum/Uhrzeit der Zielzeitzone.

Zusatz DAYLIGHT SAVING TIME field

Mit diesem Zusatz erhält man die Information, ob sich der Zeitstempel für die angegebene Zeitzone in der Sommerzeit befindet.

Klasse cl_abap_tstmp – Berechnungen von Timestamps

Für verschiedene Berechnungen, Prüfungen oder Konvertierungen steht in einem ABAP System die Klasse cl_abap_tstmp zur Verfügung. Die Klasse bietet verschiedene Methoden an, nachfolgende Methoden sind hervorzuheben:

  • add Addition von x Sekunden zu einem Timestamp
  • subtract Subtraktion eines Timestamps von einem anderen Timestamp
  • subtractsec Subtraktion von x Sekunden von einem Timestamp
  • compareVergleich von zwei Timestamps

Für weitere Informationen zu den restlichen Methoden bitte direkt in die Klasse/Methode einsteigen und die Dokumentation aufrufen.

Weitere Informationen stehen auch in der SAP Hilfe unter https://help.sap.com/docs/SAP_NETWEAVER_700/109dcbed6c531014bc94b876083bbe59/4d591ec163e444b4e10000000a42189e.html?locale=de-DE zur Verfügung

Ab 7.53 gibt es einen neuen Timestamp ABAP-Typ UTCLONG. – Details dazu unter  https://www.cadaxo.com/high-class-development/abap-7-54-neuer-timestamp-utclong/

SQL Cockpit unterstützt ab Release 2.1 auch sekundäre Datenbanken

Sekundäre Datenbanken im SAP

Mit den sekundären Datenbankverbindungen in SAP können OPEN SQL Befehle auch von anderen Datenbanken als der SAP Standarddatenbank ausgeführt werden. Sobald die Verbindung zur sekundären Datenbank eingerichtet ist, kann diese in den OPEN SQL Befehlen mit dem Zusatz CONNECTION angesprochen werden. Voraussetzung ist, dass es sich bei der Datenbank um eine von SAP unterstützten Datenbank handelt.

HANA Zugriff über sekundäre Datenbanken

Selbstverständlich unterstützt SAP in den neueren ABAP Releases die eigene SAP HANA. Somit kann beispielsweise in einem Side-by-Side Scenario die SAP HANA als sekundäre Datenbank angesprochen werden.

SQL Cockpit und sekundäre Datenbanken

Mit dem neuen Release 2.1 unterstützt das Cadaxo SQL Cockpit die sekundären Datenbanken im SAP in vollem Umfang. Die Verwendung ist exakt gleich wie in der gewohnten ABAP Entwicklung, durch den Zusatz CONNECTION. Einiger unserer Kunden haben bereits die SAP HANA im Einsatz und können nun mit dem SQL Cockpit rasch und einfach Performancevergleiche zwischen der Standarddatenbank und der SAP HANA durchführen.

Nachfolgend ein Beispiel, der den Zugriff auf eine sekundäre SAP HANA im SQL Cockpit zeigt.

sql_cockpit_screenshot_connection_db