ABAP-i modulariseerimine: makro-, alamprogrammi- ja funktsioonimoodul

⚡ Nutikas kokkuvõte

ABAP-i modulariseerimine paigutab lausejada korduvkasutatavasse ühikusse, mida põhiprogramm lihtsalt kutsub. See leht selgitab makrosid, kaasamisprogramme, alamprogramme, funktsioonimooduleid ja funktsioonirühmi koos süntaksi, näidete ja iga tehnika valikukriteeriumidega.

  • 🧩 Põhiprintsiip: Modulaarsusüksus genereeritakse nii, nagu oleks selle lähtekood füüsiliselt kutsuvas programmis olemas, seega struktuur paraneb ilma käitusaja kuludeta.
  • Makro: Defineeritakse DEFINE ja END-OF-DEFINITION abil, kasutatav ainult seda defineeriva programmi sees ja ainult pärast definitsioonirida.
  • 📄 Kaasa programm: Ei kanna parameetriliidest ja on olemas ainult lähtekoodi, näiteks pikkade andmedeklaratsioonide, jagamiseks mitme programmi vahel.
  • 🔁 Alamprogramm: Deklareeritakse FORM ja ENDFORM abil, kutsutakse välja PERFORM abil ning sobib loogika lokaalseks taaskasutamiseks ühe programmi sees.
  • 🧱 Funktsioonimoodul: Süsteemiülene rutiin tüübitud liidesega tabeli parameetrite importimiseks, eksportimiseks, muutmiseks ja erandite tegemiseks.
  • 📦 Funktsioonigrupp: Konteiner, mille globaalseid andmeid jagavad kõik selles olevad funktsioonimoodulid ning mis genereeritakse automaatselt koos selle TOP ja UXX lisadega.
  • 🧭 Valiku reegel: Valige makro lokaalse stenograafia jaoks, alamprogramm lokaalse loogika jaoks ja funktsioonimoodul, kui rutiin peab olema kogu süsteemis korduvkasutatav.

Modulaarsus ABAP-is

Mis on ABAP-i modulariseerimine?

Lähtekoodi modulariseerimisel paigutatakse moodulisse ABAP-lausete jada. Seejärel, selle asemel, et kõik laused põhiprogrammi paigutada, kutsutakse lihtsalt moodul välja. Programmi genereerimisel käsitletakse modulariseerimisüksuses olevat lähtekoodi nii, nagu see oleks füüsiliselt põhiprogrammis olemas.

Modulariseerimise vajadus

  • Parandage programmi struktuuri.
  • Lihtne koodi lugeda
  • Koodi lihtne hooldada
  • Väldi üleliigsust ja soodustab koodi taaskasutamist

Erinevad modulariseerimistehnikad

  • Makrode kasutamine
  • Kaasamisfailide kasutamine
  • Alamprogrammid
  • Funktsioonimoodulid

Vaatleme igaüks neist üksikasjalikumalt:

SAP- ABAP makro

Kui soovite sama lausekomplekti programmis rohkem kui korra kasutada, saate need makrosse lisada.

Makrot saab kasutada ainult selle programmi sees, milles see on defineeritud, ja seda saab kutsuda ainult programmi ridades pärast selle definitsiooni.

Makrod võivad olla kasulikud pikkade arvutuste või keerukate WRITE-lausete jaoks.

Süntaks

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

Makrod võivad kasutada parameetreid &N kus N = 1,2,3…

Näide: -

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

Väljund: 2

Makrot laiendatakse kompileerimise ajal ainult ühe programmi sees. Kui sama koodi tuleb programmide vahel jagada, kasutatakse selle asemel kaasamisprogrammi.

Kaasa programmid

Kaasa programmid on mõeldud ainult lähtekoodi modulariseerimiseks ja neil pole parameetriliidest.

Lisamisprogrammid võimaldavad teil kasutada sama lähtekoodi erinevates programmides. Need võivad olla kasulikud, kui teil on pikki andmedeklaratsioone, mida soovite kasutada erinevates programmides.

Süntaks

Include <include program Name>

Märkimist vajavad punktid

  • Kaasa programmid ei saa end nimetada.
  • Kaasamise programmid peavad sisaldama täielikke avaldusi.

Näide:

INCLUDE ZILX0004.

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

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

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

Include programmid jagavad koodi, aga ei saa parameetreid vastu võtta. Alamprogrammid lisavad puuduva parameetri liidesesse.

