Modularizare ABAP: Macro, Subrutină și Modul Funcțional

⚡ Rezumat inteligent

Modularizarea în ABAP plasează o secvență de instrucțiuni într-o unitate reutilizabilă pe care programul principal o apelează pur și simplu. Această pagină explică macrocomenzile, inclusiv programele, subrutinele, modulele de funcții și grupurile de funcții, cu sintaxă, exemple și criterii de selecție pentru fiecare tehnică.

  • 🧩 Principiu fundamental: O unitate de modularizare este generată ca și cum codul sursă ar fi prezent fizic în programul apelant, astfel încât structura se îmbunătățește fără costuri de execuție.
  • ⚡ macro: Definit cu DEFINE și END-OF-DEFINITION, utilizabil doar în programul care îl definește și numai după linia de definiție.
  • 📄 Includeți programul: Nu are nicio interfață cu parametri și există exclusiv pentru a partaja cod sursă, cum ar fi declarațiile lungi de date, între mai multe programe.
  • 🔁 Subrutină: Declarat cu FORM și ENDFORM, apelat cu PERFORM și potrivit pentru logica reutilizată local într-un singur program.
  • 🧱 Modul funcțional: O rutină la nivel de sistem cu o interfață tipizată pentru importul, exportul, modificarea parametrilor tabelului și a excepțiilor.
  • 📦 Grup de funcții: Un container ale cărui date globale sunt partajate de fiecare modul funcțional din interiorul său, generat automat cu includerile sale TOP și UXX.
  • 🧭 Regula de selecție: Alegeți o macrocomandă pentru abrevierea locală, o subrutină pentru logica locală și un modul de funcții atunci când rutina trebuie să fie reutilizabilă în întregul sistem.

Modularizare în ABAP

Ce este modularizarea în ABAP?

Când modularizezi codul sursă, plasezi o secvență de instrucțiuni ABAP într-un modul. Apoi, în loc să plasezi toate instrucțiunile în programul principal, pur și simplu apelezi modulul. Când programul este generat, codul sursă din unitatea de modularizare este tratat ca și cum ar fi prezent fizic în programul principal.

Nevoia de modularizare

  • Îmbunătățiți structura programului.
  • Codul ușor de citit
  • Ușor de întreținut codul
  • Evitați redundanța și promovează reutilizarea codului

Diverse tehnici de modularizare

  • Utilizarea macrocomenzilor
  • Utilizarea fișierelor include
  • Subrutine
  • Module funcționale

Să analizăm fiecare dintre ele în detaliu:

SAP- Macro ABAP

Dacă doriți să reutilizați același set de instrucțiuni de mai multe ori într-un program, le puteți include într-o macrocomandă.

O macrocomandă poate fi utilizată doar în programul în care este definită și poate fi apelată doar în liniile de program care urmează definiției sale.

Macrocomenzile pot fi utile pentru calcule lungi sau instrucțiuni WRITE complexe.

Sintaxă

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

Macro-urile pot folosi Parametri &N unde N = 1,2,3...

Exemplu:-

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

Ieșire: 2

O macrocomandă este extinsă la momentul compilării într-un singur program. Când același cod trebuie partajat între programe, se utilizează în schimb un program inclus.

Include programe

Include Programele sunt exclusiv pentru modularizarea codului sursă și nu au interfață de parametri.

Programele incluse vă permit să utilizați același cod sursă în programe diferite. Acestea pot fi utile dacă aveți declarații de date lungi pe care doriți să le utilizați în programe diferite.

Sintaxă

Include <include program Name>

Puncte de remarcat

  • Programele includ nu se pot numi singure.
  • Include programele trebuie să conțină declarații complete.

Exemplu:

INCLUDE ZILX0004.

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

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

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

Programele incluse partajează cod, dar nu pot primi parametri. Subrutinele adaugă acea interfață cu parametrii lipsă.

Subrutine

