Es war wieder eines dieser Déjà-vu-Erlebnisse. Gestern erwähnte ich beim Eclipse Modeling Stammtisch, dass Eclipse sozusagen mein Hobby ist. Ich verdiene meinen Lebensunterhalt mit der SAP R/3-Entwicklung (und tue dies immer noch, wenn ich die Zeit dafür habe). Ja, genau: ABAP. Und es macht mir tatsächlich Spaß. Jetzt können Sie sich die Gesichtsausdrücke eines durchschnittlichen IT-Experten vorstellen – von Verwunderung bis hin zu Unglauben oder sogar Abscheu reichen. ABAP – wie kann man das mögen?
Witzig ist allerdings, dass fast niemand, mit dem ich in letzter Zeit gesprochen habe, der diese Einstellung zeigte, über praktische Erfahrung mit der ABAP-Entwicklung verfügte. Die Geschichte, die ich meistens zu hören bekomme, ist: „Es gab diesen Kurs an der Universität, und ein Typ mit einem Lebenslauf, der aussah wie ein ‚Master of Business Admiration‘, hat uns erzählt, wie man eine Packliste für einen Motorradhändler in der Materialwirtschaft zusammenstellt – und irgendetwas über Buchungen und Hauptbuchhaltung, aber das habe ich nicht verstanden.“ Es tut mir leid, aber das ist so, als würde man jemandem das Autofahren beibringen wollen, indem man ihn die Ersatzteilnummern eines einzigen Modells auswendig lernen lässt. Wenn man ein Technikfreak ist, braucht man ein anderes Bild: Was ist in dieser Schachtel, das mich dazu bringen könnte, sie zu öffnen? Gibt es Probleme könnte ich schneller oder eleganter lösen, wenn ich wüsste, wie dieses System funktioniert? Warum sollte ich mich an der ABAP-Entwicklung versuchen? Ich kann diese Fragen zwar nicht wirklich für Sie beantworten, aber ich werde versuchen, Ihnen einen anderen Blick auf das SAP R/3-System zu vermitteln – von Technikfreak zu Technikfreak. Wenn Sie kein Technikfreak sind, sind Sie trotzdem eingeladen, sich die Bilder anzusehen.

Sonnenblumengarten auf dem Dach des Changi Airport
Nur eine kurze Anmerkung für die Experten unter Ihnen: Ich vermeide bewusst, den Namen NetWeaver zu erwähnen. Meiner Meinung nach wird dieser Name viel zu häufig verwendet und deckt mittlerweile eine Unmenge von Systemen, Anwendungen und Techniken ab, die mehr oder weniger miteinander verbunden sind. Man kann sehr viel Zeit damit verschwenden, herauszufinden, was NetWeaver wirklich ist, wenn aus technischer Sicht betrachten, denn es handelt sich dabei nicht um einen technischen Begriff. Es ist ein Markenname, der für das Marketing optimiert wurde. Wenn Sie einen Namen brauchen, nach dem Sie googeln können, verwenden Sie zumindest „SAP Web Application Server for ABAP“ – ich glaube, so wird das „gute alte R/3-System“ heutzutage genannt. Und bitte fragen Sie mich nicht nach dem Java-Teil – ich habe nicht die geringste Ahnung, was SAP mit Java gemacht hat und warum man nicht einmal den Hostnamen ändern kann, ohne die gesamte NetWeaver-Entwicklungsinfrastruktur neu zu installieren …
Ich möchte bei jedem Tool, das ich verwende, über dessen Grenzen Bescheid wissen. Es kann wirklich frustrierend sein, viel Zeit damit zu verbringen, sich in ein Framework einzuarbeiten, nur um dann herauszufinden, dass es für das, was man sich vorgestellt hat, nicht geeignet ist . Wenn Sie also den nächsten großen Ego-Shooter schreiben wollen, vergessen Sie R/3. (Das wussten Sie schon, oder?) Wenn Sie Echtzeitverarbeitung benötigen, sich mit ausgefalleneren numerischen Algorithmen beschäftigen wollen, Ihre Software auf Mobiltelefonen laufen lassen oder beeindruckende 3D-Bilder rendern wollen, ist R/3 auch nichts für Sie. Es ist ein System, das für die Verwaltung von Geschäftsdaten konzipiert – und obwohl es sich nicht wirklich für den Inhalt von Geschäftsdaten interessiert, geht es von einigen Grundannahmen aus: Die Daten können in einer relationalen Datenbank gespeichert werden – der klassischen Variante, die an einem zentralen Ort installiert ist, nicht dieser faszinierende ‘Wir-ersetzen-Ihr-Dateisystem-durch-eine-Datenbank’-Ansatz’. Sie werden eine Art Dialogbildschirme benötigen, um die Benutzer bei Laune zu halten, und vielleicht eine Art Berichterstellung. Drucken wäre auch schön und einige Verbindungen zum Rest der Welt. Wenn es das ist, wonach Sie suchen, und wenn Sie es ertragen können, sich mit einem proprietären System zu befassen, dann kommen Sie mit.

