ABAP® – Das gibt’s ja nicht!

Ich wollte schon länger einmal über ein paar seltsame Dinge in ABAP schreiben. Es gibt nämlich ein paar Sachen in ABAP bei denen man sich einfach nur wundert. Na dann, fangen wir mal an:

BSEG, MARA oder DMBTR

Wer kennt sie nicht, die berühmten SAP ECC Tabellen BSEG oder MARA. Auch die Felder DMBTR oder GSBER sind sicher jedem bekannt.

Aber warum gibt es eigentlich solche komischen Kürzel, haben die Entwickler hier einfach ein paar Buchstabenwürfel verwendet? Natürlich nicht, das sind ganz einfach Relikte
aus R/2. Übrigens, DMBTR steht für „Deutsche Mark Betrag“!dmbtr

In R/2 waren nur 4stellige Tabellennamen und 5stellige Feldnamen erlaubt. SAP hat zwar damals mit R/3 eine völlig neue Technologie geliefert, aber viele ABAP Codes, Tabellen und Prozesse wurden einfach 1:1 übernommen. Und bis dato hat sich bei SAP offensichtlich niemand getraut hier einzugreifen.

Das älteste Programm das ich in einem aktuellen ECC gefunden habe, weißt Kommentare aus dem Jahr 1989 auf!

Bin schon jetzt gespannt, ob wir die Tabellen in S/4 HANA wiederfinden.

 

FOR ALL ENTRIES

Manche ABAP Entwickler schwören auf den FOR ALL ENTRIES Zusatz, manche verteufeln ihn. Ich bin da gespalten denn eigentlich mag ich das Zeug überhaupt nicht, aber andererseits komme auch ich manchmal nicht darum herum.

Aber was ich wirklich – sagen wir mal bescheiden – finde ist, wie ein SELECT mit FOR ALL ENTRIES reagiert, wenn die FOR ALL ENTRIES-Tabelle leer ist. Es werden einfach alle sonstigen Selektionsbedingungen komplett ignoriert und ein kompletter Tablescan durchgeführt. Ohne ersichtlichen Grund.

Hier ein Auszug aus der SAP Online Original Dokumentation:

Before using an internal table itab after FOR ALL ENTRIES, always check that the internal table is not initial. In an initial internal tables, all rows are read from the database regardless of any further conditions specified after WHERE. This is not usually the required behavior.

Nicht zu vergessen ist, dass FOR ALL ENTRIES auf unterschiedlichen Datenbanken teilweise ganz unterschiedlich performant ist. Es gäbe noch viele weitere Argumente (Bufferung, .. ) FOR ALL ENTRIES nicht zu verwenden, aber belassen wir es erst einmal dabei.

Man merke sich jedenfalls: Immer die Größe der FOR ALL ENTRIES Tabelle vor dem SELECT überprüfen – oder noch besser, über Alternativen wie JOINs oder Subselects nachdenken.

 

POOL/Cluster Tabellen

Oh, wie ich diese POOL und CLUSTER Tabellen liebe. Von der Technologie her betrachtet meiner Meinung nach einfach ein ziemlicher Schwachsinn. – Aber auch für diese Technologie gibt es einen triftigen Grund: Wie oben erwähnt waren in R/2 Tabellen nur max. 4stellig. Irgendwann ist SAP dann mit der 4stellen Limitierung einfach an Grenzen gestoßen und hat daher versucht hinter einer Tabelle mehrere Tabellen abzubilden. Das war die Geburt der POOL/CLUSTER Tabellen!

Aber es gibt Hilfe! Wenn wir dann einmal alle auf SAP Hana umstellen bekommen die POOL/CLUSTER Tabellen nach so vielen Jahren endlich ihren verdienten Ruhestand.

Es wäre aber nicht SAP wenn sie für den Vorgang nicht auch einen Namen gefunden hätte: „Depooling/Declustering“.

 

ABAP Open SQL und SQL92

SAP hat mit den aktuellen NetWeaver Releases 7.40 SP5, SP8 und SP12 bzw. NetWeaver 7.50 ein paar wichtige Erweiterungen in das ABAP Open SQL aufgenommen und nähert sich so nach und nach dem Standard SQL92. Manche ABAP Entwickler sind deswegen (SQL Expressions, CDS Views, … ) in heller „Juhu!“ Aufregung!

Liebe Entwickler, bitte vergesst nicht – das 92 hinter SQL Steht für das Jahr! Im Jahr 1992 wurde der Standard definiert. Diese jetzt aufgenommenen Erweiterungen werden von allen namhaften Datenbanken bereits seit Jahrzehnten unterstützt.

Ich meine, eine Erweiterung von ABAP Open SQL war seit Jahren längst überfällig!

 

TCURX

