ABAP-Modularisierung: Makro, Subroutine & Funktionsbaustein
⚡ Intelligente Zusammenfassung
Die Modularisierung in ABAP fasst eine Folge von Anweisungen in wiederverwendbaren Einheiten zusammen, die vom Hauptprogramm einfach aufgerufen werden. Diese Seite erläutert Makros, Include-Programme, Unterprogramme, Funktionsbausteine und Funktionsgruppen und bietet Syntax, Beispiele und Auswahlkriterien für jede Technik.
Was ist Modularisierung in ABAP?
Bei der Modularisierung von Quellcode wird eine Folge von ABAP-Anweisungen in einem Modul zusammengefasst. Anstatt dann alle Anweisungen im Hauptprogramm zu platzieren, wird lediglich das Modul aufgerufen. Bei der Programmgenerierung wird der Quellcode der Modularisierungseinheit so behandelt, als wäre er physisch im Hauptprogramm vorhanden.
Notwendigkeit der Modularisierung
- Verbessern Sie die Struktur des Programms.
- Der Code ist leicht zu lesen
- Einfache Pflege des Codes
- Vermeidet Redundanz und fördert die Wiederverwendung von Code
Verschiedene Modularisierungstechniken
- Verwendung von Makros
- Verwendung von Include-Dateien
- Unterprogramme
- Funktionsbausteine
Schauen wir uns jeden von ihnen im Detail an:
SAP- ABAP Makro
Wenn Sie dieselben Anweisungen mehr als einmal in einem Programm wiederverwenden möchten, können Sie sie in ein Makro einbinden.
Ein Makro kann nur innerhalb des Programms verwendet werden, in dem es definiert ist, und es kann nur in Zeilen des Programms aufgerufen werden, die auf seine Definition folgen.
Makros können für lange Berechnungen oder komplexe WRITE-Anweisungen nützlich sein.
Syntax
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Makros können Parameter verwenden &N wobei N = 1,2,3…
Beispiel:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Ausgabe: 2
Ein Makro wird nur innerhalb eines Programms zur Kompilierzeit expandiert. Wenn derselbe Code von mehreren Programmen gemeinsam genutzt werden muss, wird stattdessen ein Include-Programm verwendet.
Programme einschließen
Include-Programme dienen ausschließlich der Modularisierung des Quellcodes und verfügen über keine Parameterschnittstelle.
Include-Programme ermöglichen es Ihnen, denselben Quellcode in verschiedenen Programmen zu verwenden. Sie sind nützlich, wenn Sie umfangreiche Datendeklarationen haben, die Sie in verschiedenen Programmen verwenden möchten.
Syntax
Include <include program Name>
Punkte zu beachten
- Include-Programme können sich nicht selbst aufrufen.
- Include-Programme müssen vollständige Anweisungen enthalten.
Ejemplo:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Include-Programme teilen sich zwar Code, können aber keine Parameter empfangen. Unterprogramme fügen diese fehlende Parameterschnittstelle hinzu.
Unterprogramme
Unterroutinen sind Prozeduren, die Sie in jedem beliebigen Programm definieren können ABAP-Programm und auch von jedem Programm aus aufrufbar. Unterprogramme werden normalerweise intern aufgerufen, das heißt, sie enthalten Codeabschnitte oder Algorithmen, die lokal häufig verwendet werden. Wenn Sie möchten, dass eine Funktion im gesamten System wiederverwendbar ist, verwenden Sie einen Funktionsbaustein.
Syntax-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Name des Unterprogramms
= Parameter werden übergeben
Arten von Unterprogrammen
- Intern
- Unterprogramm, das im selben Programm definiert ist, das aufgerufen wird.
- Kann auf alle im ABAP/4-Hauptprogramm deklarierten Datenobjekte zugreifen.
- Extern
- Unterprogramm, das außerhalb des aufgerufenen Programms definiert ist.
- Muss verwendet werden Option oder deklarieren Sie Datenobjekte in gemeinsamen Teilen des Speichers.
Aufruf eines Unterprogramms
Interne Unterprogramme
PERFORM <subroutine> [<pass>]
= Name des Unterprogramms
= Parameter werden übergeben
Im Hauptprogramm deklarierte Daten sind automatisch verfügbar.
Externe Unterprogramme
PERFORM <subroutine>(<Program>) [<pass>]. PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND]. PERFORM (<subroutine>) IN PROGRAM (<Program>) [<pass>] [IF FOUND]. PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].
Punkte zu beachten
- Verschachtelte Aufrufe sind in Unterprogrammen erlaubt (z. B. PERFORM innerhalb eines FORM … ENDFORM ).
- Auch rekursive Aufrufe sind möglich.
- Um lokale Daten zu definieren, verwenden Sie die DATA-Anweisung nach FORM . Bei jedem Aufruf des Unterprogramms werden die Daten neu erstellt (mit einem Anfangswert) und am Ende (vom Stapel) freigegeben.
- Um globale Daten zu definieren, die in einer Unterroutine verwendet werden, verwenden Sie die LOCAL-Anweisung nach FORM . Die Werte werden beim Betreten des Unterprogramms gespeichert und am Ende (vom Stapel) freigegeben.
💡 Tipp: Unterprogramme gelten in ABAP Objects als veraltet. Neuentwicklungen sollten wiederverwendbare Logik in Methoden einer Klasse implementieren und Funktionsbausteine verwenden, wenn eine Schnittstelle für Remote-Zugriff oder systemweite Anwendungen benötigt wird.
Funktionsbausteine
Funktionsmodule sind allgemeine ABAP/4-Routinen, die jeder verwenden kann. Tatsächlich ist eine große Anzahl an Standardfunktionsmodulen verfügbar.
Funktionsmodule sind in Funktionsgruppen organisiert: Sammlungen logisch verwandter Funktionen. Ein Funktionsbaustein gehört immer zu einer Funktionsgruppe.
Syntax-
FUNCTION <function module> <Statements> ENDFUNCTION.
Wichtige Informationen zum Funktionsmodul
- Verwaltung
- Parameter importieren/ändern/exportieren.
- Tabellenparameter/Ausnahmen.
- Dokumentation
- Quellcode – L U01 . ist die Funktionsgruppe
- Globale Daten – L TOP .Globale Daten für die Funktionsgruppe – Zugriff über alle Funktionsmodule in der Funktionsgruppe.
- Hauptprogramm – SAPM Enthält die Liste aller Include-Dateien für diese Funktionsgruppe
Rufen Sie einen Funktionsbaustein auf
Um einen Funktionsbaustein aufzurufen, verwenden Sie die CALL FUNCTION-Anweisung:
CALL FUNCTION <module> [EXPORTING f1 = a 1.... f n = a n] [IMPORTING f1 = a 1.... f n = a n] [CHANGING f1 = a 1.... f n = a n] [TABLES f1 = a 1.... f n = a n] [EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E] [OTHERS = ro]].
Jedes Funktionsmodul befindet sich innerhalb einer Funktionsgruppe. Im nächsten Abschnitt wird daher erklärt, wie dieser Container funktioniert.
Funktionsgruppen
Funktionsgruppen sind Container für Funktionsmodule. Tatsächlich gibt es eine große Anzahl von Standard-Funktionsgruppen.
Alle Funktionsbausteine einer Funktionsgruppe können auf die globalen Daten der Gruppe zugreifen.
Wie ausführbare Programme (Typ 1) und Modulpools (Typ M) können Funktionsgruppen Dynpros, Selektionsbilder und Listen enthalten.
Punkte zu beachten
- Funktionsgruppen können nicht ausgeführt werden.
- Der Name einer Funktionsgruppe kann bis zu 26 Zeichen lang sein.
- Beim Anlegen einer Funktionsgruppe oder eines Funktionsbausteins werden das Hauptprogramm und die Include-Programme automatisch generiert.
- Funktionsgruppen kapseln Daten.
So erstellen Sie eine Funktionsgruppe
- Gehen Sie zur Transaktion SE80.
- Wählen Sie im Dropdown-Menü „Programm“ aus.
- Geben Sie den Namen der Funktionsgruppe ein, die Sie erstellen möchten. Im Allgemeinen beginnen benutzerdefinierte Funktionsgruppen mit „Z“. z.B - . Drücken Sie die Eingabetaste.
- Beachten Sie, dass das TOP-Include standardmäßig erstellt wird, wenn der Benutzer die Option zum Erstellen eines TOP-Includes aktiviert.
So erstellen Sie einen Funktionsbaustein
- Erstellen Sie eine Funktionsgruppe (z. B. „ZCAL“).
- Erstellen Sie ein Funktionsmodul, legen Sie die Attribute wie (Funktionsgruppe, Anwendung, Kurztext und Prozesstyp) fest und speichern Sie.
- Die Include-Datei „LZCALU01“ enthält den Quellcode des ersten Funktionsmoduls.
- Die Include-Datei „LZCALTOP“ enthält globale Daten.
- Hauptprogramm“SAPLZCAL“ enthält
- Globale Daten Include-Datei „LZCALTOP“
- Funktionsbausteine beinhalten die Datei „LZCALUXX“
- Benutzerdefinierte Include-Dateien „LZCALF..“, „LZCALO..“ und „LZCALI..“
- Definieren Sie Schnittstellenparameter und Ausnahmen
- Schreiben Sie den Quellcode
- Funktionsbaustein aktivieren
- Testen des Funktionsmoduls – Einzeltest und Debugging
- Dokumentieren und Freigeben eines Funktionsbausteins
Wie man die richtige Modularisierungstechnik auswählt
Die vier Techniken überschneiden sich, daher hängt die Entscheidung vom Umfang der Wiederverwendung und davon ab, ob eine Parameterschnittstelle erforderlich ist.
| Technik | Umfang der Wiederverwendung | Parameterschnittstelle | am besten geeignet für |
|---|---|---|---|
| Makro | Ein Programm, nach der Definitionszeile | Positionsplatzhalter &1 bis &9 | Kurze, wiederholte Anweisungen, lange Berechnungen, komplexe WRITE-Ausgabe |
| Programm einschließen | Jedes Programm, das die Einschlusskriterien benennt | Keine Präsentation | Gemeinsame Datendeklarationen und gemeinsamer Quellcode |
| Unterprogramm (FORM) | Lokal oder extern mit PERFORM … IN PROGRAM | VERWENDEN, ÄNDERN, TABELLEN | Logik wird innerhalb eines Programms häufig wiederverwendet. |
| Funktionsbaustein | Gesamtes System, einschließlich Fernanrufe | IMPORTIEREN, EXPORTIEREN, ÄNDERN, TABELLEN, AUSNAHMEN | Routinen, die von mehreren Anwendungen gemeinsam genutzt und in einer Funktionsgruppe gekapselt werden |
Eine kurze Regel deckt die meisten Fälle ab: Verwenden Sie ein Makro für Kurzschreibweisen innerhalb eines Programms, ein Include für gemeinsam genutzte Deklarationen, eine Unterroutine für lokale Logik und ein Funktionsbaustein, wenn die Routine von überall im System aufgerufen werden muss. Das ist alles zur Modularität in ABAP.

