远程函数调用 (RFC) SAP 教程
什么是 RFC?
RFC 是一种允许业务应用程序与其他系统进行通信和交换信息(以预定义格式)的机制。RFC 代表 ‘远程函数调用’
RFC 包含两个接口:
- ABAP 程序的调用接口
- 非调用接口SAP 程式。
任何 ABAP 程序 可以使用 呼叫功能…目的地 陈述。 这 目的地 参数告诉 SAP 被调用函数在调用者以外的系统上运行的系统。
句法-
CALL FUNCTION 'remotefunction' DESTINATION dest EXPORTING f1 = IMPORTING f2 = TABLES t1 = EXCEPTIONS
逻辑目的地通过事务定义 SM59 并存储在表中 射频功率控制设计
RFC 接口的功能
- 将所有参数数据转换为远程系统所需的表示形式
- 调用与远程系统通信所需的通信例程。
- 处理通信错误,并在需要时通知调用者(使用 CALL FUNCTION 的 EXCEPTIONS 参数)。
RFC 是一个 SAP 协议用于处理系统之间的通信,以简化相关编程。它是调用位于与调用程序不同的机器上的功能模块的过程。RFC 也可用于调用同一台机器上的其他程序,但通常,当“调用”和“被调用”功能模块/程序在不同的机器上运行时使用它。
In SAP,RFC接口系统用于建立不同 SAP 系统,以及 SAP 以及外部(非SAP)系统。
必须了解有关 RFC 的详细信息
- SAP 使用 CPIC(通用通信编程接口)协议在系统之间传输数据。 SAP 特定协议。远程函数调用 (RFC) 是基于 CPI-C 的通信接口,但功能更多,更方便应用程序员使用
- RFC 库函数支持 C语言 和 Visual Basic( Windows 平台)
- RFC 连接始终可以在整个系统中使用。这意味着您在客户端 000 中定义的 RFC 连接也可以从客户端 100 使用(没有任何区别)。
- RFC 是通过网络调用特殊子程序(功能模块)的协议。功能模块与 C 函数或 PASCAL 过程类似。它们具有定义的接口,通过该接口可以交换数据、表和返回代码。功能模块在 R/3 系统中通过其自己的功能库(称为“函数生成器”)进行管理。
- 函数生成器(事务 SE37)为应用程序程序员提供了一个有用的编程、记录和 测试 可以本地和远程调用的功能模块。R/3 系统会自动生成远程调用所需的附加代码 (RFC 存根)。
- 您可以使用事务 SM59 维护 RFC 连接的参数。R/3 系统还附带 RFC-SDK(软件开发工具包),该工具包使用大量 C 库允许外部程序连接到 R/3 系统。
- 远程调用另一台服务器的功能模块与本地调用之间的唯一区别是一个特殊参数(目标),该参数指定了要执行程序的目标服务器。
RFC 的优势
RFC 有助于减少程序员的工作量,避免在远程系统上重新开发模块和方法。它能够:
- 将数据转换为远程(目标)系统可以理解的格式。
- 将数据转换为远程(目标)系统可以理解的格式。
- 调用开始与远程系统通信所需的某些例程。
- 处理通信过程中可能出现的错误。
RFC 的类型
Synchronous
要求在通信或数据传输时两个系统(客户端和服务器)都可用。这是最常见的类型,在执行 sRFC 后立即需要结果时是必需的。
sRFC 是系统之间需要确认的通信方式。源系统的资源等待目标系统并确保它们使用 ACKD 传递消息/数据。数据对于通信而言是一致且可靠的。
问题是,如果目标系统不可用,源系统资源将等待,直到目标系统可用。这可能会导致源系统的进程在目标系统上进入睡眠/RFC/CPIC 模式,从而阻止这些资源。
用于
- 用于系统之间的通信
- 用于以下之间的通信 SAP Web 应用程序服务器 SAP GUI
异步
它是系统之间的通信,不需要确认(类似于明信片递送)。它不需要两个系统在执行时都可用,也不需要立即将结果发送回调用系统。
源系统资源不会等待目标系统,因为它们无需等待任何确认即可传递消息/数据。如果目标系统不可用,数据可能会丢失,因此通信不可靠。 用于 -
- 用于系统之间的通信
- 对于并行处理
事务
它是 RFC 的一种特殊形式。事务性 RFC 确保对原本自主的处理步骤进行事务式处理。
事务性 RFC 是一种异步通信方法,即使由于某些网络问题多次发送数据,也只会在 RFC 服务器中执行一次调用的函数模块。当 RFC 客户端程序执行 tRFC 时,远程系统不需要可用。tRFC 组件将调用的 RFC 函数与相应的数据存储在 SAP tRFC 会将数据写入具有唯一事务 ID (TID) 的数据库。tRFC 与 aRFC 类似,因为它不会在目标系统等待(类似于挂号邮件)。如果系统不可用,它将使用由调度程序 RSARFCSE(每 58 秒运行一次)挑选的事务 ID (SM60) 将数据写入 aRFC 表。 用于-
- 异步 RFC 的扩展
- 用于系统之间的安全通信
排队
队列 RFC 是 tRFC 的扩展。它还确保按顺序处理各个步骤。为了保证按应用程序指定的顺序处理多个 LUW(逻辑工作单元/事务)。可以使用队列(入站和出站队列)对 tRFC 进行序列化。因此得名队列 RFC(qRFC)。用于-
- 事务 RFC 的扩展
- 对于定义的处理序列
- 如果您想保证按照预定义的顺序处理多笔交易,建议实施 qRFC。
RFC 连接的类型
第3类型 – 条目指定了以下项之间的连接 ABAP 系统。在这里,我们必须指定主机名/IP 地址。但是,您可以根据需要指定登录信息。这适用于两种类型的 RFC,即 ABAP 系统之间和对 ABAP 系统的外部调用
类型 I – 条目指定与当前系统连接到同一数据库的 ABAP 系统。这些条目是预定义的,无法修改。示例条目名称:ws0015_K18_24
- ws0015=主机名
- K18=系统名称(数据库名称)
- 24=TCP 服务名称
输入T. – 目标是使用 RFC API 接收 RFC 的外部程序的连接。激活类型可以是启动或注册。如果是启动,则必须指定要启动的程序的主机名和路径名。
如何编写 RFC?
1) 在功能模块属性选项卡(事务代码 SE37)中,设置处理类型为远程启用模块,以创建远程功能模块。
2) 编写功能模块的代码。
3) 在调用远程函数的 RFC 客户端系统中定义 RFC 服务器的目标(通过 SM59 事务)。
4)声明参数:远程功能模块的所有参数字段都必须定义为参考字段,即类似ABAP字典字段。
5)例外情况: 系统内部会引发 COMMUNICATION_FAILURE 和 SYSTEM_FAILURE。您可以在远程函数中引发异常,就像在本地调用的函数中一样。
调试远程函数调用
- 这是 无法调试 对另一个系统的远程函数调用。
- 但是,在测试 ABAP 到 ABAP RFC 调用时,您可以使用 ABAP 调试器来监视远程系统中 RFC 函数的执行。
- 使用远程调用时,ABAP 调试器(包括调试接口)在本地系统上运行。远程函数的数据值和其他运行信息从远程系统传入。