In der TCURX ist gecustomized, wie die Dezimalstelle von Währungen in einem SAP zu interpretieren sind. Wieso das?

Geboren wurde die Tabelle noch im R/2, als auch noch Währungen wie die italienische Lira existiert haben. Die Lira waren teilweise so „groß“ dass die Betragsfelder im R/2 nicht mehr ausgereicht hätten. Also hat man kurzerhand die Kommastellen laut Datenbank außer Kraft gesetzt und dafür die Tabelle TCURX erschaffen. Erst wenn eine Währung nicht in der TCURX enthalten ist, gelten für die Währung die 2 Nachkommastellen.

Im Bereich von Schnittstellen ist das immer wieder ein extra Aufwand – nur um die Betragfelder hin und her zu konvertieren. Beispielswiese für YEN.

Ob man hier nicht irgendwann einmal eine besser Lösung hätte finden können?

 

Jetzt also doch, CODE PUSH DOWN

Jahrelang hat SAP ihren Kunden und uns Entwickler gesagt, DB Nahe Operationen (EXEC SQL, DB Hints, … ) nur in begründeten Fällen und mit Vorsicht zu verwenden. Man verliere so die Unabhängigkeit zur Datenbank oder hat natürlich einen Adaptierungsaufwand wenn gleiches Coding mit verschiedenen Backend-Datenbanken laufen soll.

Nun, da SAP jetzt mit SAP Hana ja eine eigene tolle Datenbank hat, sieht die Sache natürlich etwas anders aus. Jetzt empfiehlt SAP sogar direkter auf der Datenbank „operieren“ um deren Vorteile auch wirklich nutzen zu können. Das Modewort dafür ist „Code Push Down“. Aus ABAP Sicht werden darunter die CDS Views, die AMDB Prozeduren und die SQL Expressions verstanden. Auf der SAP Hana ist darunter z.B. SQL Script zu verstehen.

Nicht falsch verstehen, ich bin ein großer Fan von SAP Hana. Die ist einfach – sorry für den Ausdruck – Sauschnell!

Ich find es halt einfach nur interessant.

 

HCP IoT Raspberry Demo

iotdemo0

Im Jahr 2015 ist mit dem  Begriff IoT ein neuer IT Trend vermehrt aufgetaucht. Gartner zählt IoT als einen der 10 wichtigsten IT Trends des Jahres 2016:

http://www.gartner.com/newsroom/id/3143521

Ich habe dies zum Anlass genommen und wollte die in der HCP zur Verfügung gestellten Services im IoT Bereich einem Praxistest unterziehen. Um den neuen IoT Service der HCP zu testen habe ich meinen RaspberryPi als Sensor Datenlieferant umfunktioniert.

Hierzu gibt es unzählige Guides und unterschiedliche Sensoren auf die ich hier nicht genauer eingehen möchte. Für mein Beispiel habe ich jedenfalls einen DHT22 (Temperatur/ Luftfeuchtigkeit) von AdaFruit verwendet. Er soll seine Daten später zum IoT-Service der HCP schicken.

 

Einrichten der HCP

Zuerst benötigen wir einen Account auf der HCP Trial. Dieser kann via https://account.hanatrial.ondemand.com erstellt werden. Haben wir unsere Zugangsdaten erhalten so aktivieren wir zuerst im Menüpunkt Services den „Internet of Things Service“:

iotdemo1

Die HCP generiert nun ein Schema und auch eine Java Applikation welche wir im über den Menüpunkt Subscriptions(iotcockpit) sehen können und auch starten wollen. Im IoT Cockpit ist es nun ganz wichtig im Menüpunkt Roles den eigenen User zuzuweisen. Da es hier bei mir immer zur Verwirrung gekommen ist habe ich kurzerhand beide User assigned die in der HCP immer wieder auftauchen(also s-User und s-User+trial).

iotdemo2

Ist dies erledigt finden wir im Punkt Overview die Start-URL zu unserem IoT Cockpit.

iotdemo3

Mit einem Klick auf die URL starten wir nun das Cockpit.

Devicekonfiguration

Im Cockpit müssen wir nun unsere Devices konfigurieren, damit unser IoT Service auch mitbekommt welche Geräte Sensordaten schicken dürfen.
Dazu bekommen wir pro registriertem Device einen Token, doch dazu später mehr. Im Device Management sehen wir nun die 3 Kacheln:

  • Device Types
  • Message Types
  • Devices

In dieser Reihenfolge werden wir nun auch vorgehen um unser IoT zu konfigurieren.

Device Types

Zuerst legen wir mit einem Klick auf die Kachel „Device Types“ den Device Type an. Am unteren Ende findet man einen Button mit einem Plus. Hier muss man sonst eigentlich nur einen Namen vergeben.

