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.

  • 🧩 Kernprincipe: Een modularisatie-eenheid wordt gegenereerd alsof de broncode fysiek aanwezig is in het aanroepende programma, waardoor de structuur verbetert zonder dat dit ten koste gaat van de runtime.
  • ⚡ Macro: Gedefinieerd met DEFINE en END-OF-DEFINITION, alleen bruikbaar binnen het programma dat het definieert, en alleen na de definitieregel.
  • 📄 Inclusief programma: Het heeft geen parameterinterface en bestaat uitsluitend om broncode, zoals lange gegevensdeclaraties, te delen tussen verschillende programma's.
  • 🔁 Subroutine: Gedeclareerd met FORM en ENDFORM, aangeroepen met PERFORM, en geschikt voor logica die lokaal binnen één programma wordt hergebruikt.
  • 🧱 Functiemodule: Een systeemwijde routine met een getypte interface voor het importeren, exporteren, wijzigen, beheren van tabelparameters en het afhandelen van uitzonderingen.
  • ???? Functiegroep: Een container waarvan de globale gegevens worden gedeeld door elke functiemodule erin, automatisch gegenereerd met de bijbehorende TOP- en UXX-includes.
  • 🧭 Selectieregel: Kies een macro voor lokale afkortingen, een subroutine voor lokale logica en een functiemodule wanneer de routine herbruikbaar moet zijn in het hele systeem.

Modularisatie in ABAP

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

  1. Intern
    • Subroutine gedefinieerd in hetzelfde programma dat wordt aangeroepen.
    • Heeft toegang tot alle dataobjecten die zijn gedeclareerd in het ABAP/4-hoofdprogramma.
  2. 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

  1. Ga naar Transactie SE80.
  2. Selecteer Programma in de vervolgkeuzelijst.
  3. 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.
  4. 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

  1. Creëer een functiegroep (zeg “ZCAL”).
  2. Maak een functiemodule aan, stel de attributen in zoals (functiegroep, toepassing, korte beschrijving en procestype) en sla op.
  3. Het opgenomen bestand “LZCALU01” heeft de broncode van de eerste functiemodule.
  4. Inclusief bestand “LZCALTOP” zal globale gegevens bevatten.
  5. Hoofdprogramma “SAPLZCAL” bevat
    • Globale gegevens Voeg bestand “LZCALTOP” toe
    • Functiemodules bevatten bestand “LZCALUXX”
    • Door gebruiker gedefinieerd Inclusief bestanden “LZCALF..”, “LZCALO..” en “LZCALI..”
  6. Definieer interfaceparameters en uitzonderingen
  7. Schrijf de broncode
  8. Functiemodule activeren
  9. De functiemodule testen – enkele test en foutopsporing
  10. 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.

Veelgestelde vragen

Een macro wordt tijdens het genereren uitgebreid en werkt alleen binnen het programma dat deze definieert. Een subroutine is een echte procedure met een getypte parameterinterface die ook vanuit een ander programma kan worden aangeroepen met PERFORM.

Een functiemodule waarvan het verwerkingstype is ingesteld op 'Module met externe toegang' kan vanuit een andere module worden aangeroepen. SAP Het systeem zelf of een externe applicatie kan de parameters doorgeven. Deze moeten als waarde worden doorgegeven en uitzonderingen worden behandeld als systeemfouten.

Een macro kan niet stap voor stap worden doorlopen in de debugger, omdat deze wordt uitgebreid voordat deze wordt gegenereerd. Verplaats de logica naar een subroutine of een methode wanneer debuggen regel voor regel vereist is, en beperk macro's tot korte instructies.

AI-codeassistenten in ABAP-ontwikkeltools kunnen op basis van een eenvoudige beschrijving een skelet voor een functiemodule, de parameterinterface en de uitzonderingen opstellen. Een ontwikkelaar controleert de logica nog steeds, activeert de module en test deze voordat deze wordt getransporteerd.

AI-tools scannen een programma, detecteren herhaalde codeblokken en suggereren waar een subroutine, methode of functiemodule moet worden uitgevoerd.tracted. De suggestie versnelt het refactoringproces, hoewel unit-testen nog steeds nodig zijn om identiek gedrag te bevestigen.

Vat dit bericht samen met: