子程序从FORM语句开始执行直到遇END FORM结束,使用子程序的主要目的在于代码模块化、结构化及重复利用。
PERFORM
FORM.
~~~~
ENDFORM.
PERFORM WRITE_DATA.
FORM WRITE_DATA.
WRITE:/ 'WRITE_DATA'.
ENDFORM.
参数是指调用子程序时用于传入、传出的值。子程序中的参数与一般用DATA语句定义的局部
变量相同。调用子程序时使用的参数叫实参,在子程序中使用的参数叫虚参。PERFORM利
用USING、CHAING定义参数,且使用时要与子程序的顺序一致。参数可以使用ABAP的所有
对象,即基本数据类型、Field Symbol、内表等。
下列语句给出了子程序中可以使用的多种选项
FORM subr USING p1 TYPE type
VALUE(p2) TYPE type
...
CHANGING p3 TYPE type
VALUE(p4) TYPE type
子程序用Using和Changing语句传递参数,其方法共分为三种。
Call by Value 是指使用USING关键字传递参数时与VALUE语句一起搭配使用的情况。
FORM subr USING ..VALUE(pi)[TYPE <t>|LIKE <f>].
VALUE语句中虚参占用自己的单独内存。调用子程序时,实参值复制到虚参中,即使改变虚参的值也不会影响实参值。
Call by Reference是指使用CHANGING关键字传递参数时的情况,此时会修改传递到子程序的参数值。
FORM subr USING ... pi[TYPE <t>| LIKE <f>]...
FORM subr CHANGING ...pi[TYPE <t>|LIKE <f>]...
子程序的虚参没有自己的内存空间。只是在调用子程序期间占用实参的地址。即在调用Subroutine的程序的内存地址(相同名字的变量)中进行工作。 若在FORM语句中不使用VALUE语句,则USING与CHANGING语句功能是相同的,但出于代码可读性区分为“使用”、“变更”。USING代表传递数据,CHAING代表传递数据后变更其值。为了避免发生实参值在调用子程序后不被修改的情况,当使用USING时要与VALUE语句一起搭配使用。
介绍使用CHANGING语句传递参数时与VALUE语句搭配使用的情况
FORM subr CHANGING... VALUE(pi) [TYPE <t> | LIKE <f>].
USING语句与VALUE语句一起搭配使用,则无法修改子程序的实参值,但是CHANGING语句与VALUE语句一起配套使用时,当正常结束子程序时会修改实参值。
TYPES:BEGIN OF t_str,
col1 type c,
col2 type i ,
END OF t-str.
TYPES:t_itab TYPE TABLE OF t_str.
DATA:gt_itab TYPE t_itab.
PERFORM test_itab TABLES gs_itab.
FORM test_itab TABLES pt_itab TYPE t_itab.
ENDFORM.
调用子程序的方法有Internal、External两种。通过PERFORM语句不仅能调用ABAP程序内部子程序,还可以调用其他程序的子程序。调用外部程序子程序的情况,称之为External Call,子程序名字后面要明确指定该子程序所属程序名(用括号)。可以根据条件动态地显示子程序的 名称。
PERFORM subr.
PERFORM subr(prog) [IF FOUND].