SAP 小技巧关于 q RFC 调用

作者:ABAP技巧与实战 约 8 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, 开发, 数据工程, 系统管理
SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**点击蓝字** 关注我们

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

前言

关于RFC函数的调用方式介绍,大家可以自行百度找找. 也可以点击下面的连接(很详细的介绍了各种RFC调用方式)

https://www.cnblogs.com/hhelibeb/p/8066753.html

本文介绍一下qRFC的调用方式及注意事项.

**(最近又在看三体,没有看过的朋友,强烈推荐你看一下,了解一下三体文明怎么通过远程调用打击地球文明的.)**

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**二.什么是RFC**

RFC remote function call远程功能调用.意味着调用远程系统的函数. 但是实际应用中. 这个远程系统也可以是自身.

只需要指定目标NONE . 就会指向当前服务器.

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**三.怎么维护远程系统?**

事物代码SM59 ,如果是A调用A系统, 则无需维护RFC目标(当然也可以维护一个调用自身的RFC目标)

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**四.为什么要使用qRFC**

原因一:实现异步调用. 调用方无需等待被调用方的反馈. 调用信息写入队列处理

原因二: 通过调用队列,解决被调用系统的进程占用问题.(一个极端的例子, 如果RFC函数性能极差,大量外围系统同步调用,

每个调用都会占用一个dialog进程,外围系统的RFC同步调用会占满所有的进程, 导入系统无法响应正常用户的处理要求)

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**五.** **入站队列与出站队列的区别?**

假定A系统调用B系统,

出站队列表示数据停留在A系统的队列中,由A系统调度,

入站队列表示数据会停留在B系统的队列中. 由B系统调度.

如果A系统调用A系统, 则出站/入站没有本质的区别,只是可控制的参数不太一样,这种情况建议使用入站队列

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**六.队列需要注册么?**

一般情况下调度队列无需注册.如果想对队列设置一些特定的参数, 可以注册一下队列. 这样可以给队列定义一些属性

出站队列似乎无需注册,可以直接执行 队列注册事物代码 SMQS(如图)

入站队列似乎需要注册,才能执行,否则队列一致处于ready状态 队列注册事物代码 SMQR(如图)

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

出站队列注册

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

入站队列注册

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**七.怎么实现qRFC的调用?**

1. RFC函数 示例函数中只有一个等待语句, 便于显示队列的执行情况(注意该函数的属性中一定要选中RFC调用,该函数最好没有返回参数)

2. 调用qRFC示例程序.示例代码中没有捕获RFC函数调用的例外情况, 实际应用中,最好捕获一下.

ZTS_QRFC_CALL,源代码见文末

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**八.怎么监控队列?**

出站队列 事物代码:SMQ1.

入站队列 事物代码:SMQ2.

队列监控可以执行队列内容查看,删除,错误监控,重处理等操作

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

执行示例程序,产生出站队列

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

进入SMQ1

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

执行示例程序,产生入站队列

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

进入 SMQ2

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**九.怎么改造原有外围系统接口调用qRFC?**

一个最简单的方案是外围系统调用同步RFC函数. 在同步RFC函数中调用目标函数产生队列. 这样每个同步调用都能很快的处理完成,可以避免系统资源的大量占用

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

总结

qRFC大部分是在异步接口场景中使用. 通过队列的调度,可以简单实现异步调用的一些常用的监控,出错重处理功能.

源代码部分

*&---------------------------------------------------------------------**& Report ZTS_QRFC_CALL*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zts_qrfc_call.PARAMETERS: p_sec TYPE i DEFAULT 10, rfcdest LIKE rfcdes-rfcdest DEFAULT 'NONE', P_QNAME LIKE TRFCQIN-QNAME DEFAULT 'MY_QUEUE'.PARAMETERS: p_out RADIOBUTTON GROUP ra1, p_in RADIOBUTTON GROUP ra1.

INITIALIZATION. %_p_sec_%_app_%-text = '等待时间(秒)'. %_rfcdest_%_app_%-text = '远程调用目标'. %_p_out_%_app_%-text = '出站队列'. %_p_in_%_app_%-text = '入站队列'. %_p_QNAME_%_app_%-text = '队列名称'.

START-OF-SELECTION. CASE 'X'. WHEN p_in. PERFORM frm_qrfc_inbound. WHEN p_out. PERFORM frm_qrfc_outbound. ENDCASE.*&---------------------------------------------------------------------**& Form FRM_QRFC_INBOUND*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_qrfc_inbound . CALL FUNCTION 'TRFC_SET_QIN_PROPERTIES' EXPORTING* QOUT_NAME = ' ' qin_name = P_QNAME* QIN_COUNT =* CALL_EVENT = ' '* NO_EXECUTE = ' ' EXCEPTIONS invalid_queue_name = 1 OTHERS = 2.

CALL FUNCTION 'Z_BC_TEST_QRFC' IN BACKGROUND TASK AS SEPARATE UNIT DESTINATION rfcdest EXPORTING iv_wait = p_sec EXCEPTIONS communication_failure = 1 system_failure = 2 resource_failure = 3 OTHERS = 4.

COMMIT WORK. "提交才会写入队列

ENDFORM.*&---------------------------------------------------------------------**& Form FRM_QRFC_OUTBOUND*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM frm_qrfc_outbound .*队列可以先注册, 也可以不注册 CALL FUNCTION 'TRFC_SET_QUEUE_NAME' EXPORTING qname = P_QNAME* NOSEND = ' '* TRFC_IF_SYSFAIL = ' '* CALL_EVENT = ' ' EXCEPTIONS invalid_queue_name = 1 OTHERS = 2. CALL FUNCTION 'Z_BC_TEST_QRFC' IN BACKGROUND TASK AS SEPARATE UNIT DESTINATION rfcdest EXPORTING iv_wait = p_sec EXCEPTIONS communication_failure = 1 system_failure = 2 resource_failure = 3 OTHERS = 4.

COMMIT WORK. "提交才会写入队列

ENDFORM.

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**

SAP 小技巧关于 q RFC 调用 - 封面图
SAP 小技巧关于 q RFC 调用 - 封面图
ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP小技巧关于qRFC调用.md」整理生成,仅用于内部技术分享与学习交流。