Subrutinele sunt proceduri pe care le puteți defini în orice program ABAP și, de asemenea, apelați din orice program. Subrutinele sunt de obicei numite intern, adică conțin secțiuni de cod sau algoritmi care sunt utilizați frecvent local. Dacă doriți ca o funcție să fie reutilizabilă în întregul sistem, utilizați un modul funcțional.

Sintaxă-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= Numele subrutinei

= Parametrii în curs de trecere

Tipuri de subprograme

  1. Intern
    • Subrutină definită în același program apelat.
    • Poate accesa toate obiectele de date declarate în programul principal ABAP/4.
  2. Extern
    • Subrutină definită în afara programului apelat.
    • Trebuie să utilizați opțiune sau declara obiecte de date în părți comune ale memoriei.

Apelarea unei subrutine

Subrutine interne

PERFORM <subroutine> [<pass>]

= Numele subrutinei

= Parametrii în curs de trecere

Datele declarate în programul principal sunt disponibile automat.

Subrutine externe

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

Puncte de remarcat

  • Apelurile imbricate sunt permise în subrutine (adică PERFORM într-un FORM … ENDFORM ).
  • Apelurile recursive sunt, de asemenea, posibile.
  • Pentru a defini datele locale, utilizați instrucțiunea DATA după FORM . De fiecare dată când intrați în subrutină, datele sunt recreate (cu o valoare inițială) și eliberate la sfârșit (din stivă).
  • Pentru a defini datele globale utilizate într-o subrutină, utilizați instrucțiunea LOCAL după FORM . Valorile sunt salvate când intrați în subrutină și apoi eliberate la sfârșit (din stivă)

💡 Sfat: Subrutinele sunt considerate învechite în obiectele ABAP. Noile dezvoltări ar trebui să plaseze logica reutilizabilă în metodele unei clase și să utilizeze module de funcții atunci când este necesară o interfață activată de la distanță sau la nivel de sistem.

Module funcționale

Modulele funcționale sunt rutine ABAP/4 de uz general pe care oricine le poate folosi. De fapt, există un număr mare de module cu funcții standard disponibile.

Modulele de funcții sunt organizate în Grupuri de Funcții: Colecții de funcții legate logic. Un modul de funcții aparține întotdeauna unui grup de funcții.

Sintaxă-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

Informații importante asociate cu modulul funcțional

  • Administrare
  • Import/Modificare/Exportare parametri.
  • Parametri de tabel/Excepții.
  • Documentație
  • Cod sursă - L U01 . este grupul de funcții
  • Date globale – L TOP .Date globale pentru grupul de funcții- Accesibil prin modulele funcționale din grupul de funcții.
  • Programul principal - SAPL . Conține lista tuturor fișierelor incluse pentru acel grup de funcții

Apelați un modul funcțional

Pentru a apela un modul de funcție, utilizați instrucțiunea 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]].

Fiecare modul funcțional se află într-un grup de funcții, așa că următoarea secțiune explică cum funcționează acel container.

Grupuri de funcții

Grupurile de funcții sunt containere pentru modulele funcționale. De fapt, există un număr mare de grupuri de funcții standard.
Toate modulele funcționale dintr-un grup de funcții pot accesa datele globale ale grupului.

La fel ca programele executabile (tip 1) și pool-uri de module (tip M), grupurile de funcții pot conține ecrane, ecrane de selecție și liste.

Puncte de remarcat

  • Grupurile de funcții nu pot fi executate.
  • Numele unui grup de funcții poate avea până la 26 de caractere.
  • Când creați un grup de funcții sau un modul de funcție, programul principal și programele includ sunt generate automat.
  • Grupurile de funcții încapsulează datele.

Cum se creează un grup de funcții

  1. Mergeți la tranzacția SE80.
  2. Selectați Program în meniul drop-down.
  3. Scrieți numele grupului de funcții pe care doriți să-l creați. În general, grupurile de funcții create de utilizator încep cu „Z”. de exemplu - . Apăsați tasta Enter.
  4. Rețineți că TOP Include este creat în mod implicit dacă utilizatorul bifează opțiunea de a crea o include TOP.

