SAP 高级应用开发 学习笔记 1 -- RFC NO.5
2009-11-12 13:52
393 查看
并行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,系统从全部可用的应用服务器中选择一个处理。
该项只能在当前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异常
例:
WAIT UNTILL LOG_EXP UP TO N SECONDS.程序中断时间最长是N秒
实际是异步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.6
- SAP 高级应用开发 学习笔记 1 -- RFC
- SAP 高级应用开发 学习笔记
- SAP 高级应用开发 学习笔记 1 -- RFC NO.7
- SAP 高级应用开发 学习笔记 1 -- RFC NO.4
- SAP 高级应用开发 学习笔记 2 -- BAPI
- SAP 高级应用开发 学习笔记 1 -- RFC NO.2
- SAP 高级应用开发 学习笔记 1 -- RFC NO.3
- SAP 高级应用开发 学习笔记 2 -- BAPI
- Android高级应用开发(基础篇) - stage2 - 学习笔记
- Android高级应用开发(深入篇) stage3(下)- 高级商用界面开发 学习笔记
- Android高级应用开发(基础篇) - stage4 - 学习笔记
- Android高级应用开发(基础篇) - stage6 - 学习笔记(下)
- Android高级应用开发(基础篇) - stage1 - 学习笔记
- iPhone/iPad高级应用与手游开发学习笔记:多点触摸与手势检测(三:UIPinchGestureRecognizer和UIRotationGestureRecognizer)
- Android高级应用开发(基础篇) - stage10 - 学习笔记
- Android高级应用开发(基础篇) - stage9 - 学习笔记
- Android高级应用开发(基础篇) - stage5 - 学习笔记
- iPhone/iPad高级应用与手游开发学习笔记:AVAudioPlayer学习(音频播放demo)
- iPhone/iPad高级应用与手游开发学习笔记:sqlite3学习(简单英文生词本demo)