Alamprogrammid

Alamprogrammid on protseduurid, mida saate määratleda mis tahes ABAP programm ja helistage ka mis tahes programmist. Alamprogramme kutsutakse tavaliselt sisemiselt, see tähendab, et need sisaldavad koodi või algoritmide osi, mida kasutatakse sageli kohapeal. Kui soovite, et funktsioon oleks kogu süsteemis korduvkasutatav, kasutage funktsioonimoodulit.

süntaks-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= Alamprogrammi nimi

= Parameetrid edastatakse

Alamprogrammide tüübid

  1. sisemine
    • Väljakutsutavas samas programmis määratletud alamprogramm.
    • Juurdepääs kõigile ABAP/4 põhiprogrammis deklareeritud andmeobjektidele.
  2. Väline
    • Väljakutsutavat programmi defineeritud alamprogramm.
    • Vaja kasutada suvandit või deklareerida andmeobjekte mälu ühisosades.

Alamprogrammi kutsumine

Sisemised alamprogrammid

PERFORM <subroutine> [<pass>]

= Alamprogrammi nimi

= Parameetrid edastatakse

Põhiprogrammis deklareeritud andmed on automaatselt saadaval.

Välised alamprogrammid

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

Märkimist vajavad punktid

  • Pesastatud kõned on alamprogrammides lubatud (st PERFORM vormis FORM … ENDFORM ).
  • Võimalikud on ka rekursiivsed kõned.
  • Kohalike andmete määratlemiseks kasutage DATA-lauset pärast FORM . Iga kord, kui alamprogrammi sisenete, luuakse andmed uuesti (algväärtusega) ja vabastatakse lõpus (virust).
  • Alamprogrammis kasutatavate globaalsete andmete määratlemiseks kasutage käsku LOCAL pärast FORM . Väärtused salvestatakse alamprogrammi sisenemisel ja seejärel vabastatakse lõpus (virust)

💡 Näpunäide: ABAP-objektides peetakse alamrutiine iganenuks. Uues arenduses tuleks klassi meetoditesse paigutada korduvkasutatav loogika ning funktsioonimooduleid kasutada siis, kui on vaja kaugjuurdepääsuga või süsteemiülest liidest.

Funktsioonimoodulid

Funktsioonimoodulid on üldotstarbelised ABAP/4 rutiinid, mida saavad kasutada kõik. Tegelikult on saadaval suur hulk standardseid funktsioonimooduleid.

Funktsioonimoodulid on jaotatud funktsioonirühmadeks: loogiliselt seotud funktsioonide kogumid. Funktsioonimoodul kuulub alati funktsioonirühma.

süntaks-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

Oluline teave, mis on seotud funktsioonimooduliga

  • haldus
  • Parameetrite importimine/muutmine/eksportimine.
  • Tabeli parameetrid/erandid.
  • dokumentatsioon
  • Lähtekood – L U01 . on funktsioonirühm
  • Globaalsed andmed – L TOP .Funktsioonirühma globaalsed andmed- Juurdepääs funktsioonirühma funktsioonimoodulitele.
  • Põhiprogramm - SAPL . Sisaldab kõigi selle funktsioonirühma kaasamisfailide loendit

Funktsioonimooduli kutsumine

Funktsioonimooduli kutsumiseks kasutage käsku CALL FUNCTION:

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

Iga funktsioonimoodul asub funktsioonirühma sees, seega selgitatakse järgmises osas, kuidas see konteiner töötab.

Funktsioonirühmad

Funktsioonirühmad on funktsioonimoodulite konteinerid. Tegelikult on olemas suur hulk standardseid funktsioonirühmi.
Kõik funktsioonirühma funktsioonimoodulid pääsevad juurde rühma globaalsetele andmetele.

Nagu käivitatavad programmid (tüüp 1) ja moodulibasseinid (tüüp M), võivad funktsioonirühmad sisaldada ekraane, valikukuvasid ja loendeid.

Märkimist vajavad punktid

  • Funktsioonirühmi ei saa käivitada.
  • Funktsioonirühma nimi võib olla kuni 26 tähemärki pikk.
  • Funktsioonirühma või funktsioonimooduli loomisel genereeritakse põhiprogramm ja kaasamisprogrammid automaatselt.
  • Funktsioonirühmad kapseldavad andmeid.

