ABAP-modularisering: Makro-, subrutine- og funktionsmodul

⚡ Smart opsummering

Modularisering i ABAP placerer en sekvens af sætninger i en genanvendelig enhed, som hovedprogrammet blot kalder. Denne side forklarer makroer, inkluderer programmer, subrutiner, funktionsmoduler og funktionsgrupper med syntaks, eksempler og udvælgelseskriterier for hver teknik.

  • 🧩 Kerneprincip: En modulariseringsenhed genereres, som om dens kildekode fysisk var til stede i det kaldende program, så strukturen forbedres uden omkostninger ved runtime.
  • ⚡ Makro: Defineret med DEFINE og END-OF-DEFINITION, kun brugbar i det program, der definerer det, og kun efter definitionslinjen.
  • 📄 Inkluder program: Har ingen parametergrænseflade og eksisterer udelukkende for at dele kildekode, såsom lange datadeklarationer, mellem flere programmer.
  • 🔁 Subrutine: Deklareret med FORM og ENDFORM, kaldet med PERFORM og egnet til logik, der genbruges lokalt i ét program.
  • 🧱 Funktionsmodul: En systemomfattende rutine med en typebaseret grænseflade til import, eksport, ændring af tabelparametre og undtagelser.
  • 📦 Funktionsgruppe: En container hvis globale data deles af alle funktionsmoduler i den, genereret automatisk med dens TOP- og UXX-inkluderinger.
  • 🧭 Udvælgelsesregel: Vælg en makro til lokal forkortelse, en subrutine til lokal logik og et funktionsmodul, når rutinen skal kunne genbruges på tværs af systemet.

Modularisering i ABAP

Hvad er modularisering i ABAP?

Når du modulariserer kildekode, placerer du en sekvens af ABAP-sætninger i et modul. I stedet for at placere alle sætningerne i dit hovedprogram, kalder du blot modulet. Når programmet genereres, behandles kildekoden i modulariseringsenheden, som om den faktisk var fysisk til stede i hovedprogrammet.

Behov for modularisering

  • Forbedre strukturen af ​​programmet.
  • Nem at læse koden
  • Nem at vedligeholde koden
  • Undgå redundans og fremmer genbrug af kode

Forskellige modulariseringsteknikker

  • Brug af makroer
  • Brug af include-filer
  • Subrutiner
  • Funktionsmoduler

Lad os se nærmere på hver af dem:

SAP- ABAP makro

Hvis du vil genbruge det samme sæt sætninger mere end én gang i et program, kan du inkludere dem i en makro.

Du kan kun bruge en makro i det program, hvori den er defineret, og den kan kun kaldes i linjer i programmet efter dens definition.

Makroer kan være nyttige til lange beregninger eller komplekse WRITE-sætninger.

Syntaks

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

Makroer kan bruge parametre &N hvor N = 1,2,3...

Eksempel:-

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

Output: 2

En makro udvides ved kompileringstid inden for kun ét program. Når den samme kode skal deles mellem programmer, bruges et include-program i stedet.

Inkluder programmer

Inkluder-programmer er udelukkende til modularisering af kildekode og har ingen parametergrænseflade.

Inkluderingsprogrammer giver dig mulighed for at bruge den samme kildekode i forskellige programmer. De kan være nyttige, hvis du har lange datadeklarationer, som du vil bruge i forskellige programmer.

Syntaks

Include <include program Name>

Peger på note

  • Inkluder programmer kan ikke kalde sig selv.
  • Inkluder programmer skal indeholde fuldstændige udsagn.

Eksempel:

INCLUDE ZILX0004.

WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.

================================

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

Inkluderede programmer deler kode, men kan ikke modtage parametre. Subrutiner tilføjer den manglende parametergrænseflade.

Subrutiner

Underrutiner er procedurer, som du kan definere i enhver ABAP program og ring også fra ethvert program. Subrutiner kaldes normalt internt, det vil sige, at de indeholder sektioner af kode eller algoritmer, der ofte bruges lokalt. Hvis du ønsker, at en funktion skal kunne genbruges i hele systemet, skal du bruge et funktionsmodul.

Syntaks-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= Navn på underrutinen

= Parametre passeres

Typer af underrutiner

  1. Intern
    • Subrutine defineret i samme program, der kaldes.
    • Kan få adgang til alle dataobjekter erklæret i ABAP/4-hovedprogrammet.
  2. Ekstern
    • Underrutine defineret uden for det program, der kaldes.
    • Skal bruge vælge eller deklarere dataobjekter i fælles dele af hukommelsen.

Opkald til en underrutine

Interne underrutiner

PERFORM <subroutine> [<pass>]

= Navn på underrutinen

= Parametre passeres

Data deklareret i hovedprogrammet er automatisk tilgængelige.

Eksterne underrutiner

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>].

Peger på note

  • Indlejrede opkald er tilladt i underrutiner (dvs. UDFØR inden for en FORM … ENDFORM ).
  • Rekursive opkald er også mulige.
  • For at definere lokale data skal du bruge DATA-sætningen efter FORM . Hver gang du går ind i subrutinen, genskabes dataene (med en startværdi) og frigives til sidst (fra stakken).
  • For at definere globale data, der bruges i en underrutine, skal du bruge LOCAL-sætningen efter FORM . Værdierne gemmes, når du går ind i subrutinen og frigives derefter til sidst (fra stakken)

💡 Tip: Subrutiner betragtes som forældede i ABAP-objekter. Ny udvikling bør placere genanvendelig logik i metoder i en klasse og bruge funktionsmoduler, når en fjernaktiveret eller systemdækkende grænseflade er påkrævet.

Funktionsmoduler

