第一步:初始化server group ,server group 可以用RZ12進行維護,參數直接複製即可,不要修改。
CONSTANTS: serv_group LIKE rzllitab-classname VALUE ‘JOBRUN’.
CALL FUNCTION ‘SPBT_INITIALIZE’
EXPORTING
group_name = serv_group
-
IMPORTING
-
MAX_PBT_WPS =
-
FREE_PBT_WPS =
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7
.
第二步:分別寫多個FM的調用,注意:如果多個FM都共用的參數,數據寫在主程序中,然後用參數傳到FM裏。
CALL FUNCTION ‘Z_BAPI_FM1’
STARTING NEW TASK ‘FM1TASK’ DESTINATION IN GROUP serv_group
PERFORMING sub_fm1_back ON END OF TASK
TABLES
date_ra = date_ra.
CALL FUNCTION ‘Z_BAPI_FM2’
STARTING NEW TASK ‘FM2TASK’ DESTINATION IN GROUP serv_group
PERFORMING sub_FM2_back ON END OF TASK
TABLES
date_ra = date_ra.
第三步.FM執行完之後數據反回,數據返回的參數是全局的,在Z_BAPI_FM*中對全局參數進行賦值。
FORM sub_fm1_back USING name.
RECEIVE RESULTS FROM FUNCTION ‘Z_BAPI_FM1’
TABLES
ret_par = gdt_ret_pars "返回的參數
return = gdt_gr_return.
APPEND LINES OF gdt_gr_return TO gdt_return.
gr_flag = ‘X’. "這個很重要,根據這個參數判斷FM是否執行完畢
ENDFORM. "sub_fm1_backFORM sub_fm2_back USING name.
RECEIVE RESULTS FROM FUNCTION ‘Z_BAPI_FM2’
TABLES
returnpo = gdt_ret_pos
return = gdt_returnpo_return.
APPEND LINES OF gdt_returnpo_return TO gdt_return.
returnpo_flag = ‘X’.
ENDFORM. "sub_fm2_back
第四步:收尾工作,判斷各個FM是否執行完畢
WAIT UNTIL gr_flag = ‘X’ AND returnpo_flag = ‘X’ .
ret_pars[] = gdt_ret_pars. “返回的結果
returnpo[] = gdt_ret_pos. “返回的結果
APPEND LINES OF gdt_return TO return. “最終返回的return ,一般FM都有返回值,返回錯誤,警告等信息。