一、RFC变体
- 同步RFC:SRFC
同步RFC是最基本的RFC形式,在SRFC调用中,调用这会等待远程被调用者的处理过程。
语法形式:
CALL FUNCTION func DESTINATION dest.
- 异步RFC:ARFC
异步RFC(Asynchronous RFC,aRFC)类似于tRFC,用户在继续调用会话之前,不需要等待它们的完成。
aRFC和tRFC之间也存在几点不同的地方:
当调用者开始一个aRFC的时候,被调用的服务器必须可以接收请求。aRFC的参数不会记录在数据库中,而是直接发送给对方服务器。
aRFC允许用户与远程系统进行交互式对话。
调用程序可以从aRFC接收结果。
语法形式:
CALL FUNCTION Remotefunction STARTING NEW TASK Taskname
DESTINATION ...
EXPORTING...
TABLES ...
EXCEPTIONS...
- 事务RFC:tRFC
在使用事务RFC( transactional RFC,tRFC)的时候,被调用的函数模块在被调用系统中正好运行一次(Exactly Once)。
系统可用性:如果远程系统不可用,SAP系统会将报表RSARFCSE计划为后台作业,并将相关的事务ID作为变式,再进行处理。这个报表程序会重复地被调用,直到它成功地连接对方系统为止。
tRFC的缺点:
tRFC独立地处理所有LUW。根据激活的tRFC数量,程序有可能会显著地降低调用系统和被调用系统的性能。
此外,在应用中定义的LUW的调用顺序是不能得到保持的。因此无法保证事务会按照应用期望的顺序运行。tRFC唯一能保证的只有:所有LUW都会或早或晚地被传输。
- 队列RFC:qRFC
队列RFC(queued Remote Function Call,qRFC)是tRFC的一个扩展。它允许你将多个tRFC调用序列化为一个队列。
qRFC调用会首先被函数模块TRFC_SET_QUEUE_NAME进行序列化处理,然后这些调用被一个tRFC进行实际上的dispatch。
qRFC可以作为外向队列(由调用系统序列化)处理,或者是内向队列(由被调用系统序列化)。
- 后台RFC:bgRFC
bgRFC(Background Remote Function Call)允许被调用程序稍晚一些接收数据,而不是同步接收。接收数据的时候,需要保证数据只出现一次且无序( transactional) 、或者只出现一次且有序(queued)。
使用bgRFC进行异步调用,会有如下优势:
在同一个SAP系统内(同一个系统ID,同一个client):解耦,同时提供了并行化能力。负载会分布在该系统的可用的应用服务器上。这个bgRFC场景被看作一个内向程序。
在两个远程SAP系统间:解耦,并且由此可以实现应用或业务场景的物理细分。异步调用的结果是,调用者和被调用者的应用服务器的关键特性差异可以得到平衡。记录工作在调用系统中完成。这个场景是一个外向程序。
两个程序结合为外-内程序:该方式可以获得全部优化选项的优势。不过,如果你选择了这样做,数据会被记录两次,一次是调用者(外向处理)、一次是被调用应用( 内向程序的特殊类型)。这导致数据库、应用服务器会有额外的负担。
bgRFC使用队列组织不同的调用。当一个调用同时被放置在多个队列的时候,系统会为这些队列创建依赖。这带来了一个同步点(synchronization point),类似于锁。
如果一个调用处于依赖队列中,那么当且仅当它位于依赖队列的最上层时,它才会被处理。
对于同一个destination,不可以将bgRFC和tRFC、qRFC结合起来使用。不过,对于不同的destination,你可以定义你想使用的通讯类型。
语法形式:
CALL FUNCTION 'function_name'
IN BACKGROUND UNIT unit
EXPORTING ...
- 本地数据队列:LDQ
本地数据队列(Local Data Queue )是一种特别的RFC通信。在这种应用情况下,系统不会主动发送数据。相反,根据拉取规则,系统会把数据存储在本地,直到被外部系统调用(比如移动设备)。
LDQ可以代替先前由qRFC在不发送场景下提供的功能(qRFC No Send)。相比之下它提供了更有效率的数据模型。
参考:SAP RFC介绍
二、SM59远程连接(RFC connection)类型含义
类型I(内部连接):与当前系统连接到同一数据库的ABAP系统,需要填入hostname。这种类型的条目都是预定义的且无法修改。条目名称与事务SM51中所显示的应用服务器名相同。
类型3(ABAP连接或称R/3连接):创建时必须给出主机名和通信服务。如果需要,也可以指定登录信息。还可以选择负载平衡选项。
类型2(R/2连接):只需给出主机名,所有通信信息都已在存储在SAP网关的sideinfo表中,如果需要,也可以指定登录信息
类型T:定义通过TCP/IP并使用RFC库或SAP连接器的外部程序连接。该类型分为启动和注册两种连接模式。如果设为启动模式,必须指定要启动的主机名和程序路径名;如果设为注册模式,则需要指定一个RFC服务器程序(RFC 注册程序)。
类型L(逻辑目标):该条目不指定连接,而是参照物理目标生成。也可以参照其他逻辑目标生成。这类条目通常除包含所参照的条目中的信息外,还添加额外信息。一般情况下,所参照的条目会给出主机信息,类型L的条目本身给出登录数据。(通常工作流系统定制过程中需配置的RFC目标即为该类型的逻辑目标)
类型S:定义通过SNA或APPC启动的外部程序连接。
类型X:指定安装了特殊ABAP设备驱动程序的系统。在创建类型X条目时,必须给出ABAP设备驱动程序名。
类型M:定义通过CMC(即协议X.400)到ABAP系统中异步RFC连接。
类型H:定义ABAP系统到本地的HTTP连接
类型G:定义外部系统到本地的HTTP连接
参考:RFC类型含义