Café-Schild in Christchurch, NZ
ABAP als Programmiersprache ist ohne die grundlegenden Komponenten, die sie unterstützen, mehr oder weniger
bedeutungslos. Denken Sie einen Moment an eine einfache datenbankgestützte Anwendung in Ihrer bevorzugten
Programmiersprache: Je nachdem, welchen Ansatz Sie verwenden, werden Sie wahrscheinlich entweder einige DDL-Anweisungen
schreiben, die Datenbank erstellen und dann den Code schreiben, um eine Verbindung zur Datenbank herzustellen und die
Daten zu bearbeiten, oder Sie werden einen OR-Mapper verwenden, um die Datenbankstrukturen automatisch generieren zu
lassen. Wenn Sie sich mit Modellierung auskennen, ist die Wahrscheinlichkeit hoch, dass Sie sowohl die DDL-Anweisungen
als auch den Code für den Zugriff auf die Daten generieren möchten. Bei der ABAP-Entwicklung haben Sie diese
Wahlmöglichkeiten nicht wirklich – Sie müssen die Datenbankstruktur selbst erstellen. Aber das ist auch schon alles, was
zu tun ist – sobald Sie die Struktur im zentralen Data
Dictionary definiert
haben, können Sie wie jeden anderen integrierten Datentyp verwenden. DATA foo TYPE i
deklariert eine Ganzzahlvariable
unter Verwendung eines der integrierten Datentypen, und DATA bar TYPE npat
deklariert eine strukturierte Variable
(denken Sie an einen Pascal-Record oder eine C-Struktur) mit genau der gleichen Struktur wie die Datenbanktabelle NPAT
(die die Patientendaten in der Krankenhausverwaltungsanwendung enthält). Das Deklarieren einer Variablen zum Speichern
der Daten mehrerer Patienten (denken Sie an ein Array oder eine List<...>
in Java) ist ebenso einfach: DATA baz TYPE TABLE OF npat
. Diese Art von temporärer Variable wird als interne Tabelle bezeichnet, um sie von der dauerhaften
Datenspeicherung in einer Datenbanktabelle zu unterscheiden. Sie sehen, wie stark die ABAP-Sprache das Datenwörterbuch
nutzt – und ohne das Wörterbuch macht praktisch kein ABAP-Programm Sinn. Dasselbe Muster tritt bei zahlreichen anderen
Gelegenheiten auf. Meiner Meinung nach ist dies einer der Hauptgründe, warum es keine „Open-Source-ABAP-Implementierung“
gibt – man müsste das gesamte System rund um die Sprache duplizieren.
Zugriff auf die
Datenbank ist ungefähr
genauso einfach – es gibt eine Standard-Datenbankverbindung, die immer vorhanden ist, sodass Sie einfach «SELECT whatever FROM NPAT INTO TABLE baz
. Es ist nicht nötig, einen Treiber zu laden, den Speicherort der Datenbank zu
ermitteln, eine Verbindungszeichenfolge zusammenzustellen, einige Anmeldeinformationen zu übergeben, eine Abfrage
vorzubereiten, sie auszuführen und das Ergebnis zuzuordnen – all dies ist im System integriert. Sie können sogar
SELECT
als Schleifenbefehl verwenden: SELECT whatever INTO bar
, dann etwas mit dem Inhalt von bar
tun,
ENDSELECT
. Aus Performance-Sicht ist das keine gute Idee, aber es vermittelt Ihnen vielleicht einen Eindruck davon,
wie einfach es sein kann, datenbankgesteuerte Anwendungen zu schreiben. Dies ist vielleicht auch eine gute Gelegenheit,
darauf hinzuweisen, dass das SAP R/3-System eine Datenbankabstraktionsschicht enthält. ABAP enthält eine Teilmenge der
verschiedenen SQL-Dialekte, die als Open SQL bezeichnet wird, und die ABAP-Laufzeitumgebung sorgt für die Übersetzung
der Open SQL-Befehle in die datenbankspezifische Syntax. Es ist möglich, diese Abstraktionsschicht zu umgehen, aber das
ist kaum jemals notwendig. Das Fazit lautet: Solange Sie sich an Open SQL-Anweisungen halten , müssen Sie sich nie um
die Datenbank selbst kümmern. Sie müssen sich nicht einmal um die Datenbank kümmern, die Ihre Kunden möglicherweise
verwenden – es ist durchaus möglich, Software auf einer Oracle-basierten Installation zu entwickeln und dann dieselbe
Software an einen Kunden zu liefern, der eine DB2, MaxDB oder eine andere unterstützte Datenbank verwendet – sie
funktioniert ohne jegliche Anpassung.

