RFC : SAP Hlep Portal 链接

什么是 RFC

RFC(Remote Function Call) 是 SAP 系统和其他(SAP 或非 SAP)系统间的一个重要而常用的双向接口技术,也被视为 SAP 与外部通信的基本协议。

简单地说,RFC 过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是 SAP ABAP 系统。这种远程功能调用也可在同一系统内部进行(如本地 SAP 系统内的远程调用);但通常情况下,调用程序和被调用程序处于不同系统。

RFC 调用过程

在系统间通信过程中,需区分发送系统和接受系统。RFC 调用请求从发送系统(调用系统)中传至接收系统(被调用系统,也称远程系统或目标系统),发送请求的系统在通信过程中又称为 RFC 客户端,通信另一方则称为 RFC 服务器。RFC 客户端发起远程功能调用以执行 RFC 服务器提供的功能。

其中,调用系统和被调用系统均可以是 SAP 系统和非 SAP 系统,此外还可以在 SAP 系统内部将特定应用服务器指定为目标系统。

RFC 通信的情况

SAP 使用 CPIC(通信通用编程接口)协议在系统之间传输数据。它是 SAP 特定的协议。远程函数调用(RFC)是基于 CPI-C 的通信接口,但功能更多,应用程序员更容易使用。

根据通信方向和系统类型,共有如下三种 RFC 通信:

  • 两个独立的 SAP 系统之间的通信

  • SAP 系统作为调用系统,与外部远程系统(非 SAP ABAP 系统)通信

  • 外部系统作为调用系统,与 SAP 系统通信

RFC 接口系统

SAP 调用远程功能的能力是通过 RFC 接口系统 (RFC interface system) 实现的。根据调用方向的不同(SAP 系统调用其他模块或其他系统调用 SAP 模块),RFC 接口提供以下两种服务。

  • ABAP程序的调用接口

  • 非SAP ABAP程序的调用接口

RFC 通信模式

RFC有同步通信(Synchronous RFC)和异步通信(Asynchronous RFC)两种方式。

同步通信

同步通信使用单个函数调用,时间上允许误差较小。问题是如果目标系统不可用,源系统资源会等到目标系统可用。 这可能会导致源系统的进程在目标系统上进入睡眠/RFC/CPIC 模式,从而阻塞这些资源。

  • 用于 SAP Web Application Server 与 SAP GUI 之间的通信

sRFC

同步调用的优缺点

  • 优点:可以及时将数据返还给发送系统,数据对于通信是一致且可靠的

  • 缺点:系统对话时必须保证两个系统处于活动状态,否则对话出现中断,影响业务应用的处理

异步通信

异步通信时间上允许一定的误差,从发送方系统分派功能调用时,接收系统不一定必须可用。接收系统可以在以后接收和处理该调用。如果接收系统不可用,则函数调用将保留在发送系统的出站队列中,从该位置开始定期进行重复调用,直到可以被接收系统处理为止。用户在继续调用会话之前,不需要等待它们的完成。

  • 用于并行处理

异步通信特点:

  • 调用后,函数控制立即返回到调用程序

  • 异步RFC的参数未记录到数据库,而是直接发送到服务器

  • 异步RFC允许用户与远程系统进行交互式对话

  • 当调用者启动aRFC时,被调用服务器必须可用于接受请求

  • 调用程序可以从异步RFC接收结果

aRFC

异步调用的优缺点

  • 优点:不需要接收系统随时可用,如系统升级、维护等不影响请求发送系统的业务处理

  • 缺点:不适用于要求及时响应的处理过程,通信不可靠,因为如果目标系统不可用,数据可能会丢失

RFC调用方式

DESTINATION:该参数告诉 SAP 系统被调用的函数在调用者以外的系统中运行。Destination 目的地通过事务 SM59 定义并存储在表 RFCDES。

调用同步RFC

CALL FUNCTION func [DESTINATION dest]
  EXPORTING
    F1 = a1
  IMPORTING
    F2 = a2
  CHANGING
    F3 = a3
  TABLES
    T1 = ITAB
  EXCEPTIONS. 

调用异步RFC

CALL FUNCTION 'RFC_SYSTEM_INFO' 
     STARTING NEW TASK 'AAAAAA'
     DESTINATION 'NONE'
     PERFORMING return_info ON END OF TASK  "接收异步调用结果"
  EXPORTING...
  TABLES
    E_RETURN = L_IT_RETURN[]
  EXCEPTIONS
    COMMUNICATION_FAILURE = 1 MESSAGE MSG
    SYSTEM_FAILURE        = 2 MESSAGE MSG.
