背景:之前APS项目需要获取SAP MRP数据,在做MRP取数优化时有用到arfc,我们公司体量不大,就一个R/3系统,平时的开发需求中需要处理的数据量也都不大,像是arfc、qfc、trfc这些基本都不太用的到,所以一直也没怎么研究过,正好最近比较闲,就学习下不同RFC的用法。
前段时间公司做了BPC项目,搭了个BW的服务器,正好用来做远程调用测试,实际上BW抽取ECC的标准数据源时也是通过远程调用RFC实现的
远程调用的链接配置事务码SM59,配置链接地址及调用账号密码
destination调用预定义了三个调用方式
SPACE:本地调用function module
NONE:也是调用本地的function module,但是调用请求是模拟远程调用的方式,通常用于只有一个系统的远程调用测试
BACK:system A调用system B时,system B中被调用的FM可以调用system A中的FM
远程调用时记得对异常system_failure和communication_failure进行捕获
调用测试:
BW中的function module
FUNCTION ZRFC_DESTINATION_TEST.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
CALL FUNCTION 'ZRFC_DESTINATION_TEST_ECC' DESTINATION 'DEV600'
IMPORTING
ev_message = ev_message
EXCEPTIONS
system_failure = 1
communication_failure = 2
OTHERS = 3.
ENDFUNCTION.
FUNCTION ZRFC_DESTINATION_TEST_BW.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
ev_message = 'BW FM调用成功'.
ENDFUNCTION.
ECC中的function module
FUNCTION zrfc_destination_test_ecc .
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
DATA:lv_return_bw TYPE string.
ev_message = 'DEV600调用成功'.
CALL FUNCTION 'ZRFC_DESTINATION_TEST_BW' DESTINATION 'BACK'
IMPORTING
ev_message = lv_return_bw
EXCEPTIONS
system_failure = 1
communication_failure = 2
OTHERS = 3.
ev_message = ev_message && '/' && lv_return_bw.
ENDFUNCTION.