Saddleback (Orana Wildlife Park, NZ)
Apropos – wie bekommt man „ein Programm“ zum Kunden? Wie wir alle wissen, ist das Ergebnis weit mehr als das Programm selbst. Es gibt Datenbanktabellen, die Sie bereits kennen – und es gibt auch andere Artefakte, die mitgenommen werden müssen. Und wir müssen nicht einmal in den Kategorien von Hersteller-Kunden-Beziehungen denken – jede anständige SAP R/3-Installation besteht aus mindestens zwei Systemen. Die Standardkonfiguration besteht aus einer Dreisystemlandschaft mit einem Entwicklungssystem, einem QA- und Schulungssystem und einem Produktionssystem (wobei das QA-System in der Regel eine Kopie des Produktionssystems ist, um es auf dem neuesten Stand zu halten und so das Testen zu erleichtern). Wenn Sie also eine schöne Anwendung im Entwicklungssystem zusammengestellt haben, möchten Sie sie in das QA-System kopiert werden, um sie zu überprüfen, und dann in die Produktionsumgebung. Hier kommt CTS ins Spiel – das [Change and Transport System] (http://help.sap.com/saphelp_47x200/helpdata/en/d7/8eb9361a75ea43e10000009b38f839/frameset.htm). Das CTS ist ein Teil der Entwicklungsumgebung, der die Artefakte, die Sie erstellen, ändern oder löschen, nachverfolgt. Es zeichnet die Änderungen in einem sogenannten Transportauftrag auf. Sobald Sie fertig sind, geben Sie diesen Auftrag frei und weisen das CTS an, die neue Version von allem, was Sie angepasst und diesem Transportauftrag zugewiesen haben, zu bündeln. Diese Objekte werden dann aus dem Entwicklungssystem exportiert und in die nachfolgenden Systeme importiert. Je nach Konfiguration und Komplexität der Systemlandschaft kann dies manuell oder automatisch, mit oder ohne QA-Genehmigung erfolgen – Sie verstehen schon. Das CTS verfolgt auch, wer welches Objekt berührt hat, und verhindert, dass Sie in die laufenden Entwicklungsaufgaben anderer eingreifen, ohne es zumindest zu bemerken. Für viele Arten von Artefakten wird auch eine Historie der exportierten Versionen geführt, sodass Änderungen leicht nachverfolgt und frühere Versionen wiederhergestellt werden können. Darüber hinaus kann das CTS auch Konfigurationsänderungen nachverfolgen und somit sicherstellen, dass Ihre Multisystemlandschaft in einem einigermaßen konsistenten Zustand bleibt. Und meistens denken Sie nicht einmal daran – wählen Sie einfach den Transportauftrag aus und los geht’s.
Fortsetzung folgt…