Cum se creează un modul funcțional

  1. Creați un grup de funcții (spuneți „ZCAL”).
  2. Creați un modul funcțional, setați atributele precum (Grup de funcții, Aplicație, Text scurt și Tip de proces) și salvați.
  3. Includeți fișierul „LZCALU01” va avea codul sursă al primului modul de funcție.
  4. Includeți fișierul „LZCALTOP” va avea date globale.
  5. Programul principal „SAPLZCAL” conține
    • Date globale Includeți fișierul „LZCALTOP”
    • Modulele funcționale includ fișierul „LZCALUXX”
    • Definit de utilizator Includeți fișierele „LZCALF..”, „LZCALO..” și „LZCALI..”
  6. Definiți parametrii de interfață și excepțiile
  7. Scrieți codul sursă
  8. Activați modulul funcțional
  9. Testarea modulului funcțional – Test unic și depanare
  10. Documentarea și lansarea unui modul funcțional

Cum să alegi tehnica potrivită de modularizare

Cele patru tehnici se suprapun, așadar decizia depinde de scopul reutilizării și de necesitatea unei interfețe cu parametrii.

Metoda de măsurare Domeniul de aplicare al reutilizării Interfața parametrilor Cel mai bine folosit pentru
Macro Un program, după linia de definiție Substituenți poziționali de la &1 la &9 Instrucțiuni scurte și repetate, calcule lungi, ieșire WRITE complexă
Includeți programul Orice program care denumește includerea Nici unul Declarații de date partajate și cod sursă partajat
Subrutină (FORM) Local sau extern cu PERFORM … ÎN PROGRAM UTILIZAREA, MODIFICAREA TABELELOR Logica este reutilizată frecvent în cadrul unui program
Modul funcțional Întregul sistem, inclusiv apelurile la distanță IMPORT, EXPORT, MODIFICARE, TABELE, EXCEPȚII Rutine partajate între aplicații și încapsulate într-un grup de funcții

O regulă scurtă acoperă majoritatea cazurilor: folosiți o macrocomandă pentru prescurtare în interiorul unui program, o includere pentru declarații partajate, o subrutină pentru logica locală și un modul de funcții ori de câte ori rutina trebuie să poată fi apelată de oriunde din sistem. Asta e tot ce înseamnă modularitatea în ABAP.

Întrebări frecvente

O macrocomandă este extinsă în momentul generării și funcționează doar în cadrul programului care o definește. O subrutină este o procedură reală cu o interfață cu parametri tipați, care poate fi apelată și dintr-un alt program cu PERFORM.

Un modul funcțional al cărui tip de procesare este setat la Modul activat de la distanță poate fi apelat de pe un alt server. SAP sistem sau dintr-o aplicație externă. Parametrii săi trebuie transmiși prin valoare, iar excepțiile sunt tratate ca erori de sistem.

O macrocomandă nu poate fi parcursă pas cu pas în depanator, deoarece este extinsă înainte de generare. Mutați logica într-o subrutină sau o metodă atunci când este necesară depanarea linie cu linie și păstrați macrocomandele limitate la instrucțiuni scurte.

Asistenții de codare bazați pe inteligență artificială din cadrul instrumentelor de dezvoltare ABAP pot schița un schelet de modul funcțional, interfața parametrilor săi și excepțiile sale dintr-o descriere simplă. Dezvoltatorul verifică în continuare logica, activează modulul și îl testează înainte de transport.

Instrumentele de inteligență artificială scanează un program, detectează blocuri repetate și sugerează unde ar trebui exprimată o subrutină, o metodă sau un modul de funcție.tracted. Sugestia accelerează refactorizarea, deși testarea unitară rămâne necesară pentru a confirma un comportament identic.

Rezumați această postare cu: