ABAP RFC介绍

RFC 介绍

Remote Functino Call 远程函数调用是 SAP 提供的一种系统间的通信手段,表现为在被调用方系统的的函数。只需通过事务码SM59维护系统之间的链接信息,即可通过 RFC 进行系统间通信。

image-20241205204806589

目前SAP提供了以下四种 RFC :

  1. 同步RFC:sRFC
  2. 异步RFC:aRFC
  3. 事务RFC:tRFC
  4. 队列RFC:qRFC
    1. 出栈队列 RFC
    2. 入栈队列 RFC

四种 RFC 调用特性对比

执行时间 处理模式 调用时是否支持DEBUG 日志信息
sRFC 立即执行 同步 支持
aRFC 立即执行 异步 支持
tRFC 需等待 异步,一次执行 不支持 SM58
qRFC 需等待 异步,一次顺序执行 不支持 SQ01SQ02

同步 RFC(sRFC, Synchronous RFC)

示例代码

1
2
3
4
5
6
CALL FUNCTION 'REMOTE_FUNCTION'
DESTINATION 'DESTINATION_NAME'
EXPORTING
input_data = lv_input
IMPORTING
output_data = lv_output.

特点

  • 调用是 同步 的,即调用者会等待远程过程完成并返回结果。
  • 调用时,系统需要确保远程系统是可用的,否则调用会失败。
  • 常用于简单的、实时的、请求-响应模式的场景。

使用场景

  • 两个 SAP 系统之间的数据同步。
  • 简单的实时请求,比如从另一个 SAP 系统获取客户信息。

日志

  • 无日志。

异步 RFC(aRFC, Asynchronous RFC)

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CALL FUNCTION 'REMOTE_FUNCTION'
DESTINATION 'DESTINATION_NAME'
STARTING NEW TASK 'TASK_NAME'
PERFORMING callback_form ON END OF TASK
EXPORTING
input_data = lv_input.
*不能有导出参数

*结果处理FORM
FORM callback_form USING taskname.
DATA lv_output TYPE char100.
RECEIVE RESULTS FROM FUNCTION 'REMOTE_FUNCTION'
IMPORTING output_data = lv_output."接收导出数据
ENDFORM.

特点

  • 调用是 异步 的,调用者不需要等待远程过程完成。
  • 异步 RFC 调用过程中,调用者和被调用者的资源是独立的。
  • 调用方无法直接接收返回值,但可以通过后续的机制PERFORMING callback_form ON END OF TASK检查执行结果。
    • callback_form 会在程序最后且异步函数执行结束后被调用

使用场景

  • 数据批量传输。
  • 长时间运行的过程,例如数据集成或数据清理任务。

日志

  • 调用方系统通过ST22查询失败日志。

事务 RFC(tRFC, Transactional RFC)

事务 RFC 是异步 RFC 的改进版本,主要用于可靠的异步通信,提供更强的错误处理能力和事务管理功能。即使远程系统暂时不可用,数据会被存储并在稍后重新传输,确保调用成功。

示例代码

1
2
3
4
5
6
7
CALL FUNCTION 'REMOTE_FUNCTION'
IN BACKGROUND TASK
DESTINATION 'DESTINATION_NAME'
EXPORTING
input_data = lv_input.

COMMIT WORK.

特点

  • 异步调用,但具有事务管理(Transactional RFC)的可靠性。
  • 支持队列机制,可以按照特定顺序执行。
  • 消息可以被重新传输,确保数据的一致性。
    • 默认配置是发送30次每次间隔15分钟直到发送成功
    • 重发功能以后台作业的形式呈现
  • COMMIT WORK时才会将tRFC放入系统队列中。
    • 两个COMMIT WORK之间的、相同DESTINATION的tRFC为一组LUW(逻辑单元)
  • tRFC的执行需要在系统队列中等待。

缺点

  1. 如果需要处理的tRFC过多,可能会影响两方系统的性能。
  2. 通过调用tRFC所形成的逻辑单元,它们不是按顺序执行的。

使用场景

  • 数据传输要求可靠性但不需要实时性,比如各种同步数据场景。
  • 系统不可用时,数据可在稍后继续传输。
  • 数据传输需要特定的执行顺序。

日志

  • 调用方通过SM58查询日志。
  • 被调用方无日志。

队列 RFC(qRFC, Queued RFC)

队列 RFC 可以视为 事务 RFC 的升级版,相比事务 RFC 队列 RFC 有以下优点:

  1. 提供了 SMQ1SMQ2两个更强大的事务码来管理出栈队列和入栈队列。
  2. 通过函数为 RFC 配置队列

队列 RFC(qRFC, Queued RFC)

出栈和入栈队列

队列 RFC 可以分为 出栈队列(Outbound Queue)入栈队列(Inbound Queue),分别对应数据从源系统发送和目标系统接收的方向。

  1. 出栈队列的 RFC 调用需要在调用前调用TRFC_SET_QUEUE_NAME函数指定出栈队列
  2. 入栈队列的 RFC 调用需要在调用前调用TRFC_SET_QIN_NAME 函数指定出栈队列和入栈队列

出栈和入栈队列的关系如下:

  • 出栈队列入栈队列 通常成对出现,确保数据从源系统到目标系统的顺序性和可靠性。
  • 数据的处理流程:
    1. 在源系统中,通过 qRFC 调用生成一个出栈队列(SMQ1)。
    2. 数据发送到目标系统后,存入目标系统的入栈队列(SMQ2)。
    3. 目标系统按顺序处理入栈队列中的调用。

ABAP RFC介绍
https://claudechan1228.github.io/2024/12/02/032-ABAP RFC介绍/
作者
Claude Chan
发布于
2024年12月2日
许可协议