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]:向子程式中直接傳輸參數,該傳輸值在子程式中不改變。
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)]:向子程式傳輸表或參數,程式執行結果可通過該表或參數傳回給供主程式。
DATA:num TYPE I VALUE 10.
PERFORM add_value CHANGING num.
WRITE:num. "調用子程式,輸出值為20.
FORM add_value CHANGING num.
num = num + 10.
3)調用指定程式中的子程式
不同的ABAP程式中的子程式是可以共用的,通過ABAP語句PERFORM form IN PROGRAM prog能夠調用指定程式中的子程式,并執行子程式中包含的功能。
*例如一程式名: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.