SAP ABAP - Macros

Si queremos reutilizar el mismo conjunto de declaraciones más de una vez en un programa, debemos incluirlas en una macro. Por ejemplo, una macro puede ser útil para cálculos largos o para escribir sentencias WRITE complejas. Solo podemos usar una macro dentro de un programa en el que está definida. La definición de macro debe ocurrir antes de que se utilice la macro en el programa.

Las macros se diseñan basándose en marcadores de posición. El marcador de posición funciona como punteros en lenguaje C. Puede definir una macro dentro de la instrucción DEFINE ... END-OF-DEFINITION.

A continuación se muestra la sintaxis básica de una definición de macro:

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

Es necesario definir una macro antes de invocarla. El <param1>…. reemplaza los marcadores de posición & 1 ... en las declaraciones ABAP contenidas en la definición de macro.

El número máximo de marcadores de posición en una definición de macro es nueve. Es decir, cuando se ejecuta un programa, el sistema SAP reemplaza la macro por las declaraciones apropiadas y los marcadores de posición & 1, & 2,…. & 9 se reemplazan por los parámetros param1, param2, .... param9. Podemos invocar una macro dentro de otra macro, pero no la misma macro.

Ejemplo

Vaya a la transacción SE38. Cree un nuevo programa ZMACRO_TEST junto con la descripción en el campo de texto corto, y también con los atributos apropiados, como Tipo y Estado, como se muestra en la siguiente captura de pantalla:

A continuación está el código:

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.

Tenemos 3 casillas de verificación. Mientras ejecutamos el programa, seleccionemos la casilla de verificación S2.

El código anterior produce la siguiente salida:

A Macro Program 
 
This is Macro 2

Si se seleccionan todas las casillas de verificación, el código produce el siguiente resultado:

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