远程函数调用 (RFC) SAP ABAP 教程

⚡ 智能摘要

远程函数调用(RFC)是 SAP 一种通信机制,允许 ABAP 程序调用在另一个程序上运行的函数模块。 SAP 或外部系统。它吸收trac它负责网络管道,转换数据格式,并将故障清晰地反馈给调用者。

  • 📡 核心机制: CALL FUNCTION…DESTINATION 在 SM59 中定义的逻辑目标上调用函数模块。
  • 🔁 四种变体: Sync异步、异步、事务性和排队式 RFC 各自保证不同的交付能力tract.
  • 🌐 连接类型: SM59 支持类型 3(ABAP 到 ABAP)、类型 I(同一数据库对等体)和类型 T(外部程序)。
  • 🛠️ 构建路径: 在 SE37 中将功能模块设置为远程启用,对其进行编码,并在调用方的 SM59 中定义目标。
  • 🤖 人工智能视角: AI 助手根据自然语言规范生成 ABAP RFC 存根,并将 SM58 错误解析为可操作的修复方案。

RFC 接口的功能

什么是 RFC? SAP?

RFC 代表 远程函数调用它是一种机制,允许业务应用程序以预定义的格式与其他系统进行通信和信息交换。RFC 是最常用的方法之一。 SAP 系统之间可以进行通信,它也是连接两者的桥梁。 SAP 系统到非SAP 领域广泛应用,提供了卓越的解决方案。

RFC 提供两种接口:

  1. 一个用于调用接口的接口 ABAP 程序.
  2. 非调用接口SAP 程式。

任何 ABAP 程序都可以使用以下方式调用远程函数: 呼叫功能…目的地 陈述。 这 DESTINATION 参数告诉 SAP 被调用函数运行的系统与调用者运行的系统不同。

句法

CALL FUNCTION 'remotefunction'
  DESTINATION dest
  EXPORTING  f1 = ...
  IMPORTING  f2 = ...
  TABLES     t1 = ...
  EXCEPTIONS ...

逻辑目标通过事务定义。 SM59 并存储在表中 射频功率控制设计.

RFC 接口的功能

RFC 接口的功能

RFC运行时在每次调用时负责三件事:

  • 将所有参数数据转换为远程系统期望的表示形式。
  • 调用与远程系统通信所需的通信例程。
  • 处理沟通错误并通过以下方式将其告知呼叫者: EXCEPTIONS 的参数 CALL FUNCTION.

RFC通信 SAP 系统

RFC是 SAP RFC(请求通信协议)是一种处理系统间通信并简化相关编程的协议。它指的是调用位于与调用程序所在机器不同的机器上的函数模块的过程。从技术上讲,RFC 可以用于调用位于另一台机器上的函数模块。 同 它们可以在不同的机器上运行,但最常用于调用程序和被调用程序运行在不同的机器上的情况。RFC接口系统用于在不同机器之间建立RFC连接。 SAP 系统,以及之间 SAP 和外部(非-SAP) 系统。

关于 RFC 的必知细节

  • SAP 使用 太保 CPIC(通用通信编程接口)是一种用于在系统间传输数据的协议。CPIC是 SAPRFC 是一种基于 CPI-C 的通信接口,它具有更多功能,并且对应用程序员更加友好。
  • RFC 库函数支持 C语言 以及 Visual Basic Windows 平台。
  • RFC 连接在整个系统中均可正常工作。在客户端 000 中定义的 RFC 连接也可以在客户端 100 中使用,没有任何区别。
  • RFC 是用于通过网络调用专用子程序(函数模块)的协议。函数模块类似于 C 函数或 Pascal 过程:它们公开了一个定义的接口,通过该接口可以交换数据、表和返回码。函数模块在 RFC 内部进行管理。 SAP 系统位于专用库中, 函数构建器.
  • 函数构建器(事务) SE37它为应用程序员提供了一个用于编写、记录和运行的环境。 测试 可本地和远程调用的功能模块。系统会自动生成附加代码(即 RFC 存根远程通话需要用到。
  • RFC 连接通过事务进行维护。 SM59. SAP 也发货 RFC-SDK (软件开发工具包)使用大量的 C 库,以便外部程序可以连接到 SAP 系统。
  • 远程调用另一台服务器和本地调用之间的唯一区别在于: DESTINATION 该参数指定程序应执行的目标服务器。

RFC的优势

RFC 通过消除在远程端重新实现模块和方法的需求,减少了编程工作量。RFC 层负责:

  • 将数据转换为远程(目标)系统可以理解的格式。
  • 调用建立与远程系统通信所需的例程。
  • 处理沟通过程中出现的错误。
  • 在使用事务型或队列型变体时,提供可靠的事务语义。

RFC 的类型

RFC 的类型

SAP 支持四种 RFC 变体。每种变体在延迟、可靠性和排序保证之间提供了不同的权衡。

1. Synchronous RFC (sRFC)

Sync异步 RFC 要求客户端和服务端在调用时都可用。它是最常见的类型,用于调用者需要在执行后立即获得结果的情况。

sRFC 是一种系统间通信方式,它要求系统之间进行确认。源系统的资源会等待目标系统,并确保消息到达时带有确认 (ACK)。交换的数据具有一致性和可靠性。

缺点是,如果目标系统不可用,源系统资源将等待直到目标系统恢复,这可能会将源系统进程推入目标系统的 Sleep/RFC/CPIC 模式并阻塞资源。

用于:

  • 系统间实时通信。
  • 之间的沟通 SAP Web应用程序服务器和 SAP GUI。

2. 异步 RFC (aRFC)

异步 RFC 是系统间无需确认的通信方式,类似于丢包。ping 就像寄明信片一样。两个系统在执行时都不需要可用,而且结果也不会立即返回给调用系统。

源系统资源不会等待目标系统;它会立即传递数据并继续执行其他任务。这使得 aRFC 速度很快,但自身可靠性不高——如果目标系统不可用,数据可能会丢失。

用于:

  • 系统间即发即弃通信。
  • 跨系统并行处理。

3. 事务型 RFC (tRFC)

事务性 RFC 是一种特殊形式的异步 RFC。它确保对原本各自独立的处理步骤进行类似事务的处理。

即使由于网络问题导致数据多次发送,tRFC 也只会在 RFC 服务器上执行一次被调用的函数模块。远程系统无需在 RFC 客户端执行调用时处于可用状态。tRFC 组件会将被调用的函数及其数据存储在…… SAP 数据库位于一个独特的数据库之下 交易 ID (TID)如果目标系统不可用,数据将被写入 RFC 表(可在事务中查看)。 SM58)随后被调度程序报告捕获 RSARFCSE每隔 60 秒运行一次。

用于:

  • 扩展异步 RFC,实现最多一次交付。
  • 在执行次数必须精确到一次的情况下,实现系统间的可靠通信。

4. 排队 RFC (qRFC)

队列式 RFC 通过保证各个步骤按照调用应用程序指定的顺序进行处理,扩展了 tRFC。为了确保多个逻辑工作单元(LUW/事务)按预期顺序处理,tRFC 可以使用入站和出站队列进行序列化——这也是“队列式 RFC”名称的由来。

用于:

  • 扩展事务型 RFC,实现严格排序。
  • 必须遵循既定处理顺序的场景。
  • 需要按预定顺序处理多个交易的情况。

RFC 类型比较

类型 来电者等待? 可靠? 已下单吗? 最适合
sRFC 是 是 不适用(单次通话) 实时查找
aRFC 没有 没有 没有 发射后不管,并行工作
tRFC 没有 是的(仅一次) 没有 可靠的异步更新
qRFC 没有 是的(仅一次) 是 严格按照顺序进行的更新

RFC 连接的类型

RFC 连接的类型

SM59 支持多种连接类型。您最常遇到的三种连接类型总结如下。

类型 3 — ABAP 到 ABAP

类型 3 条目指定了以下之间的连接 ABAP 系统主机名或 IP 地址为必填项;登录信息可选择性提供。类型 3 既适用于 ABAP 系统之间的 RFC 通信,也适用于对 ABAP 系统的外部调用。

第一类——同数据库对等体

I 型条目指定与当前系统共享同一数据库的 ABAP 系统。这些条目是预定义的,无法修改。典型的条目名称如下所示: ws0015_K18_24:

  • ws0015 — 主机名
  • K18 — 系统(数据库)名称
  • 24 — TCP 服务名称

T 型 — 外部程序

T 型目标连接到使用 RFC API 接收 RFC 的外部程序。激活类型可以是以下两种之一: 开始 or 账号注册如果是“启动”,则必须提供主机名和要启动的程序的路径。

如何 Code 一个 RFC

完整构建 RFC 分为五个步骤。前三个步骤是使用 SE37 和 SM59 进行机械点击;后两个步骤是关于获取控制权。trac没错。

第三步: 在事务的功能模块属性选项卡中 SE37,将处理类型设置为 远程启用模块 将函数模块标记为支持 RFC。

SE37 远程启用模块

