开发基础 报表教程 数据字典 对话编程 表单打印 增强出口 SAP接口 S/4 HANA
实战案例 实战笔记 资料下载 CRM
问答互助 会员分享 俱乐部 广告区
论坛指南、建议和投诉
Twilight发表于 2015-04-15 20:20Twilight 最后回复于 2015-04-15 20:20 [复制链接] 11087 0
使用道具 举报
Twilight
管理员
发表回复 回帖后跳转到最后一页
SM59定义远程rfc连接
目的地SPACE、NONE 和BACK下列预定义的标准目的地具有不同的意义:
不能从R/2 系统中使用这些标准目的地。目的地BACK 不能用于R/3 到R/2 的连接。
1、同步RFC(Synchronous RFC)
要求连接的双方是同步的工作方式,即都是在可用状态才能够实现成功调用。能实时返回结果值。
可以使用命令CALL FUNCTION ... DESTINATION. 调用远程的ABAP 函数模块或者甚至是外部服务器程序的C 子程序。
当以这种方式调用一个函数时,总是应该包括对标准异常COMMUNICATION_FAILURE 和SYSTEM_FAILURE 的处理。
异常COMMUNICATION_FAILURE 被触发的情况包括:没有在调用端的信息表RFCDES 中维护指定的目的地,或者无法建立对远程系统的连接。
异常SYSTEM_FAILURE 在想要在远程系统上开始的函数模块或者C 子程序不存在时被触发
在调用程序的上下文保持活动时,对远程目的地的连接也会保持完整。调用程序本身保持活动时,在远程 目的地中调用的函数组也保持活动(这跟本地调用是 一样的)。这意味着,如果先后调用了来自同一个函 数组的两个函数模块,它们可以访问这个函数组相同 的全局数据。
– 使用同步RFC 形式调用的每个函数模块都具有 自己的工作逻辑 单元(LUW)
2、异步RFC(Asynchronous RFC)
不是一种固定写法,它包含多种实现方式:
其中Trfc、Qrfc等是IN BACKGROUND TASK异步方式的扩展
Prfc是STARTING NEW TASK异步方式的扩展
aRFC可以实现异步的RFC调用方式,它可以进行多个并发调用,相对同步sRFC,它的效率更高。
使用STARTING NEW TASK <task name> 附加关键字,可以异步的调用一个远程函数模块。任务名称可以任意选择。
– 被调用的函数模块在它自己的工作进程中执行。
– 还可以在后台进程中使用aRFC,然而需要注意, 在这种情况下RFC 调用也在各自的工作进程中执行。
– 在信息表RFCDES 端,可以用aRFC 选项来为每个目的地设置aRFC 调用的数量。在这些aRFC 调用之后,目标服务器会执行自动的负载检查。如果检测到 资源瓶颈,系统会等待一会儿,让相同的远程服务器 平衡下一个aRFC 调用,然后客户端程序才移出它的工作进程。客户端程序可以从以前的aRFC 调用接收到结果。
2.1、带确认的aRFC
这个子程序不能包含任何可能中断当前程序执行的语句(例如:CALL SCREEN、SUBMIT、COMMIT WORK、WAIT、RFC、W 或I 类型的消息)。这个子程序为aRFC 特别定义的WRITE 语句则没有影响。
– 只有在调用程序处于移出状态时——即使用了WAIT UNTIL 语句——子程序才能被自动执行。
– RECEIVE 语句的KEEPING TASK 附加关键字造成被远程加载的函数组上下文等待,直到调用程序结束。 这让你以后可以在相同的任务名称下的后续aRFC 中使用旧的远程上下文。
2.2、并行RFC( Parallel RFC )
它是aRFC的一种扩展类型。在执行大量的aRFC时,它改善了系统的性能,但是它只能执行在同一个系统和同一个client里。
当把一个应用服务器指定到某个RFC 组中,可以指定在什么样的条件下,这个应用服务器可以被认为是“在R/3 系统中对aRFC 可用”。如果对于这个aRFC 无法获取属于指定RFC 组的应用服务器,系统就会触发异常RESOURCE_FAILURE。
注意DESTINATION IN GROUP 附加关键字它与DESTINATION 附加关键字很不一样。
必须在STARTING NEW TASK 之后指定。
只能在同一个R/3 系统中使用,不能与DESTINATION 一起使用。
RZ12查看RFC group
2.3、事务RFC(Transactional RFC)
是对aRFC进行相关技术改进后的一个RFC版本,其于aRFC相同点是
实现异步调用,其优点是可以将多个调用进行LUW分组处理, 并只
执行一次运行。现在aRFC基本上已经停用。
ABAP语法关键字:IN BACKGROUND TASK
用IN BACKGROUND TASK 附加关键字来使用tRFC,必须放在DESTINATION 条目之前。如果指定了COMMIT WORK 语句,就可以把所有以前传输的tRFC 捆绑到一个LUW 中。
tRFC 也是异步调用的,跟aRFC 不同,来自被调用函数模块的输出无法被接收当调用时没有IMPORTING .../ PERFORMING ... ON END OF TASK。
没有RECEIVE RESULTS FROM FUNCTION ..
在源系统,可以使用管理事务码SM58 来显示和修改tRFC 工作逻辑单元。
IN background task START_OF_BACKGROUNDTASK
如果程序在目的地系统的tRFC LUW 成功执行后,被A 或X 类型的消息中止,或者触发了异常,就会发生下列情况:所有在远程系统的当前LUW 中被执行的修改都被回滚。
这些修改记录在源系统的tRFC 状态表ARFCSSTATE 中(可以用SM58 查看)。
2.4、队列RFC(queued RFC)
SMQ1 可以有下列功能:
- 列出队列
- 显示队列中相关LUW 的列表和包含输入数据的函数模块
- 开始或停止队列的传输
- 删除队列
QRFC相关的T-code: SM58-->SMQS-->SMQ1-->SMQR-->SMQ2二、特点比较