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

目前SAP提供了以下四种 RFC :
- 同步RFC:sRFC
- 异步RFC:aRFC
- 事务RFC:tRFC
- 队列RFC:qRFC
- 出栈队列 RFC
- 入栈队列 RFC
四种 RFC 调用特性对比
| 执行时间 | 处理模式 | 调用时是否支持DEBUG | 日志信息 | |
|---|---|---|---|---|
| sRFC | 立即执行 | 同步 | 支持 | 无 |
| aRFC | 立即执行 | 异步 | 支持 | 无 |
| tRFC | 需等待 | 异步,一次执行 | 不支持 | SM58 |
| qRFC | 需等待 | 异步,一次顺序执行 | 不支持 | SQ01和SQ02 |
同步 RFC(sRFC, Synchronous RFC)
示例代码
1 | |
特点
- 调用是 同步 的,即调用者会等待远程过程完成并返回结果。
- 调用时,系统需要确保远程系统是可用的,否则调用会失败。
- 常用于简单的、实时的、请求-响应模式的场景。
使用场景
- 两个 SAP 系统之间的数据同步。
- 简单的实时请求,比如从另一个 SAP 系统获取客户信息。
日志
- 无日志。
异步 RFC(aRFC, Asynchronous RFC)
语法
1 | |
特点
- 调用是 异步 的,调用者不需要等待远程过程完成。
- 异步 RFC 调用过程中,调用者和被调用者的资源是独立的。
- 调用方无法直接接收返回值,但可以通过后续的机制
PERFORMING callback_form ON END OF TASK检查执行结果。callback_form会在程序最后且异步函数执行结束后被调用
使用场景
- 数据批量传输。
- 长时间运行的过程,例如数据集成或数据清理任务。
日志
- 调用方系统通过
ST22查询失败日志。
事务 RFC(tRFC, Transactional RFC)
事务 RFC 是异步 RFC 的改进版本,主要用于可靠的异步通信,提供更强的错误处理能力和事务管理功能。即使远程系统暂时不可用,数据会被存储并在稍后重新传输,确保调用成功。
示例代码
1 | |
特点
- 异步调用,但具有事务管理(Transactional RFC)的可靠性。
- 支持队列机制,可以按照特定顺序执行。
- 消息可以被重新传输,确保数据的一致性。
- 默认配置是发送30次每次间隔15分钟直到发送成功
- 重发功能以后台作业的形式呈现
COMMIT WORK时才会将tRFC放入系统队列中。- 两个
COMMIT WORK之间的、相同DESTINATION的tRFC为一组LUW(逻辑单元)
- 两个
- tRFC的执行需要在系统队列中等待。
缺点
- 如果需要处理的tRFC过多,可能会影响两方系统的性能。
- 通过调用tRFC所形成的逻辑单元,它们不是按顺序执行的。
使用场景
- 数据传输要求可靠性但不需要实时性,比如各种同步数据场景。
- 系统不可用时,数据可在稍后继续传输。
- 数据传输需要特定的执行顺序。
日志
- 调用方通过SM58查询日志。
- 被调用方无日志。
队列 RFC(qRFC, Queued RFC)
队列 RFC 可以视为 事务 RFC 的升级版,相比事务 RFC 队列 RFC 有以下优点:
- 提供了
SMQ1和SMQ2两个更强大的事务码来管理出栈队列和入栈队列。 - 通过函数为 RFC 配置队列
队列 RFC(qRFC, Queued RFC)
出栈和入栈队列
队列 RFC 可以分为 出栈队列(Outbound Queue) 和 入栈队列(Inbound Queue),分别对应数据从源系统发送和目标系统接收的方向。
- 出栈队列的 RFC 调用需要在调用前调用
TRFC_SET_QUEUE_NAME函数指定出栈队列 - 入栈队列的 RFC 调用需要在调用前调用
TRFC_SET_QIN_NAME函数指定出栈队列和入栈队列
出栈和入栈队列的关系如下:
- 出栈队列 和 入栈队列 通常成对出现,确保数据从源系统到目标系统的顺序性和可靠性。
- 数据的处理流程:
- 在源系统中,通过 qRFC 调用生成一个出栈队列(
SMQ1)。 - 数据发送到目标系统后,存入目标系统的入栈队列(
SMQ2)。 - 目标系统按顺序处理入栈队列中的调用。
- 在源系统中,通过 qRFC 调用生成一个出栈队列(
ABAP RFC介绍
https://claudechan1228.github.io/2024/12/02/032-ABAP RFC介绍/