ABAP中宏的使用不多,基本用于简单的代码复用,在SAP报表开发中可用于Filedcat和Layout的创建。

一、宏的定义与调用
语法:

DEFINE NAME. "NAME为宏的名,自己定义"
<STATEMENTS> . "代码段,一般是计算公式或赋值"
END-OF-DEFINITION.

define后跟的是宏的名。在define和end-of-definition 之间必须指定完整语句。语句中最多可包含九个占位符:&1,&2,&3 ………. &9.

完成宏的定义后,就可以进行调用,方法如下:
NAME P1 P2 P3 ………P9 .

其中p1 p2 p3到p9可以为任何变量,分别对应宏定义中的9个占位符&1~&9. 宏可以调用另外一个宏,但是不能调用自己。

举个简单的例子:

DATA:SUM TYPE I,
COUNT TYPE I,
A1 TYPE I VALUE 90,
A2 TYPE I VALUE 30.

"定义第一个宏counter"
DEFINE COUNTER.
SUM = &1 + &2 .
COUNT = &3 &4 &5 ."注意:每个占位符之间有空格隔开"
WRITE:/ '加法的结果是:',SUM.
WRITER &3 &4 &5 COUNT ."调用第二个宏"
WRITE:/.
END-OF-DEFINITION.

"定义第二个宏 writer"
DEFINE WRITER.
WRITE:/ '&1 &2 &3 的结果是:' , &4.
END-OF-DEFINITION.

"执行测试数据: "
COUNTER 1 2 31 - 12 .
COUNTER 12 23 9 ** 3 .
COUNTER 123 323 A1 - A2 .

 

显示的结果:

lua定义宏 宏定义怎么调用_赋值

 

 

我们可以看到第一,二行是我们第一次调用COUNTER的结果,1 2 分别分配给占位符&1和&2,这样就相当于 sum = 1 + 2 .自然我们得到的结果就是3.接下来,31 - 12 分别对应占位符&3 &4 &5 ,那count = 31 - 12.,count的值为19。然后这时我们调用了宏writer:
WRITER &3 &4 &5 COUNT . 这句话其实就相当于 WRITER 31 - 12 19 。然后依次对应writer中的四个占位符&1,&2,&3,&4。这样就很简单明了了,其实就是内部调用新的宏。

这里容易混淆的就是多个宏的占位符,每一个宏是独立的,不要将两个宏的占位符混淆。

还有一点要注意,我在测试时,上述代码在sap编辑器中显示有红色字体(一般语法错误会显示红色字体),但是在执行检察时并未提示错误,执行也没有down掉,并能输出正确结果,暂时未查明何因,各位博友有遇到过或者清楚原因的可以留言交流一下。

上面的例子基本可以清楚讲述宏的用法,下面简单看下我们在实际使用中的小例子:

DATA:FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DEFINE ADD_FIELD.
CLEAR:FIELDCAT.
FIELDCAT-COL_POS = &1.
FIELDCAT-FIELDNAME = &2 .
FIELDCAT-SELTEXT_L = &3 .
APPEND FIELDCAT.
END-OF-DEFINITION.
FORM FRM_FIELDCAT.
ADD_FIELD 1 'MATNR' '物料号'.
ADD_FIELD 2 'WERKS' '工厂'.
ADD_FIELD 3 'DISPO' 'MRP控制者'.
ENDFORM.

 

这是我们使用宏 创建fieldcat内表的一个简单应用,有时如果ALV字段比较少且结构简单,我们可以不建立结构,直接在代码段中实现fieldcat的创建和相应字段的赋值。