SAP 高级应用开发 学习笔记 1 -- RFC NO.5

并行RFC方式的RFM调用

实际是异步RFC调用的应用之一。

异步RFC调用实现并行处理:

l        异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持SAP系统和其他系统间的并行过程)

l        在同一SAP系统内部使用异步RFC调用,将部分处理负载转移到其他的应用服务器,方法时将RFC目标指定为其他应用服务器

l        若不显示指定异步RFC调用目标,在同一应用服务器内,可以通过本地异步RFC调用实现多个工作过程的并行处理

T-CODE SM59 可将SAP系统中的应用服务器分配成不同的RFC分组,异步调用时,通过DESTINATION子句中的IN GROUP附加项指定一个已定义的RFC分组。若不显示指定RFC组,还可以使 用关键字DEFAULT,系统从全部可用的应用服务器中选择一个处理。

CALL FUNCTION rfm_name STARTING NEW TASK taskname DESTINATION IN GROUP g1 ... [EXPORTING p1 = a1 ... pn = an ... ] [TABLES t1 = itab1 ... tn = itabn ... ] [EXCEPTIONS exc1 = e1 ... [MESSAGE mess] ... excn = en ... [MESSAGE mess] ... RESOURCE_FAILURE = ... ... [OTHERS = n_others]].

该项只能在当前SAP系统作为RFC目标时使用。

并行处理的前提条件

l        逻辑独立的工作单元,并行处理并不适合需要顺序进行的数据处理。

l        ABAP要求,功能模块必须设定为远程支持,被调用的功能模块不能包含使目标BACK的远程功能调用,调用程序不能在异步调用之后生成新的内部会话(即不能call function starting new task语句后使用submit call transaction语句),不能通过call function starting new task destination in group 语句启动外部程序

l        系统中的服务器至少有3个对话工作进程,否则触发RESOURCE_FAILURE异常

例:

REPORT Z_PRFC_SAMPLE. TYPES: BEGIN OF task_type, name TYPE string, dest TYPE string, END OF task_type. DATA: snd_jobs TYPE i, rcv_jobs TYPE i, exc_flag TYPE i, info TYPE rfcsi, mess TYPE c LENGTH 80, indx TYPE c LENGTH 4, name TYPE c LENGTH 8, task_list TYPE STANDARD TABLE OF task_type, task_wa TYPE task_type. DO 10 TIMES. indx = sy-index. CONCATENATE 'Task' indx INTO name. CALL FUNCTION 'RFC_SYSTEM_INFO' STARTING NEW TASK name DESTINATION IN GROUP DEFAULT PERFORMING rfc_info ON END OF TASK EXCEPTIONS system_failure = 1 MESSAGE mess communication_failure = 2 MESSAGE mess resource_failure = 3. CASE sy-subrc. WHEN 0. snd_jobs = snd_jobs + 1. WHEN 1 OR 2. MESSAGE mess TYPE 'I'. WHEN 3. IF snd_jobs >= 1 AND exc_flag = 0. exc_flag = 1. WAIT UNTIL rcv_jobs >= snd_jobs UP TO 5 SECONDS. ENDIF. IF sy-subrc = 0. exc_flag = 0. ELSE. MESSAGE 'Resource failure' TYPE 'I'. ENDIF. WHEN OTHERS. MESSAGE 'Other error' TYPE 'I'. ENDCASE. ENDDO. WAIT UNTIL rcv_jobs >= snd_jobs. LOOP AT task_list INTO task_wa. WRITE: / task_wa-name, task_wa-dest. ENDLOOP. *&---------------------------------------------------------------------* *& Form rfc_info *&---------------------------------------------------------------------* FORM rfc_info USING name. task_wa-name = name. rcv_jobs = rcv_jobs + 1. RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO' IMPORTING rfcsi_export = info EXCEPTIONS system_failure = 1 message mess communication_failure = 2 message mess. IF sy-subrc = 0. task_wa-dest = info-rfcdest. ELSE. task_wa-dest = mess. ENDIF. APPEND task_wa TO task_list. ENDFORM. "rfc_info

 

WAIT UNTILL LOG_EXP UP TO N SECONDS.程序中断时间最长是N

你可能感兴趣的:(SAP 高级应用开发 学习笔记 1 -- RFC NO.5)