Im ersten Artikel habe ich bereits einige Aspekte erwähnt, die ABAP zu einer meiner bevorzugten Entwicklungsumgebungen machen: das zentrale Datenwörterbuch und seine Verbindungen zur Sprache und zum Laufzeitsystem, der Datenbankzugriff und das Änderungs- und Transportsystem. In diesem Artikel möchte ich Ihnen ein paar Hinweise geben, was Sie bei der Entwicklung von ABAP-Programmen beachten sollten und was nicht.
Zunächst einmal ist das SAP R/3-System eine Mehrbenutzerumgebung – aber es fühlt sich nicht so an. Als Entwickler müssen Sie sich keine Gedanken über die Trennung von Benutzern und Sitzungen machen, denn das System erledigt das für Sie. Meistens können Sie ein Programm einfach so schreiben wie in den guten alten DOS-Zeiten, weil Sie einfach nicht auf die Laufzeitdaten anderer Sitzungen zugreifen und dort Chaos anrichten können. Sie müssen sogar einige zusätzliche Maßnahmen ergreifen, um einen gemeinsamen Speicherbereich zu erstellen – aber wenn Sie dies tun, sorgt das System für die Konsistenz des gemeinsamen Speichers nicht nur zwischen Sitzungen auf einem einzelnen Server, sondern auch über mehrere physische Anwendungsserver hinweg.
Apropos Anwendungsserver: Ein R/3-System kann über eine beliebige Anzahl von Anwendungsservern verfügen. Dies ist eine gängige Methode, um das System an die Anforderungen anzupassen: Fügen Sie einfach einige Anwendungsserver hinzu. Als durchschnittlicher Benutzer haben Sie keinen keinen Einfluss darauf, an welchem Server Sie sich als Nächstes anmelden – das System weist Ihnen einfach den Server mit der größten Zeitreserve zu. Natürlich können einige Teile des R/3-Systems nicht auf mehrere physische Server verteilt werden, insbesondere die Teile, die sich mit Sperren und der Erstellung von fortlaufenden Nummern (wie Materialnummern) befassen. Bei anderen Teilen (wie der Datenbank) lohnt sich die Verteilung der Last auf verschiedene Server oft nicht – Sie verwenden einfach eine „große und teure“ Maschine als sogenannte zentrale Instanz und lassen Ihre Benutzer sich nur bei einer Farm dedizierter und eher billiger Anwendungsserver anmelden. Wenn eine dieser Maschinen unerwartet ausfällt, verlieren Sie nur die nicht gespeicherten Arbeiten der Benutzer, die gerade auf dieser Maschine gearbeitet haben.

Juno Beach in der Nähe des Memorial in Courseulles-sur-Mer
ABAP unterstützt keine Parallelität auf Sprachebene. Dies ist zwar für einige GUI-intensive Anwendungen ein Nachteil, jedoch wird dadurch eine sehr häufige Ursache für Programmierfehler beseitigt, die sehr schwer aufzuspüren sind. Wenn Sie den GUI-Teil weglassen – und das müssen Sie beim Schreiben von R/3-Anwendungen, da die GUI selbst größtenteils außerhalb Ihrer Kontrolle liegt – braucht man in Geschäftsanwendungen kaum Parallelität. Was Sie – oder besser gesagt Ihre Benutzer – brauchen, ist eine zuverlässige und flexible Batch-Job-Engine, um Hintergrundjobs zu planen und die Ausgabe abzurufen. Sie haben es vielleicht schon erraten – das R/3-System wird mit einer Hintergrundverarbeitungs-Engine geliefert – und für den Entwickler ist diese Engine ohne Aufpreis erhältlich. (Fast) jedes Programm kann als Hintergrundjob gestartet werden. Sie müssen nur darauf achten, dass Sie nicht versuchen, auf das Front-End-System zuzugreifen, da ein Hintergrundjob keine Front-End-Verbindung hat. Das Hintergrundverarbeitungssystem verfügt auch über eine Funktion zum Planen von Jobs für eine spätere oder wiederholte Ausführung, einschließlich ausgefallener Ideen wie einem Fabrikkalender. Als Entwickler können Sie auch die Hintergrundverarbeitungs-Engine verwenden, um die parallele Verarbeitung in Ihrer Anwendung zu aktivieren, obwohl Sie Ihr Programm erheblich ändern müssen, um diese Funktion nutzen zu können. Beachten Sie, dass es sich hierbei nicht um Parallelität (parallele Ausführungsthreads innerhalb eines Programms), sondern eher um eine Interprozesskommunikation (mehrere Single-Thread-Anwendungen, die koordiniert ausgeführt werden) handelt.

