SAP ABAP - Macro

Se vogliamo riutilizzare lo stesso insieme di istruzioni più di una volta in un programma, dobbiamo includerle in una macro. Ad esempio, una macro può essere utile per calcoli lunghi o per scrivere complesse istruzioni WRITE. Possiamo usare una macro solo all'interno di un programma in cui è definita. La definizione della macro dovrebbe avvenire prima che la macro venga utilizzata nel programma.

Le macro sono progettate in base ai segnaposto. Il segnaposto funziona come i puntatori in linguaggio C. È possibile definire una macro all'interno dell'istruzione DEFINE ... END-OF-DEFINITION.

Di seguito è riportata la sintassi di base di una definizione di macro:

DEFINE <macro_name>. <statements> 
END-OF-DEFINITION. 
   ...... 
  
   <macro_name> [<param1> <param2>....].

È necessario definire una macro prima di richiamarla. Il <param1>…. sostituisce i segnaposto & 1 ... nelle istruzioni ABAP contenute nella definizione della macro.

Il numero massimo di segnaposto in una definizione macro è nove. Cioè, quando viene eseguito un programma, il sistema SAP sostituisce la macro con istruzioni appropriate e i segnaposto & 1, & 2,…. & 9 vengono sostituiti dai parametri param1, param2, .... param9. Possiamo richiamare una macro all'interno di un'altra macro, ma non la stessa macro.

Esempio

Vai alla transazione SE38. Crea un nuovo programma ZMACRO_TEST insieme alla descrizione nel campo di testo breve e anche con attributi appropriati come Tipo e Stato come mostrato nello screenshot seguente -

Di seguito è riportato il codice:

REPORT ZMACRO_TEST. 
DEFINE mac_test. 
WRITE: 'This is Macro &1'. 
END-OF-DEFINITION. 

PARAMETERS: s1 type C as checkbox. 
PARAMETERS: s2 type C as checkbox. 
PARAMETERS: s3 type C as checkbox default 'X'. 

START-OF-SELECTION. 
IF s1 = 'X'. 
   mac_test 1. ENDIF. 
IF s2 = 'X'. 
   mac_test 2. 
ENDIF.
 
IF s3 = 'X'. 
   mac_test 3. 
ENDIF.

Abbiamo 3 caselle di controllo. Durante l'esecuzione del programma, selezioniamo la casella di controllo S2.

Il codice precedente produce il seguente output:

A Macro Program 
 
This is Macro 2

Se tutte le caselle di controllo sono selezionate, il codice produce il seguente output:

A Macro Program 
 
This is Macro 1 This is Macro 2 This is Macro 3