Funktionsmoduler er generelle ABAP/4-rutiner, som alle kan bruge. Faktisk er der et stort antal standardfunktionsmoduler tilgængelige.

Funktionsmoduler er organiseret i funktionsgrupper: Samlinger af logisk relaterede funktioner. Et funktionsmodul tilhører altid en funktionsgruppe.

Syntaks-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

Vigtig information knyttet til funktionsmodul

  • Administration
  • Import/Ændring/Eksport af parametre.
  • Tabel parametre/undtagelser.
  • Dokumentation
  • Kildekode – L U01. er Funktionsgruppen
  • Globale data – L TOP .Globale data for funktionsgruppen- Tilgængelig på tværs af funktionsmoduler i funktionsgruppen.
  • Hovedprogram – SAPL . Indeholder listen over alle inkluderede filer for denne funktionsgruppe

Kald et funktionsmodul

For at kalde et funktionsmodul skal du bruge CALL FUNCTION-sætningen:

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]].

Hvert funktionsmodul findes i en funktionsgruppe, så det næste afsnit forklarer, hvordan containeren fungerer.

Funktionsgrupper

Funktionsgrupper er beholdere til funktionsmoduler. Faktisk er der et stort antal standardfunktionsgrupper.
Alle funktionsmodulerne i en funktionsgruppe kan få adgang til gruppens globale data.

Som eksekverbare programmer (type 1) og modulpuljer (type M), funktionsgrupper kan indeholde skærmbilleder, valgskærme og lister.

Peger på note

  • Funktionsgrupper kan ikke udføres.
  • Navnet på en funktionsgruppe kan være op til 26 tegn langt.
  • Når du opretter en funktionsgruppe eller funktionsmodul, genereres hovedprogrammet og inkluderende programmer automatisk.
  • Funktionsgrupper indkapsler data.

Sådan opretter du en funktionsgruppe

  1. Gå til Transaction SE80.
  2. Vælg Program i dropdown-menuen.
  3. Skriv navnet på den funktionsgruppe, du vil oprette. Generelt brugerlavede funktionsgrupper starter med "Z". f.eks - . Tryk på Enter-tasten.
  4. Bemærk, at TOP-inkluderingen oprettes som standard, hvis brugeren markerer muligheden for at oprette en TOP-inkludering.

Sådan opretter du et funktionsmodul

  1. Opret en funktionsgruppe (sig "ZCAL").
  2. Opret et funktionsmodul, angiv attributter som (funktionsgruppe, applikation, kort tekst og procestype) og gem.
  3. Inkluder filen "LZCALU01" vil have kildekoden til det første funktionsmodul.
  4. Inkluder fil "LZCALTOP" vil have globale data.
  5. Hovedprogram "SAPLZCAL” indeholder
    • Globale data Inkluder filen "LZCALTOP"
    • Funktionsmoduler inkluderer filen "LZCALUXX"
    • Brugerdefineret Inkluder filerne "LZCALF..", "LZCALO.." og "LZCALI.."
  6. Definer grænsefladeparametre og undtagelser
  7. Skriv kildekoden
  8. Aktiver funktionsmodul
  9. Test af funktionsmodulet – Enkelttest og fejlfinding
  10. Dokumentation og frigivelse af et funktionsmodul

Sådan vælger du den rigtige modulariseringsteknik

De fire teknikker overlapper hinanden, så beslutningen afhænger af omfanget af genbrug og om en parametergrænseflade er påkrævet.

Teknik Omfanget af genbrug Parametergrænseflade Bedste brugt til
Makro Et program, efter definitionslinjen Positionspladsholdere &1 til &9 Korte gentagne sætninger, lange beregninger, kompleks WRITE-output
Inkluder program Ethvert program, der navngiver include Ingen Delte datadeklarationer og delt kildekode
Subrutine (FORM) Lokalt eller eksternt med UDFØR … I PROGRAM BRUG OG ÆNDRING AF TABELLER Logik genbruges ofte i ét program
Funktionsmodul Hele systemet, inklusive fjernopkald IMPORT, EKSPORT, ÆNDRING AF TABELLER, UNDTAGELSER Rutiner, der deles på tværs af applikationer og er indkapslet i en funktionsgruppe

En kort regel dækker de fleste tilfælde: brug en makro til forkortelse i ét program, en include til delte deklarationer, en subrutine til lokal logik og et funktionsmodul, når rutinen skal kunne kaldes fra et hvilket som helst sted i systemet. Det er alt sammen Modularitet i ABAP.

Ofte Stillede Spørgsmål

En makro udvides ved generering og fungerer kun i det program, der definerer den. En subrutine er en reel procedure med en typebestemt parametergrænseflade, der også kan kaldes fra et andet program med PERFORM.

Et funktionsmodul, hvis behandlingstype er indstillet til Fjernaktiveret modul, kan kaldes fra et andet SAP system eller fra et eksternt program. Dets parametre skal sendes efter værdi, og undtagelser håndteres som systemfejl.

En makro kan ikke gennemgås trin for trin i debuggeren, fordi den udvides før generering. Flyt logikken ind i en subrutine eller en metode, når linje-for-linje-debugging er påkrævet, og hold makroer begrænset til korte sætninger.

AI-kodeassistenter i ABAP-udviklingsværktøjer kan udarbejde et funktionsmodulskelet, dets parametergrænseflade og dets undtagelser ud fra en almindelig beskrivelse. En udvikler gennemgår stadig logikken, aktiverer modulet og tester det før transport.

AI-værktøjer scanner et program, registrerer gentagne blokke og foreslår, hvor en subrutine, metode eller funktionsmodul skal fjernes.tracForslaget fremskynder refactoring, selvom enhedstestning stadig er nødvendig for at bekræfte identisk adfærd.

Opsummer dette indlæg med: