ABAP-modularisering: Makro-, subrutine- og funksjonsmodul
⚡ Smart oppsummering
Modularisering i ABAP plasserer en sekvens av setninger i en gjenbrukbar enhet som hovedprogrammet ganske enkelt kaller. Denne siden forklarer makroer, inkluderer programmer, subrutiner, funksjonsmoduler og funksjonsgrupper, med syntaks, eksempler og utvalgskriterier for hver teknikk.
Hva er modularisering i ABAP?
Når du modulariserer kildekode, plasserer du en sekvens av ABAP-setninger i en modul. I stedet for å plassere alle setningene i hovedprogrammet, kaller du bare modulen. Når programmet genereres, behandles kildekoden i modulariseringsenheten som om den faktisk var fysisk tilstede i hovedprogrammet.
Behov for modularisering
- Forbedre strukturen i programmet.
- Enkel å lese koden
- Enkel å vedlikeholde koden
- Unngå redundans og fremmer gjenbruk av kode
Ulike modulariseringsteknikker
- Bruk av makroer
- Bruk av include-filer
- Subrutiner
- Funksjonsmoduler
La oss se nærmere på hver av dem:
SAP- ABAP-makro
Hvis du vil gjenbruke det samme settet med utsagn mer enn én gang i et program, kan du inkludere dem i en makro.
Du kan bare bruke en makro i programmet der den er definert, og den kan bare kalles i linjer i programmet etter definisjonen.
Makroer kan være nyttige for lange beregninger eller komplekse WRITE-setninger.
syntax
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Makroer kan bruke parametere &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.
Utgang: 2
En makro utvides ved kompileringstid innenfor kun ett program. Når den samme koden må deles mellom programmer, brukes et include-program i stedet.
Inkluder programmer
Inkluder-programmer er utelukkende for modularisering av kildekode, og har ingen parametergrensesnitt.
Inkluderingsprogrammer lar deg bruke samme kildekode i forskjellige programmer. De kan være nyttige hvis du har lange datadeklarasjoner som du vil bruke i forskjellige programmer.
syntax
Include <include program Name>
Peker på Note
- Inkluder-programmer kan ikke kalle seg selv.
- Inkluder-programmer må inneholde fullstendige utsagn.
Eksempel:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Inkluderte programmer deler kode, men kan ikke motta parametere. Subrutiner legger til det manglende parametergrensesnittet.
Subrutiner
Subrutiner er prosedyrer som du kan definere i hvilken som helst ABAP-program og også ringe fra et hvilket som helst program. Subrutiner kalles normalt internt, det vil si at de inneholder deler av kode eller algoritmer som brukes ofte lokalt. Hvis du vil at en funksjon skal være gjenbrukbar i hele systemet, bruk en funksjonsmodul.
Syntaks-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Navn på subrutinen
= Parametre passeres
Typer subrutiner
- Intern
- Subrutine definert i samme program som kalles.
- Kan få tilgang til alle dataobjektene som er deklarert i ABAP/4-hovedprogrammet.
- Ekstern
- Subrutine definert utenfor programmet som kalles.
- Trenger å bruke velge eller deklarere dataobjekter i vanlige deler av minnet.
Ringe en subrutine
Interne underrutiner
PERFORM <subroutine> [<pass>]
= Navn på subrutinen
= Parametre passeres
Data deklarert i hovedprogrammet er automatisk tilgjengelig.
Eksterne subrutiner
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>].
Peker på Note
- Nestede anrop er tillatt i subrutiner (dvs. UTFØR innenfor et FORM … ENDFORM ).
- Rekursive samtaler er også mulig.
- For å definere lokale data, bruk DATA-setningen etter FORM . Hver gang du går inn i subrutinen, gjenskapes dataene (med en startverdi) og frigis på slutten (fra stabelen).
- For å definere globale data som brukes i en subrutine, bruk LOCAL-setningen etter FORM . Verdiene lagres når du går inn i subrutinen og slippes deretter på slutten (fra stabelen)
💡 Tips: Subrutiner anses som foreldet i ABAP-objekter. Ny utvikling bør plassere gjenbrukbar logikk i metoder i en klasse, og bruke funksjonsmoduler når et eksternt aktivert eller systemomfattende grensesnitt er nødvendig.
Funksjonsmoduler
Funksjonsmoduler er generelle ABAP/4-rutiner som alle kan bruke. Faktisk er det et stort antall standard funksjonsmoduler tilgjengelig.
Funksjonsmoduler er organisert i funksjonsgrupper: Samlinger av logisk relaterte funksjoner. En funksjonsmodul tilhører alltid en funksjonsgruppe.
Syntaks-
FUNCTION <function module> <Statements> ENDFUNCTION.
Viktig informasjon knyttet til funksjonsmodul
- Administrasjon
- Import/Endre/Eksporter parametere.
- Tabellparametere/unntak.
- Teknisk dokumentasjon
- Kildekode – L U01 . er funksjonsgruppen
- Globale data – L TOPP .Globale data for funksjonsgruppen- Tilgjengelig på tvers av funksjonsmoduler i funksjonsgruppen.
- Hovedprogram – SAPL . Inneholder listen over alle inkluderende filer for den funksjonsgruppen
Ring en funksjonsmodul
For å kalle en funksjonsmodul, bruk CALL FUNCTION-setningen:
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]].
Hver funksjonsmodul ligger i en funksjonsgruppe, så neste avsnitt forklarer hvordan den containeren fungerer.
Funksjonsgrupper
Funksjonsgrupper er beholdere for funksjonsmoduler. Faktisk er det et stort antall standard funksjonsgrupper.
Alle funksjonsmodulene i en funksjonsgruppe har tilgang til de globale dataene til gruppen.
Som kjørbare programmer (type 1) og modulbassenger (type M), funksjonsgrupper kan inneholde skjermer, utvalgsskjermer og lister.
Peker på Note
- Funksjonsgrupper kan ikke utføres.
- Navnet på en funksjonsgruppe kan være på opptil 26 tegn.
- Når du oppretter en funksjonsgruppe eller funksjonsmodul, genereres hovedprogrammet og inkluderende programmer automatisk.
- Funksjonsgrupper kapsler inn data.
Hvordan opprette en funksjonsgruppe
- Gå til Transaction SE80.
- Velg Program i rullegardinmenyen.
- Skriv navnet på funksjonsgruppen du vil opprette. Vanligvis starter brukerlagde funksjonsgrupper med "Z". f.eks – . Trykk på Enter-tasten.
- Merk at TOP Include opprettes som standard hvis brukeren merker av for alternativet for å opprette en TOP-inkludering.
Hvordan lage en funksjonsmodul
- Opprett en funksjonsgruppe (si "ZCAL").
- Opprett en funksjonsmodul, angi attributter som (funksjonsgruppe, applikasjon, korttekst og prosesstype) og lagre.
- Inkluder filen "LZCALU01" vil ha kildekoden til den første funksjonsmodulen.
- Inkluder filen "LZCALTOP" vil ha globale data.
- Hovedprogram "SAPLZCAL” inneholder
- Globale data inkluderer filen "LZCALTOP"
- Funksjonsmoduler inkluderer filen "LZCALUXX"
- Brukerdefinert Inkluder filene "LZCALF..", "LZCALO.." og "LZCALI.."
- Definer grensesnittparametere og unntak
- Skriv kildekoden
- Aktiver funksjonsmodul
- Testing av funksjonsmodulen – Enkelttest og feilsøking
- Dokumentere og frigi en funksjonsmodul
Hvordan velge riktig modulariseringsteknikk
De fire teknikkene overlapper hverandre, så avgjørelsen avhenger av omfanget av gjenbruk og om et parametergrensesnitt er nødvendig.
| Teknikk | Omfanget av gjenbruk | Parametergrensesnitt | Best brukt til |
|---|---|---|---|
| Makro | Ett program, etter definisjonslinjen | Posisjonelle plassholdere &1 til &9 | Korte gjentatte setninger, lange beregninger, kompleks WRITE-utdata |
| Inkluder program | Ethvert program som navngir inkluderingen | none | Delte datadeklarasjoner og delt kildekode |
| Subrutine (FORM) | Lokalt, eller eksternt med UTFØR … I PROGRAMMET | BRUK, ENDRE TABELLER | Logikk som ofte brukes om igjen i ett program |
| Funksjonsmodul | Hele systemet, inkludert eksterne anrop | IMPORT, EKSPORT, ENDRING, TABELLER, UNNTAK | Rutiner som deles på tvers av applikasjoner og er innkapslet i en funksjonsgruppe |
En kort regel dekker de fleste tilfeller: bruk en makro for forkortelse i ett program, en include for delte deklarasjoner, en subrutine for lokal logikk og en funksjonsmodul når rutinen må kunne kalles fra hvor som helst i systemet. Det er alt til Modularity i ABAP.

