ABAP-modularisatie: macro's, subroutines en functiemodules
⚡ Slimme samenvatting
Modularisatie in ABAP plaatst een reeks instructies in een herbruikbare eenheid die het hoofdprogramma eenvoudigweg aanroept. Deze pagina legt macro's, include-programma's, subroutines, functiemodules en functiegroepen uit, met syntax, voorbeelden en selectiecriteria voor elke techniek.

Wat is modularisatie in ABAP?
Bij het modulariseren van broncode plaatst u een reeks ABAP-instructies in een module. In plaats van al deze instructies in uw hoofdprogramma op te nemen, roept u vervolgens simpelweg de module aan. Wanneer het programma wordt gegenereerd, wordt de broncode in de modularisatie-eenheid behandeld alsof deze fysiek aanwezig is in het hoofdprogramma.
Behoefte aan modularisering
- Verbeter de structuur van het programma.
- Gemakkelijk om de code te lezen
- Makkelijk om de code te onderhouden
- Vermijd redundantie en bevorder hergebruik van code
Verschillende modularisatietechnieken
- Gebruik van macro's
- Gebruik van include-bestanden
- subroutines
- Functiemodules
Laten we ze allemaal in detail bekijken:
SAP- ABAP-macro
Als u dezelfde set instructies meerdere keren in een programma wilt gebruiken, kunt u deze in een macro opnemen.
Een macro kan alleen worden gebruikt binnen het programma waarin deze is gedefinieerd, en kan alleen worden aangeroepen in regels van het programma die volgen op de definitie ervan.
Macro's kunnen handig zijn voor langdurige berekeningen of complexe WRITE-instructies.
Syntaxis
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Macro's kunnen parameters gebruiken &N waarbij N = 1,2,3…
Voorbeeld:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Uitgang: 2
Een macro wordt tijdens het compileren binnen één programma uitgebreid. Wanneer dezelfde code door meerdere programma's moet worden gebruikt, wordt in plaats daarvan een include-programma gebruikt.
Inclusief programma's
Inclusief programma's zijn uitsluitend bedoeld voor het modulariseren van de broncode en hebben geen parameterinterface.
Met include-programma's kunt u dezelfde broncode in verschillende programma's gebruiken. Dit kan handig zijn als u lange gegevensdeclaraties hebt die u in verschillende programma's wilt gebruiken.
Syntaxis
Include <include program Name>
Punten om op te letten
- Inclusief programma's kunnen zichzelf niet aanroepen.
- Inclusief programma's moeten volledige instructies bevatten.
Voorbeeld:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Include-programma's delen code, maar kunnen geen parameters ontvangen. Subroutines voegen die ontbrekende parameterinterface toe.
subroutines
Subroutines zijn procedures die u in elk programma kunt definiëren ABAP-programma en ook vanuit elk programma aanroepen. Subroutines worden normaal gesproken intern aangeroepen, dat wil zeggen dat ze delen van code of algoritmen bevatten die vaak lokaal worden gebruikt. Als u wilt dat een functie overal in het systeem herbruikbaar is, gebruikt u een functiemodule.
Syntaxis-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Naam van de subroutine
= Parameters worden doorgegeven
Soorten subroutines
- Intern
- Subroutine gedefinieerd in hetzelfde programma dat wordt aangeroepen.
- Heeft toegang tot alle dataobjecten die zijn gedeclareerd in het ABAP/4-hoofdprogramma.
- Extern
- Subroutine gedefinieerd buiten het opgeroepen programma.
- Moet gebruik maken van de optie of declareer data-objecten in gemeenschappelijke delen van het geheugen.
Een subroutine aanroepen
Interne subroutines
PERFORM <subroutine> [<pass>]
= Naam van de subroutine
= Parameters worden doorgegeven
Gegevens die in het hoofdprogramma zijn gedeclareerd, zijn automatisch beschikbaar.
Externe subroutines
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>].
Punten om op te letten
- Geneste oproepen zijn toegestaan in subroutines (dwz PERFORM binnen een FORM … ENDFORM ).
- Recursieve oproepen zijn ook mogelijk.
- Om lokale gegevens te definiëren, gebruikt u de DATA-instructie na FORM . Elke keer dat u de subroutine betreedt, worden de gegevens opnieuw aangemaakt (met een initiële waarde) en aan het einde vrijgegeven (van de stapel).
- Om globale gegevens te definiëren die binnen een subroutine worden gebruikt, gebruikt u de LOCAL-instructie na FORM . De waarden worden bij het betreden van de subroutine opgeslagen en aan het einde vrijgegeven (van de stapel)
💡Tip: Subroutines worden in ABAP Objects als verouderd beschouwd. Bij nieuwe ontwikkelingen moet herbruikbare logica in methoden van een klasse worden geplaatst en moeten functiemodules worden gebruikt wanneer een interface met toegang op afstand of een systeembrede interface vereist is.
Functiemodules
Functiemodules zijn ABAP/4-routines voor algemeen gebruik die iedereen kan gebruiken. Er zijn namelijk een groot aantal standaardfunctiemodules beschikbaar.
Functiemodules zijn georganiseerd in functiegroepen: verzamelingen van logisch gerelateerde functies. Een Functiemodule behoort altijd tot een Functiegroep.
Syntaxis-
FUNCTION <function module> <Statements> ENDFUNCTION.
Belangrijke informatie Geassocieerd met functiemodule
- Administratie
- Parameters importeren/wijzigen/exporteren.
- Tabelparameters/uitzonderingen.
- Documentatie
- Broncode – L U01 . is de Functiegroep
- Mondiale gegevens – L TOP .Globale gegevens voor de functiegroep - Toegankelijk voor alle functiemodules in de functiegroep.
- Hoofdprogramma – SAPL . Bevat de lijst met alle include-bestanden voor die functiegroep
Roep een functiemodule aan
Om een functiemodule aan te roepen, gebruikt u de CALL FUNCTION-instructie:
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]].
Elke functiemodule bevindt zich binnen een functiegroep, dus in het volgende gedeelte wordt uitgelegd hoe die container werkt.
Functiegroepen
Functiegroepen zijn containers voor functiemodules. Er zijn feitelijk een groot aantal standaardfunctiegroepen.
Alle functiemodules in een functiegroep hebben toegang tot de globale gegevens van de groep.
Zoals uitvoerbare programma's (type 1) en modulezwembaden (type M), functiegroepen kunnen schermen, selectieschermen en lijsten bevatten.
Punten om op te letten
- Functiegroepen kunnen niet worden uitgevoerd.
- De naam van een functiegroep kan maximaal 26 tekens lang zijn.
- Wanneer u een functiegroep of functiemodule aanmaakt, worden het hoofdprogramma en de include-programma's automatisch gegenereerd.
- Functiegroepen kapselen gegevens in.
Hoe u een functiegroep maakt
- Ga naar Transactie SE80.
- Selecteer Programma in de vervolgkeuzelijst.
- Schrijf de naam van de functiegroep die u wilt maken. Over het algemeen beginnen door de gebruiker gemaakte functiegroepen met “Z”. bijvoorbeeld – . Druk op de Enter-toets.
- Houd er rekening mee dat de TOP Include standaard wordt gemaakt als de gebruiker de optie aanvinkt om een TOP Include te maken.
Hoe u een functiemodule maakt
- Creëer een functiegroep (zeg “ZCAL”).
- Maak een functiemodule aan, stel de attributen in zoals (functiegroep, toepassing, korte beschrijving en procestype) en sla op.
- Het opgenomen bestand “LZCALU01” heeft de broncode van de eerste functiemodule.
- Inclusief bestand “LZCALTOP” zal globale gegevens bevatten.
- Hoofdprogramma “SAPLZCAL” bevat
- Globale gegevens Voeg bestand “LZCALTOP” toe
- Functiemodules bevatten bestand “LZCALUXX”
- Door gebruiker gedefinieerd Inclusief bestanden “LZCALF..”, “LZCALO..” en “LZCALI..”
- Definieer interfaceparameters en uitzonderingen
- Schrijf de broncode
- Functiemodule activeren
- De functiemodule testen – enkele test en foutopsporing
- Een functiemodule documenteren en vrijgeven
Hoe kies je de juiste modularisatietechniek?
De vier technieken overlappen elkaar, dus de keuze hangt af van de mate van hergebruik en of een parameterinterface nodig is.
| Techniek | Omvang van hergebruik | Parameterinterface | Best gebruikt voor |
|---|---|---|---|
| Macro | Eén programma, na de definitieregel | Positieaanduidingen &1 tot en met &9 | Korte, herhaalde instructies, lange berekeningen, complexe WRITE-uitvoer |
| Inclusief programma | Elk programma dat de include-instructie benoemt | Geen | Gedeelde gegevensdeclaraties en gedeelde broncode |
| Subroutine (FORMULIER) | Lokaal of extern met PERFORM … IN PROGRAM | GEBRUIKEN, WIJZIGEN, TABELLEN | Logica die frequent wordt hergebruikt binnen één programma. |
| Functiemodule | Het gehele systeem, inclusief externe oproepen. | IMPORTEREN, EXPORTEREN, WIJZIGEN, TABELLEN, UITZONDERINGEN | Routines die gedeeld worden door verschillende applicaties en gebundeld zijn in een functiegroep. |
Een korte vuistregel dekt de meeste gevallen: gebruik een macro voor verkorte notaties binnen één programma, een include voor gedeelde declaraties, een subroutine voor lokale logica en een functiemodule wanneer de routine vanuit elke plek in het systeem aanroepbaar moet zijn. Dat is alles wat je moet weten over modulariteit in ABAP.
