二维码

[RFC] SAP RFC基础知识

Twilight发表于 2014-03-01 22:55FISH_HAPPY 最后回复于 2017-10-26 13:36 [复制链接] 6367 1

        RFC(Remote Function Call,远程功能调用)是SAP系统之间以及SAP与外部系统之间程序通信的基本接口技术,诸多其他更高层的SAP接口和通信技术,如BAPI、ALE等,都是基于RFC实现的。SAP中,可以提供给其他系统进行远程调用的程序模块是支持RFC的功能模块,即RFM(remote-nabled function module,支持远程调用的功能模块)。
1、RFC概述
        RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是SAP ABAP系统。这种远程功能调用也可在同一系统内部进行(如本地SAP系统内的远程调用):但通常情况下,调用程序和被调用程序处于不同系统。
2、 RFC基础知识
        SAP所提供的外部接口包括程序通信接口(communication interface)、文件I/O接口(file I/O interface)以及数据接口(data interface)。数据接口用于在系统内部对程序运行时数据和数据库数据进行传递,其实现技术包括批输入( batch  input)、SAP SQL等。程序通信接口和文件I/O接口则是与其他系统进行数据交换的通路。文件I/O实现文件中数据和运行时数据间的交换(即将数据从文件上载到程序中,或将运行时数据。下载至文件)。RFC位于程序通信接口中,以实现外部程序对SAP系统内部数据的访问。RFC在SAP系统架构中的位置如图1-1所示。
        RFC是基于CPI-C实现的。CPI-C是比RFC更底层的数据交换接口,它基于TCP/IP或LU6.2协议,其使用比RFC更为复杂,一般情况不直接使用。RFC接口在实现逻辑上位-CPI-C的上层,所-RFC相关的调用都将转换为CPI-C的调用完成,但作为程序设计人员则不必了解CPI-C的实现细节。
RFC接口在SAP系统架构中的位置.jpg
        图I-I RFC接口在SAP系统架构中的位置

3、RFC调用过程
        在系统间通信过程中,需区分发送系统和接收系统。RFC调用请求从发送系统(调用系统)中传至接收系统(被调用系统,也称远程系统或目标系统),如图1-2所示,其中发送请求的系统在通信过程中又称为RFC客户端,通信另一方则称为RFC服务器。RFC客户端发起远程功能调用以执行RFC服务器提供的功能。
RFC客户端与RFC服务器及调用过程.jpg
        图1-2 RFC客户端与RFC服务器及调用过程
其中,调用系统和被调用系统均可以是SAP系统或非SAP系统,此外还可以在SAP系统内部将特定应用服务器指定为目标系统。
4、RFC通信的情况
    根据通信方向和系统类型,共有如下3种RFC通信:
  • 两个独立的SAP系统之间通信:
  • SAP系统作为调用系统,与外部远程系统(非SAP ABAP系统)通信;
  • 外部系统作为调用系统,与SAP系统通信。

        在SAP系统之间,两个ABAP程序通过RFC接口进行通信,如图1-3中所示的调用l,SAP系统A调用SAP系统B中的功能模块。B中被调用的SAP功能模块必须支持远程调用(remote-enabled).这样的SAP功能模块称为RFM。
RFC通信(调用)类型.jpg
图1-3 RFC通信(调用)类型
        SAP系统和外部(非ABAP)系统进行的RFC通信,则为ABAP程序和其他语言(如C、C++、Visual Basic、Java或.NET等)编写的程序的相互调用。如图1-3中的调用2,SAP系统A的程序调用非SAP系统C的C语言例程(远程功能);义如调用3,非SAP系统D中例程调用SAP系统B中的RFM,这些都是SAP与外部系统的RFC通信。
        在与其他语言的程序进行通信时,SAP将为各种语言及相关的操作系统提供RFC库(其中包含RFC API)及SAP连接器,以实现RFC接口,如:
  • 为C和C++提供的RFC SDK(RFC Software Development Kit):
  • 为Java提供的Java连接器(JCo):
  • 为.NET(C#、VB.NET等)提供的.NET连接器(NCo)等。

        上述每一种RFC库或SAP连接器均有多种操作平台相关版本,适用于MS Windows、Unix(RS/6000、SUN Solaris、HP-UX)、Linux、z/OS (OS/390)以及OS400等系统。
        对于SAP系统中的RFC调用者而言,远程功能是SAP系统(图1-3调用1)或外部程序(图1-3调用2)提供的,无论从语法还是功能上来说,都是毫无差异的。
5、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  intcrface)。这样,在非SAP系统中,外部程序就能调用并执行SAP RFM:反过来,SAP中的ABAP,程序又能通过该支持接口使用外部程序提供的功能。
    调用时,RFC接口的具体功能包括:
  • 登录并退出远程系统(支持自动登录,用户名及密码将作为远程目标设定的一部分保存在表RFCDES中),并进行权限检查。
  • 调用并管理远程系统会话所需的通信例程。
  • 自动将实参转换成远程系统所需的格式,或反之。其中可能包含平台相关转换(如代码页转换)。RFC接口支持所有ABAP数据类型。
  • 处理通信过程中的错误,如果需要,则通知调用者。
  • RFC接口系统还负责远程调试的实现。
  • RFC接口对ABAP程序员并不可见。对远程程序的“调用”处理集中在CALL FUNCTION语句。这样,就保证了ABAP程序员免受编写自己的通信例程之劳。
回复

使用道具 举报

FISH_HAPPY
谢谢分享
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表