Wassermühle in der Stadt Bayeux
Als Nächstes werfen wir einen Blick auf die Benutzer- und Sicherheitsverwaltung. Meistens müssen Sie sich beim Schreiben
von ABAP-Anwendungen nicht um die Benutzerverwaltung kümmern. Die
Benutzerverwaltung
existiert und ist bereits vorhanden, da sich der Benutzer natürlich am R/3-System anmelden muss, um Ihr Programm
auszuführen. Sie können Informationen über den aktuell angemeldeten Benutzer erhalten, aber diese werden kaum für andere
Zwecke als die Anmeldung oder das Drucken der korrekten Telefonnummer auf einer Rechnung benötigt. Als Entwickler
interessiert Sie eher, ob der Benutzer ein bestimmtes Programm ausführen, bestimmte Daten anzeigen oder ändern oder eine
bestimmte Funktion ausführen darf. Dies lässt sich relativ einfach Hilfe sogenannter Berechtigungsobjekte zu erreichen
– Sie verwenden entweder ein im System vordefiniertes Objekt oder erstellen ein neues. Berechtigungsobjekte enthalten
Informationen zu bis zu zehn Parametern, die entweder zur Laufzeit angegeben oder übersprungen werden können (denken Sie
an einen „Don’t care“-Wert). Als Entwickler weisen Sie das System einfach an, zu überprüfen, ob der aktuelle Benutzer
die Berechtigung für das Objekt N_EINR_TCO
mit einigen Werten, die EINRI = '0001'
und TCODE = 'NP10'
entsprechen,
hat. Die Strukturen, die Benutzern tatsächlich Berechtigungen („Instanzen von Berechtigungsobjekten“) zuweisen, sind
recht komplex, aber etwas, worüber Sie sich nicht wirklich Sorgen machen müssen. Es ist da, es funktioniert.

Fachwerkhäuser in Dives-sur-Mer
Ein letzter Aspekt für heute – die Internationalisierung. Es ist nicht ungewöhnlich, dass ein zentrales R/3-System Benutzer in verschiedenen Ländern mit unterschiedlichen Sprachen bedient. Kein Problem – das System wurde sorgfältig so konzipiert, dass sprachabhängige Daten von sprachunabhängigen Daten getrennt bleiben. Wenn Sie sich mit Datenbanken auskennen: Stellen Sie sich eine sekundäre Tabelle vor, die die sprachabhängigen Informationen mit einem zusätzlichen Primärschlüsselfeld oder der Sprache für jede Tabelle, die sprachabhängige Daten enthält. Genau so wird es übrigens auch umgesetzt – mit einigen sehr praktischen Tools, um zu verhindern, dass diese „Tabellenduplizierung“ außer Kontrolle gerät. Dieser Mechanismus gilt sowohl für die Daten als auch für das System selbst – für jeden Text, den Sie auf dem Bildschirm sehen, gibt es einen Datenbankeintrag für die Sprache, die Sie bei der Anmeldung im System angegeben haben. Wählen Sie eine andere Sprache, und die Bildschirmelemente ändern sich entsprechend. Fügen Sie dazu eine Reihe von Übersetzungstools hinzu, die automatisch die übersetzbaren Objekte identifizieren und erkennen, was übersetzt werden muss, und schon können Sie Ihre Anwendung in jedes Land der Welt versenden.
Wahrscheinlich wird es eine Fortsetzung geben…