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.

  • ๐Ÿงฉ Kernprinzip: Es wird eine Modularisierungseinheit erzeugt, als ob ihr Quellcode physisch im aufrufenden Programm vorhanden wรคre, sodass sich die Struktur ohne Laufzeitkosten verbessert.
  • โšก Macro: Definiert mit DEFINE und END-OF-DEFINITION, nur innerhalb des Programms verwendbar, das es definiert, und nur nach der Definitionszeile.
  • ๐Ÿ“„ Programm einschlieรŸen: Besitzt keine Parameterschnittstelle und dient ausschlieรŸlich dazu, Quellcode, wie z. B. lange Datendeklarationen, zwischen mehreren Programmen zu teilen.
  • ๐Ÿ” Subroutine: Deklariert mit FORM und ENDFORM, aufgerufen mit PERFORM und geeignet fรผr Logik, die lokal innerhalb eines Programms wiederverwendet wird.
  • ๐Ÿงฑ Funktionsmodul: Eine systemweite Routine mit einer typisierten Schnittstelle zum Importieren, Exportieren, ร„ndern von Tabellenparametern und Ausnahmen.
  • ๐Ÿ“ฆ Funktionsgruppe: Ein Container, dessen globale Daten von jedem darin enthaltenen Funktionsbaustein gemeinsam genutzt werden und der automatisch mit seinen TOP- und UXX-Includes generiert wird.
  • ๐Ÿงญ Auswahlregel: Wรคhlen Sie ein Makro fรผr lokale Kurzschreibweisen, eine Unterroutine fรผr lokale Logik und ein Funktionsmodul, wenn die Routine systemweit wiederverwendbar sein muss.

Modularisierung in ABAP

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

  1. Intern
    • Unterprogramm, das im selben Programm definiert ist, das aufgerufen wird.
    • Kann auf alle im ABAP/4-Hauptprogramm deklarierten Datenobjekte zugreifen.
  2. 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

  1. Gehen Sie zur Transaktion SE80.
  2. Wรคhlen Sie im Dropdown-Menรผ โ€žProgrammโ€œ aus.
  3. 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.
  4. 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

  1. Erstellen Sie eine Funktionsgruppe (z. B. โ€žZCALโ€œ).
  2. Erstellen Sie ein Funktionsmodul, legen Sie die Attribute wie (Funktionsgruppe, Anwendung, Kurztext und Prozesstyp) fest und speichern Sie.
  3. Die Include-Datei โ€žLZCALU01โ€œ enthรคlt den Quellcode des ersten Funktionsmoduls.
  4. Die Include-Datei โ€žLZCALTOPโ€œ enthรคlt globale Daten.
  5. Hauptprogrammโ€œSAPLZCALโ€œ enthรคlt
    • Globale Daten Include-Datei โ€žLZCALTOPโ€œ
    • Funktionsbausteine โ€‹โ€‹beinhalten die Datei โ€žLZCALUXXโ€œ
    • Benutzerdefinierte Include-Dateien โ€žLZCALF..โ€œ, โ€žLZCALO..โ€œ und โ€žLZCALI..โ€œ
  6. Definieren Sie Schnittstellenparameter und Ausnahmen
  7. Schreiben Sie den Quellcode
  8. Funktionsbaustein aktivieren
  9. Testen des Funktionsmoduls โ€“ Einzeltest und Debugging
  10. 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.

Hรคufig gestellte Fragen

Ein Makro wird bei seiner Generierung expandiert und funktioniert nur innerhalb des Programms, das es definiert. Eine Subroutine ist eine echte Prozedur mit einer typisierten Parameterschnittstelle, die auch aus einem anderen Programm mit PERFORM aufgerufen werden kann.

Ein Funktionsbaustein, dessen Verarbeitungstyp auf โ€žFernzugriffsfรคhiges Modulโ€œ eingestellt ist, kann von einem anderen Modul aufgerufen werden. SAP Das System oder eine externe Anwendung. Die Parameter mรผssen als Wert รผbergeben werden, und Ausnahmen werden als Systemfehler behandelt.

Ein Makro kann im Debugger nicht schrittweise ausgefรผhrt werden, da es vor seiner Generierung expandiert wird. Verlagern Sie die Logik in eine Unterroutine oder eine Methode, wenn eine zeilenweise Fehlersuche erforderlich ist, und beschrรคnken Sie Makros auf kurze Anweisungen.

KI-Code-Assistenten in ABAP-Entwicklungswerkzeugen kรถnnen anhand einer einfachen Beschreibung ein Funktionsbaustein-Gerรผst, dessen Parameterschnittstelle und dessen Ausnahmen erstellen. Ein Entwickler prรผft anschlieรŸend die Logik, aktiviert den Baustein und testet ihn vor dem Transport.

KI-Tools scannen ein Programm, erkennen wiederholte Codeblรถcke und schlagen vor, wo eine Unterroutine, Methode oder ein Funktionsmodul entfernt werden sollte.tracted. Der Vorschlag beschleunigt das Refactoring, obwohl Unit-Tests weiterhin notwendig sind, um identisches Verhalten zu bestรคtigen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: