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.

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
- Intern
- Subrutine defineret i samme program, der kaldes.
- Kan få adgang til alle dataobjekter erklæret i ABAP/4-hovedprogrammet.
- 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
- Gå til Transaction SE80.
- Vælg Program i dropdown-menuen.
- Skriv navnet på den funktionsgruppe, du vil oprette. Generelt brugerlavede funktionsgrupper starter med "Z". f.eks - . Tryk på Enter-tasten.
- Bemærk, at TOP-inkluderingen oprettes som standard, hvis brugeren markerer muligheden for at oprette en TOP-inkludering.
Sådan opretter du et funktionsmodul
- Opret en funktionsgruppe (sig "ZCAL").
- Opret et funktionsmodul, angiv attributter som (funktionsgruppe, applikation, kort tekst og procestype) og gem.
- Inkluder filen "LZCALU01" vil have kildekoden til det første funktionsmodul.
- Inkluder fil "LZCALTOP" vil have globale data.
- Hovedprogram "SAPLZCAL” indeholder
- Globale data Inkluder filen "LZCALTOP"
- Funktionsmoduler inkluderer filen "LZCALUXX"
- Brugerdefineret Inkluder filerne "LZCALF..", "LZCALO.." og "LZCALI.."
- Definer grænsefladeparametre og undtagelser
- Skriv kildekoden
- Aktiver funktionsmodul
- Test af funktionsmodulet – Enkelttest og fejlfinding
- 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.