Message Types

Nun weiter zum Message Type. Hier definieren wir eine Struktur wie die Daten geliefert werden sollen. Mit dem Plus am unteren Ende können wir nun einen neuen Namen auswählen und im Folgeschritt die Struktur definieren. In meinem Fall habe ich hier den Namen temperatur gewählt mit 2 Feldern, temperatur(Temperatur) und humidity(Luftfeuchtigkeit).

iotdemo4

Device

Auch hier beim Device haben wir wieder ein ähnliches vorgehen. Mit dem Plus unten legen wir das neue Device an und wählen unseren Namen gemeinsam mit der Device Type die wir im Schritt 1 angelegt haben.

Ist das Device angelegt bekommen wir in einem Popup einen OAuth token angezeigt.

In der Registerkarte Information sehen wir nun eine generierte Device ID, diese gemeinsam mit dem OAuth token aus dem Poup im Anlegeprozess zuvor brauchen wir in einem späteren Schritt. Deshalb bitte Beides notieren.

Geschafft unser Device ist nun eingerichtet!

Zurück im Overview starten wir nun die Kachel „Deploy Message Management Service“.

iotdemo5

Auf Deploy klicken, Popup bestätigen und die angezeigte URL klicken, damit wird das HCP Cockpit gestartet.

iotdemo6

Hier sehen wir nun im Overview beim Punkt State, dass der Service am Starten ist. Es kann sein, dass es bis zu 5 Minuten dauert bis der Status auf Grün und gestartet ist.

Ist der Status einmal auf Grün so können wir von unserem Cockpit Daten zum IoT Service schicken.

Hierzu gibt es auf GitHub ein Starterkit(basierend auf PYTHON) welches man verwenden kann: https://github.com/SAP/iot-starterkit

Ich habe mich jedoch für PHP mit der cURL Extension entschieden, da ich bereits ein PHP Script hatte welches die Daten für einen anderen Service zur Verfügung stellte.

Die in eckige Klammern gesetzten Zeichen:

[USER]: HCP Trial User
[MessageTypeID]: Message Type ID aus dem Cockpit
[oAuth Token]: oAuth Token aus dem Cockpit des registrierten Device
[DeviceID]: DeviceID aus dem Cockpit des registrierten Device

Bitte mit den zuvor notierten Daten richtig versorgen:

Dieses Script habe ich in der Crontab des auf Linux basierenden Raspbian Betriebssystem eingetragen und wird in meinem Fall alle 5 Minuten aufgerufen.

Das Ergebnis können wir nun in unserem MMS Cockpit betrachten, welches wir aus dem iot Cockpit heraus mit der Entsprechenden Kachel starten können.

iotdemo7

Weiterführende Links

https://de.wikipedia.org/wiki/Internet_der_Dinge

https://help.hana.ondemand.com/iot/frameset.htm

Onlinekurs ABAP development for HANA

Onlinekurs „ABAP® development for HANA“

Wir, die Entwickler der Firma Cadaxo, beschäftigen uns seit einiger Zeit mit SAP HANA. Nach vielen gemeinsamen internen Know-how-Transfers und Diskussionen, haben wir uns entschieden, beim Onlinekurs „ABAP Development for HANA“ auf open.sap.com mitzumachen, um unser Know-how zu vertiefen.

Der Kurs erstreckte sich über vier Wochen und wurde von den Instruktoren Dr. Jasmin Gruschke und Jens Weiler auf Englisch gehalten. Wie es die Namen schon verraten, sind die beiden gebürtige Deutsche und wie man schon ahnen kann, drang der deutsche Akzent ziemlich stark durch – vor allem bei Jens Weiler, was mich immer bei guter Laune während des Vortrags hielt.

Im Kurs geht es hauptsächlich darum, was im SAP zu tun ist, wenn man HANA einführt. Bestehendes Coding zu analysieren, worauf man achten muss und mit welchen Tools man das am besten macht.

Der zweite große Teil behandelt Optimierungen – datenbankorientierte Programmierung und Verwendung von HANA-spezifischen Features.

Erst im Laufe des Kurses ist mir wirklich bewusst geworden, wie effizient HANA sein kann. Ein tieferer Blick in die Funktionsweise von HANA, ein paar Demos, in denen enorme Massendaten sekundenschnell aufbereitet und angezeigt werden – und man erkennt den signifikanten Unterschied zur traditionellen Datenbank.

Hier ein paar Themen, die mir am besten gefallen haben und auf die ich in weiteren Beiträgen näher eingehen werde:

  • Bestehendes Coding – was funktioniert nicht mit HANA und muss adaptiert werden
  • Performance von bestehendem Coding – Richtlinien und Ergänzungen
  • Core Data Services-Views – Was ist es und wofür kann ich es verwenden

Ich hoffe, dass auch für euch ein paar interessante Themen dabei sind!

SAP Fiori® in a nutshell

Eines gleich vorweg: auf dem UI Sektor tut sich was. Ich möchte Ihnen in einem kurzen Überblick den Aufbau, die wichtigsten Features und Einsatzmöglichkeiten des neuesten SAP UI Babys Fiori geben.

Was ist SAP Fiori?

SAP Fiori, oder SAP Fiori UX, ist SAPs neue „User Experience“, also quasi ein neues „Benutzererlebis“ und steht für neue, moderne Designprinzipien.

Es stellt die etwa 200 am häufigsten genutzten SAP-Funktionen auf einer neuen, intuitiven Benutzeroberfläche bereit, die man an seine persönlichen Wünsche anpassen kann.

Entwickelt wurde Fiori sowohl für Manager und als auch für Mitarbeiter.

Man kann verschiedene Tätigkeiten wie z. B. Self Service Workflows, Abwesenheitsanträge, Zeiterfassung oder Bestellungen durchführen, und diese dann direkt in Fiori anlegen und dort auch genehmigen.

Ganz egal, ob am PC, am Tablet oder am Smartphone, SAP Fiori läuft auf allen drei Gerätearten gleichermaßen gut. Somit hat man dieselbe User Experience (eben UX), also das Benutzererlebnis, auf allen drei Geräten.

Die Oberfläche basiert auf SAP UI5 und passt sich unterschiedlichen Bildschirmgrößen an.

SAP Fiori ist kostenlos.

Apps

SAP Fiori basiert auf Apps, die unterschiedliche Einsatzgebiete und auch technische Anforderungen haben.

Es gibt drei Arten von Apps:

Die Transactional Apps – wie der Name schon sagt, kann man mit ihnen Transaktionen durchführen, wie z. B. Urlaubsanträge von Mitarbeitern bearbeiten und diese genehmigen. Aufgrund der Perfomance wird empfohlen SAP HANA zu verwenden, allerdings laufen diese auch auf anderen Datenbanken.

Die Analytical Apps – das sind quasi Real Time Informationen aus der SAP Business Suite, also damit kann man sich seine Key Performance Indikatoren live anschauen. Diese Apps brauchen relativ viel Performance und laufen NUR auf SAP HANA.

Die Fact Sheets – diese zeigen Informationen an. Man kann von einem Fact Sheet zum nächsten browsen. Angezeigt werden verschiedene Inhalte und Informationen, die im Zuge der Business Operations relevant sind. Diese laufen auch NUR auf SAP HANA.

Weiters gibt es eine Wave 1 mit 25 Apps (aus den Bereichen: Human Ressources, Sales, Procurement) und eine Wave 2 mit 180 Apps (unter anderem aus dem Bereichen: Manufacturing, Finance, Supply, …)

Praktischer Nutzen

Stellen Sie sich vor, Sie stehen als Manager gerade in der Früh beim Bäcker, und es steht eine Liste von Freigaben für Aufträge an, und Sie können diese schnell und einfach auf Ihrem Handy erledigen. Im Büro angekommen legen Sie schnell ein paar Kundenaufträge an, und kurz darauf bei einem Meeting haben Sie auch schon wieder die wichtigsten Informationen auf einem Tablet zu den wichtigsten Lieferungen und Rechnungen schnell zur Hand. Einfach und praktisch mit SAP Fiori, damit können Sie praktisch an jedem Ort mit einer einheitlichen Benutzeroberfläche arbeiten. Diese passt sich, dank der Responsive-Design-Prinzipien, einfach an die Formfaktoren der verschiedenen Geräte an, und so haben Sie auf allen Plattformen die gleiche Benutzeroberfläche zur Verfügung.

Fazit: alles in allem ist es ein großer Gewinn an Benutzerfreundlichkeit und Performance.

Um in „SAP Fiori Style“ zu programmieren, muss man gewisse Guidelines beachten und in UI5 entwickeln.

UI5

SAP UI5 ist SAP’s Toolkit zum Bauen von Web Applikationen mit HTML5.

Es basiert auf Java Script.

Dafür gibt es ein eigenes SAPUI5 JavaScript Development Toolkit mit dem man auf HTML5 basierende Web Applikationen schreiben kann. D.h. es ist quasi ein Sammlung von libraries mit denen man Desktop und Mobile Applikationen schreiben kann, die in einem Internetbrowser laufen.

Es gibt eigene Development Guidelines, die beschreiben wie man damit Webseiten entwickeln kann.

Wie sieht so etwas aus?

Mit JSON:

Weitere Informationen zu Fiori finden Sie in den verschiedenen SAP Fiori Dokumentationen.

Viel Spaß beim Entdecken!

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