RFC连接类型:
1. 类型2: R/2连接
2. 类型3: ABAP连接或R/3连接,指定主机名和通信服务
3. 类型I:内部连接,与当前系统连接到同一ABAP系统中,预定义无法修改,与SM51中所显示的应用服务器名相同
4. 类型L:逻辑目标,通常工作流系统指定过程中配置的RFC目标即为该类型的逻辑目标
5. 类型X:指定安装了特殊的ABAP设备驱动程序的系统,必须制定ABAP设备驱动程序名
6. 类型S:通过SNA或APPC启动的外部程序连接
7. 类型M:通过CMC到ABAP系统的异步RFC连接
8. 类型T:通过TCP/IP并使用RFC库或SAP连接器的外部程序连接;分为启动(指定主机名、程序路径名)和注册(RFC服务器程序)两种连接模式。
9. 类型G:定义外部系统到本地HTTP连接
10. 类型H: 定义ABAP系统到本地的HTTP连接
远程调用RFM:
1. 远程目标可以是文字或变量,其值为SAP系统中一直的远程目标系统。
2. 若远程系统是当前系统中的SAP应用服务器,也可以直接指定应用服务器名称,则SM59中的I类型目标
3. SM59定义的RFC目标是区分大小写的。DESTINATION附加项中目标变量的值必须与其完全一致
通过CALL FUNCTION语句进行远程功能调用时,可形成不同的调用模式:
1. CALL FUNCTION DESTINATION 以同步RFC方式实现RFM调用,若后面无其他附加项,则形成同步RFC调用,调用程序等待远程调用结果以继续执行
2. CALL FUNCTION STARTING NEW TASK 以异步RFC方式实现RFM调用,调用程序不等待远程调用结果继续执行,结果将在回调子程序(callback subroutine)中接收
3. CALL FUNCTION IN BACKROUND TASK 以事务性RFC方式实现RFM调用,远程功能暂不开始执行,等待COMMIT WORK 语句出现时,一次性执行一个或多个远程功能
远程功能调用时,仅允许通过值传递参数,不能进行引用传递,因为在RFC过程中,可以传递参数,并返回结果,但不能改变调用程序的上下文
对表类型参数,在本地普通功能调用中默认为引用传递,不需要创建内表的本地副本,但RFC不支持引用传递机制,将进行隐式的值传递调用,必须在RFC客户和RFC服务器之间交换整个表,只传输实际表格,如果没有指定表参数,则在被调用功能中使用空表
RFC 创建连接类型时:
1. LOAD BALANCING选择NO:指定TARGET HOST,SYSTEM NUMBER
2. LOAD BALANCING选择YES,要指定TARGET SYSTEM(SM51),MESSAGE SERVER(RZ03),GROUP(SMLG)
除去SM59定义的远程目标之外,SAP提供两个预定义目标,可以再CALL FUNCTION 语句的DESTINATION附加附件中使用:
l 目标NONE,将运行当前程序的应用服务器作为目标系统,调用过程将通过RFC接口实现,并拥有RFC上下文,应用于任意调用类型
l 目标BACK,用于被远程调用的RFM内部的CALL FUNCTION 语句中的目标制定,通过已建立的RFC连接反过来调用该模块的调用者或已载入的其他功能模块
SAP ABAP 系统间的RFC实现(通过RFM实现)
1. 远程目标可以是文字或变量,其值为SAP系统中一直的远程目标系统。
2. 若远程系统是当前系统中的SAP应用服务器,也可以直接指定应用服务器名称,则SM59中的I类型目标
3. SM59定义的RFC目标是区分大小写的。DESTINATION附加项中目标变量的值必须与其完全一致
通过CALL FUNCTION语句进行远程功能调用时,可形成不同的调用模式:
1. CALL FUNCTION DESTINATION 以同步RFC方式实现RFM调用,若后面无其他附加项,则形成同步RFC调用,调用程序等待远程调用结果以继续执行
2. CALL FUNCTION STARTING NEW TASK 以异步RFC方式实现RFM调用,调用程序不等待远程调用结果继续执行,结果将在回调子程序(callback subroutine)中接收
3. CALL FUNCTION IN BACKROUND TASK 以事务性RFC方式实现RFM调用,远程功能暂不开始执行,等待COMMIT WORK 语句出现时,一次性执行一个或多个远程功能
远程功能调用时,仅允许通过值传递参数,不能进行引用传递,因为在RFC过程中,可以传递参数,并返回结果,但不能改变调用程序的上下文
对表类型参数,在本地普通功能调用中默认为引用传递,不需要创建内表的本地副本,但RFC不支持引用传递机制,将进行隐式的值传递调用,必须在RFC客户和RFC服务器之间交换整个表,只传输实际表格,如果没有指定表参数,则在被调用功能中使用空表
RFC使用delta管理机制最小化参数和结果传递构成中的网络负载,delta的意思就是只传递已经变化的数据。
SAP程序本地正常情况调用功能模块是,模块将在调用程序的工作过程内部运行(work process),但是系统调用功能模块RFM时,系统将在独立的工作进程中运行该模块。通过RFC接口进行的所有远程功能调用都在目标系统中存在一个独立的RFC上下文,即该RFC内存滚动区roll area。
执行RFC服务器系统中的远程调用功能后,该功能模块的功能组将被加载至运行时程序上下文的会话,即功能模块的主程序(或非ABAP得RFC服务器程序)。
一旦初始化了一个功能模块,程序就将整个功能组载入至主程序的上下文,并保持至调用程序结束。
目标为非SAP系统时,该功能通过RFC库中的API实现(RfcAbort或RfcClose),或通过功能模块RFC_CONNECTION_CLOSE显示关闭RFC连接
SAP存在特定的数据库提交和回滚机制,该机制就是通过LUW(逻辑工作单元)实现的。通常情况下的功能模块和柱程序位于相同的LUM中,因此不会触发数据库提交或回滚的过程(该过程通常通过COMMIT/ROLLBACK语句显示触发)。但同步RFC和异步RFC调用中的每一个功能模块都拥有自己的LUM,即在每次远程调用时,当前程序都将进行内存区的释放,因此将触发隐式的数据库提交,之前的所有数据库更新将不能回滚,对于事务性RFC,则有管机制将多个远程调用操作绑定至同一个LUM,整体提交或回滚。
对于同步RFC和异步RFC调用,可以存在对话dialog过程,例如call screen / call transaction或列表处理等情况,RFC可以进行后台处理,但如果在后台中心处理RFC中的对话,则将导致程序中断,从而触发系统异常SYSTEM_FAILURE。
RFM调用
在进行ABAP-ABAP同步RFC和异步RFC调用时,可以进行调试以监控远程系统中RFC功能执行的情况,可以设置静态断点、单步执行、观察变量等功能,对于同步RFC,系统在当前会话中进入远程调式界面,对于异步RFC,系统将打开新会话进行远程调试。
Unicode是一种编码体系,建立在Unicode编码体系上的系统称为Unicode系统,在Unicode系统和非Unicode系统间进行RFC调用时,可能会出现与代码页(code page)转换相关的问题