IF SY-SUBRC = 0.
  WRITE: 'Wait for response'.
  WAIT UNTIL SEMAPHORE = 'X'.
ELSE.
  WRITE MSG.
  MESSAGE 'Synchronize Failed' TYPE 'A'.
ENDIF. 

从异步调用的函数接收结果,可以使用以下语法:

FORM RETURN_FLIGHT USING TASKNAME.
  RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO'
    IMPORTING 
      RFCSI_EXPORT = AAA
    TABLES 
      E_RETURN  = GV_IT_RETURN[]
    EXCEPTIONS 
      COMMUNICATION_FAILURE = 1
      SYSTEM_FAILURE        = 2
    MESSAGE 
       SYSTEM_MSG
    [KEEPING TASK].
  SEMAPHORE = 'X'.
  "Refresh Screen"
  SET USER-COMMAND 'OKCD'.
ENDFORM. 

添加 KEEPING TASK 可以阻止连接在接收处理结果后关闭。仅当您想将当前的远程上下文重新用于后续的异步调用时,才应使用附加的KEEPING TASK。保持远程上下文会增加存储负载,并由于系统中额外的滚动区域管理而降低性能。

WAIT UNTIL 使用

  • WAIT UNTIL log_exp [UP TO sec SECONDS].

只要逻辑表达式log_exp的结果为false,它就会中断程序的执行。可以为log_exp指定任何逻辑表达式。如果log_exp的结果为false,则程序将等待直到执行了先前异步调用的函数的回调例程,然后再次检查逻辑表达式。如果逻辑表达式的结果为true,或者已经执行了先前异步调用的所有函数的回调例程,则程序将继续执行WAIT之后的语句。

RFC 版本包含的五种版本

1、同步 RFC(sRFC, synchronous RFC)是 RFC 的第一个版本,它要求连接的双方是同步的工作方式,即都是在可用状态才能够实现成功调用。

2、异步 RFC(aRFC,asynchronous RFC)这种 RFC 可以实现异步的 RFC 调用方式,它可以进行多个并发调用,并且不要求被调用系统的可用状态。发出调用系统会一直尝试直到获得被调用系统的应答。它通常用于当你需要提高系统并行调用多个 RFC 的效率,相对于强制等待程序的结果,它的效率更高。

3、事物 RFC(tRFC,transactional RFC)是对 aRFC 进行相关技术改进后的一个 RFC 版本,其于 aRFC 相同点是实现异步调用,其优点是可以将多个调用进行 LUW 分组处理, 并只执行一次运行。tRFC 组件将调用的 RFC 函数与相应的数据一起存储在 SAP 数据库中的唯一事务 ID (TID) 下。 如果系统不可用,它会将数据写入带有事务 ID (SM58) 的 aRFC 表中,该 ID 由调度程序 RSARFCSE(每 60 秒运行一次)选择。

4、队列 RFC(qRFC,queue (d) RFC)是 tRFC 的一个增强版本,保证按应用程序指定的顺序处理多个 LUW(工作/事务的逻辑单元)。并可用于 SAP-SAP 及 SAP-non SAP。

5、并行 RFC(pRFC,Parallel RFC)是一种特殊的 RFC,它是 aRFC 的一种扩展类型。因为它改善了系统的性能,在执行大量的 aRFC 时。SAP 使用它在 MRP 里面提高速度。但是它只能执行在同一个系统和同一个 client 里。

五种 RFC 调用特性对比

对比内容 sRFC aRFC tRFC qRFC pRFC
执行时间 立即执行 立即执行 需等待 需等待 立即执行
处理模式 同步 异步 异步,一次执行 异步,一次顺序执行 异步
交互对话 支持 支持 不支持 不支持 不建议使用
状态查询 不提供 不提供 提供 提供 不提供

RFC创建步骤

  1. 通过T-Code: SE37,进入 RFC 开发初始界面

  2. 创建 RFC 与 Report 不同的是,RFC 程序需要先定义一个 Function Group,一个 Group 下可包含多个 Function。

  3. Go to –> Function Groups –> Create Group

  4. 对 Function 进行属性设置,Processing Type => Remote-enabled module

  5. Function 编辑器包含有七个页签:

    • Attributes:设置Short text和Processing Type,是否允许外部调用。

    • Import:数据输入接口,接口参数可以为单个变量或则为一个结构体。

    • Export:数据输出接口,接口参数可以为单个变量或一个结构体。

    • Changing:将传入的表数据修改后返回

    • Tables:可同时作为输入输出接口,参数可谓单个变量或Struct或内表

    • Exceptions:异常输入几口,参数可以为单个变量或内表

    • Source Code :ABAP代码编辑器,定义RFC的具体功能。