Kuidas luua funktsioonirühma

  1. Ava Tehing SE80.
  2. Valige rippmenüüst Programm.
  3. Kirjutage selle funktsioonirühma nimi, mida soovite luua. Üldiselt kasutaja loodud funktsioonirühmad algavad tähega "Z". nt - . Vajutage sisestusklahvi.
  4. Pange tähele, et TOP Include luuakse vaikimisi, kui kasutaja märgib TOP-i kaasamise loomise valiku.

Kuidas luua funktsioonimoodulit

  1. Looge funktsioonirühm (öelge "ZCAL").
  2. Loo funktsioonimoodul, määra atribuudid nagu (funktsioonirühm, rakendus, lühike tekst ja protsessi tüüp) ja salvesta.
  3. Kaasa fail "LZCALU01" sisaldab esimese funktsioonimooduli lähtekoodi.
  4. Kaasa fail "LZCALTOP" sisaldab globaalseid andmeid.
  5. Põhiprogramm "SAPLZCAL” sisaldab
    • Globaalsed andmed Kaasake fail "LZCALTOP"
    • Funktsioonimoodulid sisaldavad faili "LZCALUXX"
    • Kasutaja määratud Kaasake failid "LZCALF..", "LZCALO.." ja "LZCALI.."
  6. Liidese parameetrite ja erandite määratlemine
  7. Kirjutage lähtekood
  8. Aktiveerige funktsioonimoodul
  9. Funktsioonimooduli testimine – üksiktest ja silumine
  10. Funktsioonimooduli dokumenteerimine ja vabastamine

Kuidas valida õige modulariseerimistehnika

Need neli tehnikat kattuvad, seega sõltub otsus taaskasutamise ulatusest ja sellest, kas parameetriliides on vajalik.

Tehnika Taaskasutuse ulatus Parameetriliides Parim kasutada
Makro Üks programm pärast definitsioonirida Positsionaalsed kohahoidjad &1 kuni &9 Lühikesed korduvad laused, pikad arvutused, keeruline WRITE-väljund
Kaasa programm Iga programm, mis nimetab kaasatava faili mitte ükski Jagatud andmedeklaratsioonid ja jagatud lähtekood
Alamprogramm (FORM) Kohalik või väline PERFORM … IN PROGRAM abil TABELITE KASUTAMINE, MUUTMINE Loogikat taaskasutatakse sageli ühe programmi sees
Funktsioonimoodul Kogu süsteem, sh kaugkõned TABELITE IMPORTIMINE, EKSPORTIMINE, MUUTMINE, ERANDID Rakenduste vahel jagatud ja funktsioonirühma kapseldatud rutiinid

Lühireegel katab enamiku juhtumeid: kasutage makrot ühe programmi sees kiirsõnade jaoks, jagatud deklaratsioonide jaoks lisamoodulit, lokaalse loogika jaoks alamprogrammi ja funktsioonimoodulit alati, kui rutiini peab saama süsteemist kõikjalt välja kutsuda. See on kõik ABAP-i modulaarsuse seisukohast.

KKK

Makrot laiendatakse genereerimise ajal ja see töötab ainult seda defineeriva programmi sees. Alamprogramm on reaalne protseduur tüübitud parameetriliidesega, mida saab PERFORM-iga kutsuda ka teisest programmist.

Funktsioonimoodulit, mille töötlemistüübiks on seatud Remote-Enabled Module, saab kutsuda teisest SAP süsteemist või välisest rakendusest. Selle parameetrid tuleb edastada väärtuse kaupa ja erandeid käsitletakse süsteemitõrgetena.

Makrot ei saa siluris samm-sammult läbida, kuna see laiendatakse enne genereerimist. Kui on vaja rida-realt silumist, tuleks loogika teisaldada alamprogrammi või meetodisse ning makrode puhul tuleks piirduda lühikeste lausetega.

ABAP-i arendustööriistades olevad tehisintellekti koodiassistendid saavad lihtsa kirjelduse põhjal luua funktsioonimooduli skeleti, selle parameetriliidese ja erandid. Arendaja vaatab enne edastamist siiski loogika üle, aktiveerib mooduli ja testib seda.

Tehisintellekti tööriistad skannivad programmi, tuvastavad korduvaid plokke ja pakuvad välja, kus alamprogrammi, meetodit või funktsioonimoodulit tuleks kasutada.tracSee ettepanek kiirendab refaktoreerimist, kuigi identse käitumise kinnitamiseks on endiselt vaja ühiktestimist.

Võta see postitus kokku järgmiselt: