宏是一种单纯源代码复用技术,不存在参数传递机制,宏比include形式更为简单,往往只是为了增强程序的可读性。宏可以在程序中定义,再进行调用使用,此宏只在本程序中可用。也可以将宏定义存贮在Macros库Trmac(se11中查看)中,这样可以在任何程序中直接调用。
Define macro_name.
End-of-definition.
必须在Define和End-of-definition之间指定完整的语句,这些语句最多包含9个占位符,即&1-&9。占位符的意义在于暂时不指定代码,调用的时候进行代码替换。
注:可以从宏中调用另一个宏,但宏不能调用自身
宏的定义一定要出现在引用它的程序段之前
一般Macro_name不超过20个字符
1.下面内容为在ALV Report中常用的关于CATALOG的写法
FORM INIT_FIELDCAT CHANGING PT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA : LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
L_INDEX LIKE SY-INDEX.
CLEAR :L_INDEX, PT_FIELDCAT.
* Define a macro
DEFINE CATALOG.
L_INDEX = L_INDEX + 1.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-COL_POS = L_INDEX.
LS_FIELDCAT-TABNAME = 'GT_LIST'.
LS_FIELDCAT-DDICTXT = 'M'.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-SELTEXT_M = &2.
LS_FIELDCAT-OUTPUTLEN = &3.
LS_FIELDCAT-KEY = &4.
LS_FIELDCAT-REF_TABNAME = &5.
LS_FIELDCAT-REF_FIELDNAME = &6.
LS_FIELDCAT-JUST = &7.
LS_FIELDCAT-QFIELDNAME = &8.
LS_FIELDCAT-CURRENCY = &9.
APPEND LS_FIELDCAT TO PT_FIELDCAT.
END-OF-DEFINITION.
* Use the macro
CATALOG:
'PERNR' TEXT-001 '12' '' '' '' '' '' '',
'ENAME' TEXT-002 '10' '' '' '' '' '' '',
'ZYEAR' TEXT-003 '04' '' '' '' '' '' '',
'BEGDA' TEXT-004 '10' '' '' '' '' '' '',
'ENDDA' TEXT-005 '10' '' '' '' '' '' '',
'PERIOD' TEXT-006 '21' '' '' '' '' '' '',
'ORGEH' TEXT-007 '08' '' '' '' '' '' '',
'ORGTX' TEXT-008 '20' '' '' '' '' '' '',
'RATING' TEXT-010 '10' '' '' '' '' '' '',
'RTEXT' TEXT-009 '08' '' '' '' '' '' '',
'ID' TEXT-011 '08' '' '' '' '' '' '',
'TSTEXT' TEXT-012 '15' '' '' '' '' '' ''.
ENDFORM. " INIT_FIELDCAT
2.下面内容为HR模块中常用的存贮在Macros库Trmac中的宏
RP-PROVIDE-FROM-FRST Pnnnn SPACE PN-BEGDA PN-ENDDA.
PNP-SW-FOUND = '0'
LOOP AT &1
IF &2 NE SPACE
CHECK &1-SUBTY EQ &2
ENDIF
IF &1-BEGDA LE &4 AND &1-ENDDA GE&3
PNP-SW-FOUND = '1'
EXIT
ENDIF
ENDLOOP
IF PNP-SW-FOUND EQ '0'
CLEAR &1
ENDIF
RP-PROVIDE-FROM-FRST Pnnnn SPACE PN-BEGDA PN-ENDDA.
参数:&1(Pnnnn) &2(SPACE可为常量) &3(PN-BEGDA可为常量) &4(PN-ENDDA可为常量)
功能:如果Pnnnn-BEGDA <= PN-ENDDA
Pnnnn-ENDDA >= PN-BEGDA
则PNP-SW-FOUND=1,Pnnnn会存入符合上面时间条件的内表中的第一行数据,否则Pnnnn将会被清空。