Modularizzazione ABAP: Macro, Subroutine e Moduli Funzione
⚡ Riepilogo intelligente
In ABAP, la modularizzazione consiste nel raggruppare una sequenza di istruzioni in un'unità riutilizzabile che il programma principale può semplicemente richiamare. Questa pagina illustra macro, programmi include, subroutine, moduli funzione e gruppi di funzioni, con sintassi, esempi e criteri di selezione per ciascuna tecnica.

Che cos'è la modularizzazione in ABAP?
Quando si modularizza il codice sorgente, si inserisce una sequenza di istruzioni ABAP in un modulo. Quindi, invece di inserire tutte le istruzioni nel programma principale, si richiama semplicemente il modulo. Quando il programma viene generato, il codice sorgente nell'unità di modularizzazione viene trattato come se fosse fisicamente presente nel programma principale.
Necessità di modularizzazione
- Migliorare la struttura del programma.
- Facile leggere il codice
- Facile mantenere il codice
- Evita la ridondanza e promuove il riutilizzo del codice
Varie tecniche di modularizzazione
- Utilizzo delle macro
- Utilizzo dei file include
- subroutine
- Moduli funzionali
Esaminiamo ciascuno di essi in dettaglio:
SAP-Macro ABAP
Se desideri riutilizzare lo stesso insieme di istruzioni più di una volta in un programma, puoi includerle in una macro.
È possibile utilizzare una macro solo all'interno del programma in cui è definita e può essere richiamata solo nelle righe di programma successive alla sua definizione.
Le macro possono essere utili per calcoli lunghi o istruzioni WRITE complesse.
Sintassi
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Le macro possono utilizzare parametri &N dove N = 1,2,3…
Esempio:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Uscita: 2
Una macro viene espansa in fase di compilazione solo all'interno di un singolo programma. Quando lo stesso codice deve essere condiviso tra più programmi, si utilizza invece un programma di inclusione.
Includi programmi
I programmi Include servono esclusivamente per modularizzare il codice sorgente e non hanno un'interfaccia parametrica.
I programmi include consentono di utilizzare lo stesso codice sorgente in programmi diversi. Possono essere utili se si hanno dichiarazioni di dati lunghe che si desidera utilizzare in programmi differenti.
Sintassi
Include <include program Name>
Punti da notare
- I programmi Include non possono chiamare se stessi.
- I programmi include devono contenere istruzioni complete.
Esempio:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
I programmi di inclusione condividono il codice ma non possono ricevere parametri. Le subroutine aggiungono questa interfaccia per i parametri mancante.
subroutine
Le subroutine sono procedure che è possibile definire in any Programma ABAP e anche chiamare da qualsiasi programma. Le subroutine vengono normalmente chiamate internamente, ovvero contengono sezioni di codice o algoritmi che vengono utilizzati frequentemente localmente. Se si desidera che una funzione sia riutilizzabile in tutto il sistema, utilizzare un modulo funzione.
Sintassi-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Nome della subroutine
= Parametri passati
Tipi di subroutine
- Interno
- Subroutine definita nello stesso programma richiamato.
- Può accedere a tutti gli oggetti dati dichiarati nel programma principale ABAP/4.
- Esterno
- Sottoprogramma definito all'esterno del programma richiamato.
- È necessario utilizzare il opzione o dichiarare oggetti dati in parti comuni della memoria.
Chiamare una subroutine
Subroutine interne
PERFORM <subroutine> [<pass>]
= Nome della subroutine
= Parametri passati
I dati dichiarati nel programma principale sono automaticamente disponibili.
Subroutine esterne
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>].
Punti da notare
- Le chiamate nidificate sono consentite nelle subroutine (ad esempio PERFORM all'interno di un FORM … ENDFORM ).
- Sono possibili anche chiamate ricorsive.
- Per definire i dati locali, utilizzare l'istruzione DATA dopo FORM . Ogni volta che si entra nella subroutine, i dati vengono ricreati (con un valore iniziale) e rilasciati alla fine (dallo stack).
- Per definire i dati globali utilizzati all'interno di una subroutine, utilizzare l'istruzione LOCAL dopo FORM . I valori vengono salvati quando si entra nella subroutine e poi rilasciati alla fine (dallo stack)
Suggerimento: In ABAP Objects, le subroutine sono considerate obsolete. Nei nuovi sviluppi, la logica riutilizzabile dovrebbe essere inserita nei metodi di una classe, mentre i moduli funzione dovrebbero essere utilizzati quando è necessaria un'interfaccia remota o a livello di sistema.
Moduli funzionali
I moduli funzione sono routine ABAP/4 di uso generale che chiunque può utilizzare. Sono infatti disponibili numerosi moduli funzionali standard.
I moduli funzione sono organizzati in gruppi funzione: raccolte di funzioni logicamente correlate. Un modulo funzione appartiene sempre a un gruppo funzione.
Sintassi-
FUNCTION <function module> <Statements> ENDFUNCTION.
Informazioni importanti associate al modulo funzione
- Amministrazione
- Importa/Modifica/Esporta parametri.
- Parametri/Eccezioni della tabella.
- Documentazione
- Codice sorgente – L U01. è il gruppo di funzioni
- Dati Globali – L TOP .Dati globali per il gruppo di funzioni - Accessibile tra i moduli di funzione nel gruppo di funzioni.
- Programma principale – SAPl . Contiene l'elenco di tutti i file di inclusione per quel gruppo di funzioni
Richiamare un modulo funzione
Per chiamare un modulo funzione, utilizzare l'istruzione 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]].
Ogni modulo funzione risiede all'interno di un gruppo di funzioni, quindi la sezione successiva spiega come funziona questo contenitore.
Gruppi di funzioni
I gruppi di funzioni sono contenitori per moduli di funzione. Esistono infatti numerosi gruppi di funzioni standard.
Tutti i moduli funzionali di un gruppo funzionale possono accedere ai dati globali del gruppo.
Come i programmi eseguibili (tipo 1) e pool di moduli (tipo M), i gruppi di funzioni possono contenere schermate, schermate di selezione ed elenchi.
Punti da notare
- I gruppi di funzioni non possono essere eseguiti.
- Il nome di un gruppo di funzioni può contenere fino a 26 caratteri.
- Quando si crea un gruppo di funzioni o un modulo di funzione, il programma principale e i programmi inclusi vengono generati automaticamente.
- I gruppi di funzioni incapsulano i dati.
Come creare un gruppo di funzioni
- Vai alla transazione SE80.
- Seleziona Programma nel menu a discesa.
- Scrivi il nome del gruppo di funzioni che desideri creare. Generalmente i gruppi di funzioni creati dall'utente iniziano con "Z". per esempio - . Premi il tasto Invio.
- Tieni presente che la TOP include viene creata per impostazione predefinita se l'utente seleziona l'opzione di creazione di una TOP include.
Come creare un modulo funzione
- Creare un gruppo di funzioni (dire "ZCAL").
- Crea un modulo funzione, imposta gli attributi come (Gruppo di funzioni, Applicazione, Testo breve e Tipo di processo) e salva.
- Il file di inclusione "LZCALU01" avrà il codice sorgente del primo modulo funzione.
- Il file di inclusione "LZCALTOP" avrà dati globali.
- Programma principale “SAPLZCAL” contiene
- Dati globali Includere il file “LZCALTOP”
- I moduli funzionali includono il file “LZCALUXX”
- File Include definiti dall'utente “LZCALF..”, “LZCALO..” e “LZCALI..”
- Definire i parametri dell'interfaccia e le eccezioni
- Scrivi il codice sorgente
- Attiva il modulo funzionale
- Test del modulo funzionale: test singolo e debug
- Documentare e rilasciare un modulo funzionale
Come scegliere la tecnica di modularizzazione più adatta
Le quattro tecniche si sovrappongono, quindi la decisione dipende dall'ambito di riutilizzo e dalla necessità o meno di un'interfaccia parametrica.
| Tecnica | Ambito di riutilizzo | Interfaccia dei parametri | qui utilizzati per |
|---|---|---|---|
| Macro | Un programma, dopo la riga di definizione | Segnaposto posizionali da &1 a &9 | Brevi istruzioni ripetute, calcoli lunghi, output WRITE complesso |
| Includi programma | Qualsiasi programma che include | Nona | Dichiarazioni di dati condivise e codice sorgente condiviso |
| Sottoprogramma (FORM) | Locale o esterno con PERFORM … IN PROGRAM | UTILIZZO, CAMBIO, TABELLE | Logica riutilizzata frequentemente all'interno di un programma |
| Modulo funzione | Sistema completo, comprese le chiamate remote. | IMPORTAZIONE, ESPORTAZIONE, CAMBIO, TABELLE, ECCEZIONI | Routine condivise tra applicazioni e incapsulate in un gruppo di funzioni |
Una regola generale che copre la maggior parte dei casi è la seguente: utilizzare una macro per le abbreviazioni all'interno di un programma, un include per le dichiarazioni condivise, una subroutine per la logica locale e un modulo funzione ogni volta che la routine deve essere richiamabile da qualsiasi punto del sistema. Questo è tutto ciò che c'è da sapere sulla modularità in ABAP.