第三步: 在源代码编辑器中编写函数模块的代码。

功能模块源代码

第三步: 在调用远程函数的 RFC 客户端系统中,定义 RFC 服务器的目标地址——在事务中完成。 SM59.

SM59 目的地设置

步骤 4 — 声明参数: 远程函数模块的所有参数字段都必须定义为引用字段,即与 ABAP 字典字段对应。启用远程功能的函数模块不允许使用值参数。

第五步——例外情况: 系统提升 通信故障 和 系统故障 内部处理传输层错误。应用程序层异常可以在远程函数中引发,就像在本地函数中一样。

调试远程函数调用

  • 这是 无法调试 以传统方式向非 ABAP 系统进行远程函数调用——外部运行时是不透明的。
  • 但是,对于 ABAP 到 ABAP 的 RFC 调用,可以使用 ABAP 调试器来监视远程系统内部 RFC 函数的执行情况。
  • 使用远程调用时,ABAP 调试器(包括其用户界面)在本地系统上运行。远程函数的数据值和其他运行时信息从远程系统流式传输回本地系统。

主要 SAP RFC交易

日常使用的 RFC 工具箱可以简化为几个 T 代码,每个 ABAP 开发人员和 Basis 管理员都应该能够熟练掌握这些代码。

T码 目的
SM59 维护 RFC 目标 - 主机、登录、类型、安全。
SE37 函数构建器 — 创建或编辑远程启用函数模块。
SM58 监控失败的事务性 RFC 并重新处理它们。
SMQ1 / SMQ2 监控出站(SMQ1)和入站(SMQ2)qRFC 队列。
支柱 维护受 HTTPS 保护的 RFC 目标所使用的 SSL 证书。
ST22 检查由远程调用失败引起的短转储文件。

最佳实践 SAP RFC

精心设计的 RFC 层能够确保集成快速、可观察且易于扩展。以下这些习惯值得融入到每个项目中。

  • 选择适合会议的正确版本tract. 对于同步查找,使用 sRFC;对于最多一次的异步更新,使用 tRFC;对于顺序很重要的情况,使用 qRFC。
  • 每个目标系统重复使用一个目标位置 它不会将主机名分散到多个目标位置,而是进行凭证轮换。 trac表。
  • 切勿将凭据硬编码到代码中 在 ABAP 中,尽可能使用可信系统连接或安全登录凭证。
  • 定期监测SM58和SMQ2。 卡住的 tRFC 条目会悄无声息地延迟业务流程,直到它们被重新处理为止。
  • 只传递引用类型的参数。 值参数会破坏远程启用功能模块。
  • 使用 STRUST 管理 TLS 证书 对于 HTTPS 目标——过期证书是导致神秘 COMMUNICATION_FAILURE 转储的主要原因。

常见问题

RFC 是调用任何支持远程功能的函数模块的底层协议。BAPI 是一种特定的、 SAP- 经过认证的函数模块,公开稳定的业务对象方法——每个 BAPI 都通过 RFC 公开,但并非每个 RFC 调用都会命中 BAPI。

受信任的 RFC 是一种 SM59 目标,目标系统信任调用者的身份验证,因此每次调用时无需交换密码。调用者的用户上下文会被传递。它消除了硬编码凭据,但代价是设置更加严格。

SM58 显示等待重新处理的失败或待处理的事务性 RFC 条目。每一行包含事务 ID、被调用的函数模块、目标地址、错误文本以及上次重试时间。

不。默认情况下,RFC 流量未加密。必须配置 SNC(安全网络通信)或 TLS/HTTPS 目标来加密流量。SNC 是生产环境中的标准机制。

tRFC 保证每次调用只执行一次,但不保证调用顺序。qRFC 在 tRFC 的基础上,通过入站或出站队列对调用进行序列化,从而使调用能够按照应用程序定义的顺序执行。

是的。外部程序可以注册到…… SAP 使用 RFC SDK(JCo)的网关 Java(例如,NCo for .NET 或 C SDK)。 SAP 然后像任何 ABAP 函数模块一样,通过 T 型目标调用它们。

AI 助手根据自然语言规范生成 ABAP RFC 存根,为场景提出正确的目标类型,并将 SM58 错误文本翻译成具体的修复列表,从而加快 Basis 和 ABAP 团队的日常集成工作。

是的。将 ST22 转储或 SM58 错误输入 AI 助手,它会将 COMMUNICATION_FAILURE / SYSTEM_FAILURE 模式与最可能的根本原因(证书过期、网关故障、缺少授权)关联起来,并建议要检查的相关 T 代码。

总结一下这篇文章: