Wir erleben es in unseren Transformationsprojekten immer wieder: SAP Formulare, die neben dem Hauptquellcode aus etlichen Unterprogrammen bestehen. Schuld daran trägt ABAP Form.
Mit der Form Routine werden Code-Bestandteile geclustert und ausgegliedert. Was eigentlich der Übersichtlichkeit dienen soll, führt häufig genau zum Gegenteil: Chaos.Das geht auch anders – und vor allem besser. Wie, erfährst du hier.
Das Wichtigste auf einen Blick
- Mit ABAP Form werden Coding-Abschnitte in Unterprogramme ausgegliedert. Das soll Ordnung in den Quellcode bringen, Code-Redundanzen vermeiden und Programmteile wiederverwendbar machen.
- Form Routinen verfolgen den klassiscen, prozeduralen Programmieransatz. Das bringt entscheidende Nachteile mit sich, weswegen SAP das Vorgehen als obsolet erklärt hat.
- Form Routinen und Funktionsbausteine werden immer mehr durch das moderne, objektorientierte ABAP Objects abgelöst.
Was ist ABAP Form?
ABAP ist die zentrale Programmiersprache von SAP. Mit ihr lassen sich individuelle Anpassungen an sämtlichen SAP-Modulen vornehmen – egal ob Central Finance, Human Capital Management, Plant Maintenance, Material Management und Production Planning.
Der Quellcode bei ABAP wird in der klassischen Version einfach von oben nach unten ausgeführt. Das kann sehr unübersichtlich werden. Deswegen kamen Programmierer vor vielen Jahren auf die Idee, Quellcode in Unterprogramme auszulagern. Damit können wiederkehrende Aufgaben in separate Einheiten verschoben werden. Die Form Routinen waren geboren.
Diese Modularisierung eines ABAP-Programms erfolgt mit den Anweisungen Form und Endform. In dieser Klammer wird der Verarbeitungsblock festgehalten. Der Name des Unterprogramms ist Subr. Die optionalen Zusätze USING und CHANGING legen die Parameterschnittstelle fest.
FORM subr [USING p1 TYPE type
p2 LIKE field
...
VALUE (p3) TYPE type
VALUE (p4) LIKE field
... ]
[CHANGING { {VALUE(p1)}|{p1 [{TYPE type}|(LIKE field}]}
{VALUE(p2)}|{p2 [{TYPE type}|(LIKE field}]}
... } ]
...
ENDFORM.
Quelle: SAP Help
Warum sind Form Routinen nicht mehr zeitgemäß?
Form Routinen gehören zum klassischen, prozeduralen Programmieransatz und gelten deswegen als veraltet. Denn ihre sequenzielle Ausführung bringt drei entscheidende Nachteile mit sich:
Geringe Wiederverwendbarkeit
Form Routinen können als externe Subroutinen angelegt und in verschiedenen Programmen verwendet werden. Die Aufrufe erfolgen mit PERFORM formname IN PROGRAM programname.
Allerdings bleibt die Kapselung begrenzt, weil die Unterprogramme Zugriff auf alle globalen Daten des Hauptprogramms haben und nicht von diesen abgespaltet werden können. Durch die fehlende Trennung zwischen Daten und Funktionalität bieten Form Routinen weniger Möglichkeiten zur Wiederverwendung von Code im Vergleich zu objektorientierten Ansätzen.
Erschwerte Wartung
Die prozedurale Programmierung führt oft zu monolithischen, wartungsaufwändigen Programmen. Ein Beispiel sind SAPscript und SmartForms. Mit diesen Formulartechnologien haben Unternehmen zahllose SAP Formulare entwickelt – und tun dies weiterhin.
Das Problem: Der Code der Dokumente kann über Unterprogramme n-dimensional verschachtelt werden. Das macht es zum Teil für SAP-Berater enorm schwer, die Logik zu durchdringen, zu testen und zu erweitern. Eine Änderung in einem ABAP Form kann außerdem zu unbeabsichtigten Folgen in einem anderen Programm führen.
Aus der Praxis
Keine Unterstützung für moderne Entwicklungspraktiken
Form Routinen unterstützen keine Konzepte wie Vererbung, Polymorphismus oder klassenbasierte Exceptions. In der objektorientierten Entwicklung ist das längst Standard.
Aus all diesen Gründen stuft SAP Form Routinen offiziell als obsolet ein. Sie funktionieren zwar weiterhin, gelten jedoch nicht mehr als Best Practice und könnten in Zukunft nicht mehr unterstützt werden.
Form Routine vs. ABAP Objects
Form Routinen repräsentieren die traditionelle, prozedurale Programmierweise in ABAP, während ABAP OO (Object-Oriented) die moderne, objektorientierte Herangehensweise darstellt. Die wesentlichen Unterschiede der beiden Methoden liegen in der Datenkapselung, Code-Organisation, Wiederverwendbarkeit und Wartbarkeit.
Datenkapselung
Bei Form Routinen ist die Datenkapselung schwach ausgeprägt. Wenn ein Unterprogramm ausgeführt wird, kann es direkt auf die globalen Daten des Hauptprogramms zugreifen, sie lesen und verändern – ohne dass dies explizit über Parameter gesteuert wird. Die Folge: der Zustand des Programms kann an vielen Stellen verändert werden, was möglicherweise unbeabsichtigte Seiteneffekte auslöst.
In ABAP OO wird durch Klassen und Sichtbarkeiten (PUBLIC, PROTECTED, PRIVATE) eine klare Trennung zwischen internen und externen Datentypen geschaffen. Dadurch sind Beiträge besser geschützt und unbeabsichtigte Änderungen werden verhindert.
Code-Organisation
ABAP Form Routinen strukturieren den Code prozedural vom Start bis zum Ende. Das heißt, der Programmablauf wird als eine Abfolge von Anweisungen und Funktionsaufrufen gestaltet. Das kann bei größeren Programmen schnell unübersichtlich werden.
ABAP OO ermöglicht eine hierarchische und modulare Organisation des Codes durch Klassen, Methoden und Vererbung. Es entsteht eine Hierarchie durch das Prinzip der Vererbung: Oberklassen definieren allgemeine Funktionalität, Unterklassen können diese erweitern oder spezialisieren. Das erleichtert die Strukturierung komplexer Anwendungen und fördert die Lesbarkeit.
Wiederverwendbarkeit
Die Wiederverwendbarkeit von Form Routinen ist begrenzt, insbesondere weil sie eng an das jeweilige Programm gebunden sind. Vererbung oder Erweiterung wird nicht unterstützen.
ABAP OO bietet durch Vererbung und Polymorphismus eine deutlich höhere Wiederverwendbarkeit: Einmal entwickelte Klassen und Methoden können flexibel in verschiedenen Kontexten eingesetzt und erweitert werden.
Wartbarkeit
Programme mit vielen Form Routinen werden mit zunehmender Komplexität schwer wartbar. ABAP OO fördert die Wartbarkeit durch klar definierte Schnittstellen, Kapselung und modulare Strukturen. Änderungen können gezielt und mit geringem Risiko für Nebenwirkungen vorgenommen werden.
Fazit
Einst zentraler Bestandteil der Programmierung, sind Form Routinen heute nicht mehr zeitgemäß. Sie basieren auf einem prozeduralen Vorgehen, das im modernen Entwicklungsumfeld zahlreiche Nachteile hat.
Ohne Frage: Unternehmen sollten auf einen objektorientierte Ansätze umsteigen. So gestalten Entwickler ihre SAP-Formulare effizienter, besser wartbar und nachhaltiger.
FAQ
Was ist der Unterschied zwischen internen und externen Subroutinen?
Interne Subroutinen sind Form Routinen, die im selben Programm definiert und aufgerufen werden. Die Ausgabe erfolgt über PERFORM formname.
Die Typisierung externe Subroutine wird für Unterprogramme aus einem anderen Programm verwendet. Sie legen die Grundlagen für die Wiederverwendung von Code in unterschiedlichen Bereichen.
Was ist beim TABLES Parameter zu beachten?
Der TABLES Parameter ist ein veraltetes Konzept zur Übergabe interner Tabellen. TABLES Parameter werden automatisch als CHANGING Parameter mit Standardtabellen-Typ behandelt und unterstützen Header-Lines.
Moderne ABAP-Entwicklung sollte allerdings CHANGING Parameter verwenden und lokale Work Areas erstellen.
Wie erfolgt die Fehlerbehandlung in Form Routinen?
Fehlerbehandlung in Form Routinen kann über verschiedene Mechanismen erfolgen. SY-SUBRC wird automatisch gesetzt, wenn Datenbankoperationen oder bestimmte Systemfunktionen innerhalb der Form fehlschlagen.
RAISE Statements können verwendet werden, um Exceptions zu werfen. Form Routinen können auch RAISING Klauseln in ihrer Definition haben, um potenzielle Exceptions zu deklarieren.