ABAP子程序(Subrouting)是包含在程序中的一段具有一定功能的代碼,能夠將某個功能作為一個小程序包含在主程序中,以方便程序分析及閱讀。特別是一此程序中多次用到的功能,可以簡化代碼,增加程序的可讀性且便於維護。
1.子程序的定義
通過FORM...ENDFORM語名可以實現子程序的定義,通過PERFORM語句來實現子程序的調用。
[For Example]
PERFORM welcome. "調用子程序
FORM welcome. "定義子程序
WRITE / 'subrouting'.
ENDFORM.
2.子程序接口參數的定義及使用
子程序實現了將某段功能的封裝處理,那么子程序怎樣實現與ABAP程序中其它變量的數值的交換呢?可以通過定義子程序接口來實現,該方法共包括3種模式。
1)FORM TABLES itab2...itabn:以表的方式傳輸數據。
[For Example]
DATA:BEGIN OF staff OCCURS 0,
name(10) TYPE C,
END OF staff.
staff-name = 'jack'.
APPEND staff. "對內表賦值
PERFORM u TABLES staff. "輸出jack.
FORM u TABLES x STRUCTURE staff.
WRITE:/ x-name.
ENDFORM
2)FORM TABLES USING [VALUE(p1)...pn]:向子程序中直接傳輸參數,該傳輸值在子程序中不改變。
[For Example]
DATA:str1(10) TYPE C,
str2(10) TYPE C.
str1 = 'Hello'.
str2 = 'SAP'.
PERFORM CON_STR USING str1 str2.
FORM CON_STR USING s1 s2.
DATA:str_all(20) TYPE C.
CONCATENATE s1 s2 INTO str_all.
WRITE:/ str_all.
ENDFORM.
3)FORM CHANGING [value(p1...pn)]:向子程序傳輸表或參數,程序執行結果可通過該表或參數返回給供主程序。
[For Example]
DATA:num TYPE I VALUE 10.
PERFORM add_value CHANGING num.
WRITE:num. "調用子程序,輸出值為20.
FORM add_value CHANGING num.
num = num + 10.
ENDFORM.
3)調用指定程序中的子程序
不同的ABAP程序中的子程序是可以共用的,通過ABAP語句PERFORM form IN PROGRAM prog能夠調用指定程序中的子程序,並執行子程序中包含的功能。
[For Example]
*例如一程序名:ZTEST,它包含一個子程序ADD_VALUE與上例結構一致
DATA:num2 TYPE I VALUE 10.
PERFORM ADD_VALUE CHANGING num2 IN PROGRAM ZTEST.
WRITE:num2."調用子程序加10,輸出值為20.
4)通過TCode調用指定程序中的子程序
在SAP業務中,通常會將程序與TCode綁定以方便記憶。同樣,在ABAP中可以通過語句CALL來實現對某TCode中相對應的子程序的調用,相關語法請參考以下代碼:CALL TRANSACTION TCode。
[For Example]
CALL TRANSACTION 'ICON' and skip first screen. "調用TCODE:ICON並展開初始界面。
5)使用SUBMIT方法調用另一個程序
在ABAP中可以直接調用具體程序來實現該程序的所有功能。使用語句SUBMIT可以直接通過程序名來調用該程序,並提供程序執行中所需要輸入的字段及參數,其語法及屬性如下:
[Syntax]
SUBMIT <程序名>.
...USING SELECTION-SCREEN <SCR>. "調用子屏幕
...IVA SELECTION-SCREEN. "顯示所調用程序的初始屏幕
...AND RETURN. "調用指定程序執行后可返回上一屏幕
調用某一程序語法如:
SUBMIT ZTEST.
VIA SELECTION-SCREEN
USING SELECTION-SCREEN 1000
AND RETURN.