文章转自 http://www.sunchis.com/html/sap/2010/0504/153.html
RFC(Remote Function Call,远程功能调用)是SAP系统之间以及SAP与外部系统之间程序通信的基本接口技术,诸多其他更高层的SAP接口和通信技术,如BAPI、ALE等,都是基于RFC实现的。在SAP中,可以提供给其他系统进行远程调用的程序模块是支持RFC的功能模块,即RFM(remote-enabled function module,支持远程调用的功能模块)。
RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是SAP ABAP系统。这种远程功能调用也可在同一系统内部进行(如本地SAP系统内的远程调用);但通常情况下,调用程序和被调用程序处于不同系统。
SAP所提供的外部接口包括程序通信接口(communication interface)、文件I/O接口(file I/O interface)以及数据接口(data interface)。数据接口用于在系统内部对程序运行时数据和数据库数据进行传递,其实现技术包括批输入(batch input)、SAP SQL等。程序通信接口和文件I/O接口则是与其他系统进行数据交换的通路。文件I/O实现文件中数据和运行时数据间的交换(即将数据从文件上载到程序中,或将运行时数据下载至文件中)。RFC位于程序通信接口中,以实现外部程序对SAP系统内部数据的访问。RFC在SAP系统架构中的位置如下:
RFC是基于CPI-C实现的。CPI-C是比RFC更底层的数据交换接口,它基于TCP/IP或LU6.2协议,其使用比RFC更为复杂,一般情况下不会直接使用。RFC接口实现在实现逻辑上位于CPI-C的上层,所有和RFC相关的调用都将转换为CPI-C的调用完成,作为程序设计开发人员,不必去了解CPI-C的实现细节。
1. RFC调用过程
在系统间通信的过程中,需区分发送系统和接受系统。RFC调用请求从发送系统(调用系统)中传至接受系统(被调用系统,也称远程系统或目标系统),如下图所示,其中发送请求的系统在通信过程中又称为RFC客户端,通信的另一方则称为RFC服务器。RFC客户端发起远程功能调用以执行RFC服务器提供的功能。
其中,调用系统和被调用系统均可以使SAP系统或非SAP系统,此外还可以在SAP系统内部将特定应用服务器指定为目标系统。
2. RFC通信的情况
根据通信方向和系统类型,公用以下三种RFC通信:
在SAP系统之间,两个ABAP程序通过RFC接口进行通信,如下图中的“调用①”,SAP系统A调用SAP系统B中的功能模块。B中被调用的SAP功能模块必须支持远程调用(remote-enabled),这样的SAP功能模块称为RFM。
SAP系统和外部(非ABAP)系统进行的RFC通信,则为ABAP程序和其他语言(如C、C++、Visual Basic、Java或.NET等)编写的程序的相互调用。如上图中的“调用②”,SAP系统A的程序调用非SAP系统C的C语言例程(远程功能);又如“调用③”,非SAP系统D中例程调用SAP系统B中的RFM,这些都是SAP与外部系统通信的RFC同学。
在与其他语言的程序进行通信时,SAP将为各种语言及相关的操作系统提供RFC库(其中包含RFC API)及SAP连接器,以实现RFC接口,如:
上述每一种RFC库或SAP连接器均有多种操作系统平台的版本,适用于MS Windows、Unix(RS/6000、SUN Solaris、HP-UX)、Linux、z/OS(OS/390)以及OS400等系统。
对于SAP系统中的RFC调用者而言,远程功能是SAP系统或外部程序提供的,无论从语法上还是功能上说,都是毫无差异的。
3. RFC接口系统
SAP远程调用功能的能力是通过RFC接口系统(RFC interface system)实现的。根据调用方向的不同(SAP系统调用其他模块或其他系统调用SAP模块),RFC接口提供以下两种服务:
(1)ABAP程序的调用接口
任何ABAP程序都能使用CALL FUNCTION ... DESTINATION语句调用远程功能。DESTINATION参数告诉SAP系统被调用的功能将在调用者之外的系统上运行,通过RFC接口与远程系统进行通信。如果远程功能来自SAP ABAP系统,则必须是实际的功能模块,并在功能库中注册为“支持远程调用”,通信双方都通过ABAP的RFC接口实现。
(2)非SAP ABAP程序的调用接口
在RFC的实现过程中,如果调用或被调用一方是非ABAP程序,则非ABAP程序必须以特定规格进行编程,以确保它可作为RFC通信中的伙伴。SAP系统为外部程序提供RFC支持接口(RFC-supported interface)和GUI支持接口(GUI-supported interface)。这样,在非SAP系统中,外部程序就能调用并执行SAP RFM;反过来,SAP中的ABAP程序又能通过该支持接口使用外部程序提供的功能。
调用时,RFC接口的具体功能包括:
RFC接口对ABAP程序员并不可见。对远程程序的“调用”处理集中在CALL FUNCTION语句。这样,就保证了ABAP程序员免受编写自己的通信例程之劳。