20.1. Function調用
20.1.1. 更新FM:LUW
CALL FUNCTION update_function IN UPDATE TASK,直到Commit Work 才運行
主要用於本地更新(非遠程RFC調用,如果是遠程調用,則采用事務性RFC調用方式:IN BACKGROUND TASK)
20.1.2. RFC函數:遠程調用
20.1.2.1. 同步
CALL FUNCTION func [DESTINATION dest] [?desti?nei??n]
(在DESTINATION不省略的情況下,且dest取值又不為SPACE,則函數一定要是RFC函數才能采用此方式進行遠程同步調用)
20.1.2.2. 異步
CALL FUNCTION rfm_name STARTING NEW TASK [DESTINATION dest]taskname PERFORMING return_form ON END OF TASK
FORM return_form USING taskname.
...
RECEIVE RESULTS FROM FUNCTION rfm_name
...
ENDFORM.
等待多個異步調用的返回結果:WAIT UNTIL log_exp [UP TO sec SECONDS].
異步調用時不能有IMPORTING參數;函數一定要是RFC函數才能采用異步調用;只要有STARTING NEW TASK選項,即為異步調用;如果是異步調用同一目標端的RFC函數,則可以省略DESTINATION
20.1.2.2.1. 事務性RFC調用
實質上事務RFC調用也屬於異步調用
CALL FUNCTION func IN BACKGROUND TASK [DESTINATION dest],並不立即執行,直到主調程序中的COMMIT WORK語句(隱式提交不要,一定要使用COMMIT WORK顯示提交)才一次性執行多個遠程函數調用
(函數一定要為RFC函數,且要通過Commit Work語句顯示提交后,才會去執行,否則不會執行;如果是同一目標端的RFC函數,則可以省略DESTINATION)
20.1.2.3. DESTINATION 取值
l 目標NONE:當前程序所在應用服務器作為目標系統,但調用過程還是RFC遠程方式來調用,這與SPACE是同的
l 目標SPACE: DESTINATION選項將會被忽略,被調功能函數將作為普通函數在本機調用
l 目標BACK:用於被遠程調用的RFM程序內部的CALL FUNCTION語句中的目標指定,通過已建立的RFC連接反過來調用該函數的主調者系統中的其他功能模塊(即主調程序—>遠程系統中的RFM—>又回調主調程序所在系統中的其他函數)