二维码

[RFC] ABAP多线程调用prfc一般步骤

Twilight发表于 2015-04-22 16:56Twilight 最后回复于 2015-04-22 16:56 [复制链接] 5769 0

第一步:初始化server group ,server group 可以用RZ12进行维护,参数支直复制即可,不要修改。
  1. CONSTANTS: serv_group LIKE rzllitab-classname VALUE 'JOBRUN'.
  2. CALL FUNCTION 'SPBT_INITIALIZE'
  3.   EXPORTING
  4.     group_name                     = serv_group
  5. * importing
  6. *   max_pbt_wps                    =
  7. *   free_pbt_wps                   =
  8.   EXCEPTIONS
  9.     invalid_group_name             = 1
  10.     internal_error                 = 2
  11.     pbt_env_already_initialized    = 3
  12.     currently_no_resources_avail   = 4
  13.     no_pbt_resources_found         = 5
  14.     cant_init_different_pbt_groups = 6
  15.     OTHERS                         = 7.
复制代码

第二步:分别写多个FM的调用,注意:如果多个FM都共用的参数,数据写在主程序中,然后用参数传到FM里。
  1. CALL FUNCTION 'Z_BAPI_FM1'
  2.   STARTING NEW TASK 'FM1TASK' DESTINATION IN GROUP serv_group
  3.   PERFORMING sub_fm1_back ON END OF TASK
  4.   TABLES
  5.     date_ra = date_ra.
  6. CALL FUNCTION 'Z_BAPI_FM2'
  7.   STARTING NEW TASK 'FM2TASK' DESTINATION IN GROUP serv_group
  8.   PERFORMING sub_fm2_back ON END OF TASK
  9.   TABLES
  10.     date_ra = date_ra.
复制代码

注意:Z_BAPI_FM1是RFC类型
第三步.FM执行完之后数据反回,数据返回的参数是全局的,在Z_BAPI_FM*中对全局参数进行赋值。
  1. FORM sub_fm1_back USING  name.
  2.   RECEIVE RESULTS FROM FUNCTION 'Z_BAPI_FM1'
  3.   TABLES
  4.   ret_par  = gdt_ret_pars "返回的参数
  5.   return    = gdt_gr_return.
  6.   APPEND LINES OF gdt_gr_return TO gdt_return.
  7.   gr_flag = 'X'. "这个很重要,根据这个参数判断FM是否执行完毕
  8. ENDFORM.                    "sub_fm1_back
  9. FORM sub_fm2_back USING  name.
  10.   RECEIVE RESULTS FROM FUNCTION 'Z_BAPI_FM2'
  11.   TABLES
  12.   returnpo  = gdt_ret_pos
  13.   return          = gdt_returnpo_return.
  14.   APPEND LINES OF gdt_returnpo_return TO gdt_return.
  15.   returnpo_flag = 'X'.
  16. ENDFORM.                    "sub_fm2_back
复制代码

第四步:收尾工作,判断各个FM是否执行完毕
  1. WAIT UNTIL gr_flag = 'X' AND returnpo_flag = 'X' .
  2. ret_pars[] = gdt_ret_pars. "返回的结果
  3. returnpo[] = gdt_ret_pos.        "返回的结果
  4. APPEND LINES OF gdt_return TO return. "最终返回的return ,一般fm都有返回值,返回错误,警告等信息。
复制代码


深化阅读:abap异步并行RFC多线程实战案例
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表