SAP中的远程函数调用(RFC)
原文链接:Remote Function Call (RFC) in SAP Tutorial
作者:Scott Livingston
什么是RFC?
RFC 是一种允许业务应用程序与其他系统通信和交换信息(以预定义的格式)的机制。RFC 代表“远程函数调用”
RFC 包含两个接口:
- ABAP 程序的调用接口
- 非 SAP 程序的调用接口
任何 ABAP 程序都可以使用 CALL FUNCTION...DESTINATION
语句调用远程函数。DESTINATION 参数告诉 SAP 系统,被调用的函数在调用方以外的系统中运行。
CALL FUNCTION 'remotefunction' DESTINATION dest
EXPORTING
f1 =
IMPORTING
f2 =
TABLES
t1 =
EXCEPTIONS
逻辑目的地经由事务 SM59
定义并存储在表 RFCDES 中
RFC 接口的功能
将所有参数数据转换为远程系统中所需的表示
调用与远程系统通信所需的通信例程
处理通信错误,并在需要时通知调用者(使用
CALL FUNCTION
的EXCEPTIONS
参数)
RFC 是一种 SAP 协议,用于处理系统之间的通信,以简化相关编程。它是调用驻留在与调用程序不同的机器上的功能模块的过程。 RFC 也可以用于调用同一台机器上的不同程序,但通常,它用于“调用”和“被调用”功能模块/程序在不同的机器上运行时。
在 SAP 中,RFC 接口系统用于在不同 SAP 系统之间以及在 SAP 和外部(非 SAP )系统之间建立 RFC 连接。
必须了解的 RFC 详细信息
SAP 使用 CPIC(通用通信编程接口)协议在系统之间传输数据。这是 SAP 特定方案。远程函数调用(RFC)是一种基于 CPI-C 的通信接口,但功能更多,更易于应用程序员使用
- RFC 库函数支持 C 编程语言和 VisualBasic(在 Windows 平台上)
- RFC 连接总是可以在整个系统中使用。这意味着您在客户端 000 中定义的 RFC 连接也可以从客户端 100 使用(没有任何区别)。
- RFC 是通过网络调用特殊子程序(功能模块)的协议。函数模块可与 C 函数或 PASCAL 过程相媲美。它们具有定义的接口,通过该接口可以交换数据、表和返回代码。函数模块在 R/3 系统中在其自己的函数库中进行管理,称为函数生成器。
- 函数生成器(事务
SE37
)为应用程序员提供了一个有用的环境,用于编程,记录和测试可以在本地和远程调用的功能模块。R/3 系统自动生成远程调用所需的附加代码(RFC stub)。 - 您使用事务 SM 59 维护 RFC 连接的参数。R/3 系统还提供了 RFC-SDK(软件开发工具包),该工具包使用广泛的C库来允许外部程序连接到 R/3 系统。
- 对另一个服务器的功能模块的远程调用和本地调用之间的唯一区别是一个特殊的参数(目的地),它指定了程序要在其上执行的目标服务器。
RFC的优点:
RFC 通过让程序员避免在远程系统上重新开发模块和方法来帮助减少他们的工作量。它有足够多的能力:
- 将数据转换为远程(目标)系统可理解的格式。
- 调用启动与远程系统通信所必需的某些例程。
- 处理通信过程中可能发生的错误。
RFC 的类型
同步
要求两个系统(客户端和服务器)在通信或数据传输时都可用。它是最常见的类型,并且在执行 sRFC 之后立即需要结果时是必需的。
sRFC 是需要确认的系统之间的通信方式。源系统的资源在目标系统上等待,并确保它们递送具有 ACKD 的消息/数据。数据一致,通信可靠。
问题是,如果目标系统不可用,源系统资源将等待目标系统可用。这可能导致源系统的进程在目标系统处进入睡眠 /RFC/CPIC
模式,并因此阻塞这些资源。
通常用于:
- 用于系统之间的通信
- 用于SAP Web Application Server 与 SAP GUI 之间的通信
异步
它是系统之间的通信,不需要确认(类似于明信片传递)。它不要求两个系统在执行时都可用,并且不需要立即将结果发送回调用系统。
源系统资源不等待目标系统,因为它们在不等待任何确认的情况下传递消息/数据。如果目标系统不可用,则数据可能丢失,因此通信不可靠。
通常用于:
- 用于系统之间的通信
- 用于并行处理
Transactional
它是 aRFC 的一种特殊形式。Transactional RFC 确保对最初自治的处理步骤进行类似事务的处理。
事务性 RFC 是一种异步通信方法,它只执行 RF C服务器中调用的功能模块一次,即使由于某些网络问题而多次发送数据。当 RFC 客户端程序正在执行 tRFC 时,远程系统不需要可用。tRFC 组件将所调用的 RFC 函数与对应的数据一起存储在 SAP 数据库中的唯一事务 ID(TID)下。tRFC 类似于 aRFC,因为它不会在目标系统上等待(类似于注册的帖子)。如果系统不可用,则它将数据写入具有事务 ID(SM58
)的 RFC 表中,该事务 ID 由调度器 RSARFCSE(每 60 秒运行一次)挑选。
主要用于:
- RFC 异步RFC的扩展
- 用于系统之间的安全通信
队列 RFC
队列 RFC 是 tRFC 的扩展。它还确保按顺序处理各个步骤。保证多个 LUW(逻辑工作单元/事务)按照应用程序指定的顺序进行处理。tRFC 可以使用队列(入站和出站队列)进行序列化。因此,它被称为 queued RFC(qRFC)。
主要用于:
- 事务性 RFC 的扩展
- 对于已定义的处理序列
- 如果您希望保证按预定义的顺序处理多个事务,建议实现 qRFC
RFC 连接的类型
Type 3 – 条目指定 ABAP 系统之间的连接。在这里,我们必须指定主机名/IP 地址。但是,如果需要,您可以指定登录信息。这适用于两种类型的 RFC,在 ABAP 系统和外部调用 ABAP 系统之间
Type I-条目指定连接到与当前系统相同的数据库的 ABAP 系统。这些条目是预定义的,无法修改。示例条目名称:ws0015_K18_24
- ws0015=host name
- K18=系统名称(数据库名称)
- 24= TCP服务名称
Type T – 目的地是到使用RFC API接收RFC的外部程序的连接。激活类型可以是“开始”或“注册”。如果是“启动”,则必须指定要启动的程序的主机名和路径名。
如何编写RFC?
- 在功能模块属性页签(交易代码SE37)中,将处理类型设置为远程启用模块,创建远程功能模块。
- 编写函数模块的代码。
- 在 RFC 客户端系统中定义调用远程函数(通过
SM59
事务)的 RFC 服务器的目的地。
- 声明参数:远程功能模块的所有参数字段必须定义为引用字段,即类似于 ABAP 字典字段。
- Exceptions: 系统在内部引发
COMMUNICATION_FAILURE
和SYSTEM_FAILURE
。可以像在本地调用的函数中一样在远程函数中引发异常。
调试远程函数调用
- 无法调试对另一个系统的远程函数调用。
- 但是,在测试 ABAP-to-ABAPRFC 调用时,可以使用 ABAP 调试器来监视远程系统中 RFC 函数的执行。
- 通过远程调用,ABAP 调试器(包括调试接口)在本地系统上运行。远程函数的数据值和其他运行信息从远程系统传入。
- 点赞
- 收藏
- 关注作者
评论(0)