SAP中的远程函数调用(RFC)

举报
雨绸缪 发表于 2023/07/31 17:06:02 2023/07/31
【摘要】 原文链接:Remote Function Call (RFC) in SAP Tutorial作者:Scott Livingston 什么是RFC?RFC 是一种允许业务应用程序与其他系统通信和交换信息(以预定义的格式)的机制。RFC 代表“远程函数调用”RFC 包含两个接口:ABAP 程序的调用接口非 SAP 程序的调用接口任何 ABAP 程序都可以使用 CALL FUNCTION...D...

原文链接:Remote Function Call (RFC) in SAP Tutorial
作者:Scott Livingston

什么是RFC?

RFC 是一种允许业务应用程序与其他系统通信和交换信息(以预定义的格式)的机制。RFC 代表“远程函数调用”

RFC 包含两个接口:

  1. ABAP 程序的调用接口
  2. 非 SAP 程序的调用接口

任何 ABAP 程序都可以使用 CALL FUNCTION...DESTINATION 语句调用远程函数。DESTINATION 参数告诉 SAP 系统,被调用的函数在调用方以外的系统中运行。

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

逻辑目的地经由事务 SM59 定义并存储在表 RFCDES

RFC 接口的功能

  • 将所有参数数据转换为远程系统中所需的表示

  • 调用与远程系统通信所需的通信例程

  • 处理通信错误,并在需要时通知调用者(使用 CALL FUNCTIONEXCEPTIONS 参数)

041213_0632_RFC1.webp

RFC 是一种 SAP 协议,用于处理系统之间的通信,以简化相关编程。它是调用驻留在与调用程序不同的机器上的功能模块的过程。 RFC 也可以用于调用同一台机器上的不同程序,但通常,它用于“调用”和“被调用”功能模块/程序在不同的机器上运行时。

041213_0632_RFC2.webp

在 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 的类型

041213_0632_RFC3.webp

同步

要求两个系统(客户端和服务器)在通信或数据传输时都可用。它是最常见的类型,并且在执行 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 连接的类型

041213_0632_RFC4.webp

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?

  1. 在功能模块属性页签(交易代码SE37)中,将处理类型设置为远程启用模块,创建远程功能模块。

image.png

  1. 编写函数模块的代码。

image.png

  1. 在 RFC 客户端系统中定义调用远程函数(通过 SM59 事务)的 RFC 服务器的目的地。

image.png

  1. 声明参数:远程功能模块的所有参数字段必须定义为引用字段,即类似于 ABAP 字典字段。
  2. Exceptions: 系统在内部引发 COMMUNICATION_FAILURESYSTEM_FAILURE。可以像在本地调用的函数中一样在远程函数中引发异常。

调试远程函数调用

  • 无法调试对另一个系统的远程函数调用。
  • 但是,在测试 ABAP-to-ABAPRFC 调用时,可以使用 ABAP 调试器来监视远程系统中 RFC 函数的执行。
  • 通过远程调用,ABAP 调试器(包括调试接口)在本地系统上运行。远程函数的数据值和其他运行信息从远程系统传入。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。