SAP RFC

什么是RFC

 RFCSAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是SAPABAP系统。这种远程功能调用也可在同一系统内部进行(如本地SAP系统内的远程调用);但通常情况下,调用程序和被调用程序处于不同系统。

RFC调用过程

     在系统间通信过程中,需区分发送系统和接受系统。RFC调用请求从发送系统(调用系统)中传至接收系统(被调用系统,也称远程系统或目标系统),发送请求的系统在通信过程中又称为RFC客户端,通信另一方则称为RFC服务器。RFC客户端发起远程功能调用以执行RFC服务器提供的功能。

    其中,调用系统和被调用系统均可以是SAP系统和非SAP系统,此外还可以在SAP系统内部将特定应用服务器指定为目标系统。

RFC通信的情况

    根据通信方向和系统类型,共有如下三种RFC通信:

    *两个独立的SAP系统之间的通信;

    *SAPA系统作为调用系统,与外部远程系统(非SAP ABAP系统)通信;

    *外部系统作为调用系统,与SAP系统通信。

 RFC接口系统

    SAP调用远程功能的能力是通过RFC接口系统(RFC interface system)实现的。根据调用方向的不同(SAP系统调用其他模块或其他系统调用SAP模块),RFC接口提供以下两种服务。

1ABAP程序的调用接口

2)非SAP ABAP程序的调用接口。

 RFC通信模式

同步通信和异步通信:同步通信时间上允许误差较小,异步通信时间上允许一定的误差。

同步调用的优缺点:

1)优点:可以及时将数据返还给发送系统;

2)缺点:系统对话时必须保证两个系统处于活动状态,否则对话出现中断,影响业务应用的处理。

异步调用的优缺点:

1)优点:不需要接收系统随时可用,如系统升级、维护等不影响请求发送系统的业务处理;

2)缺点:不适用于要求及时响应的处理过程。

 

RFC版本包含的五种版本?

1、同步RFCsRFC synchronous RFC)是RFC的第一个版本,它要求连接的双方是同步的工作方式,即都是在可用状态才能够实现成功调用。

 2、异步RFCaRFCasynchronous RFC)这种RFC可以实现异步的RFC调用方式,它可以进行多个并发调用,并且不要求被调用系统的可用状态。发出调用系统会一直尝试直到获得被调用系统的应答。它通常用于当你需要提高系统并行调用多个RFC的效率,相对于强制等待程序的结果,它的效率更高。

3、事物RFCtRFCtransactional RFC)是对aRFC进行相关技术改进后的一个RFC版本,其于aRFC相同点是实现异步调用,其优点是可以将多个调用进行LUW分组处理,并只执行一次运行。现在aRFC基本上已经停用。

4、队列RFCqRFCqueue(d) RFC)是tRFC的一个增强版本,它保证了所传输数据的处理次序,并可用于SAP-SAPSAP-non SAP

5、并行RFCpRFCParallel RFC)是一种特殊的RFC,它是aRFC的一种扩展类型。因为它改善了系统的性能,在执行大量的aRFC时。SAP使用它在MRP里面提高速度。但是它只能执行在同一个系统和同一个client里。

五种RFC调用特性对比:

 

执行时间

处理模式

交互对话

状态查询

sRFC

立即执行

同步

支持

不提供

aRFC

立即执行

异步

支持

不提供

tRFC

需等待

异步,一次执行

不支持

提供

qRFC

需等待

异步,一次顺序执行

不支持

提供

pRFC

立即执行

异步

不建议使用

不提供


RFM:

Function-->Attributes-->Processing Type-->□Remote-Enable Module

RFM定义要点:

1)参数声明必须是具体类型(不可以 Type any);

2)参数必须指定为值传递(Pass Value);

3)表类型参数系统隐式进行值传递。

4)对于字符型参数,调用方实参的定义长度应 <=被调用方形参定义长度。

5)异常处理。基于类的异常不能通过远程调用抛回。
    RFC2个预设系统异常,调用系统必须接收:SYSTEM_FAILURE/ COMMUNICATION_FAILURE

 

RFC远程目标维护及调用

首先,输入TCODE   SM59

其次,可以添加一个连接类型,其中包含如下类型

1)类型2( R/2连接),指定R/2系统作为目标系统。

2)类型3(ABAP连接或R/3连接),指定SAP ABAP系统作为目标系统。

3)类型I(内部连接),与当前系统连接到同一数据库的ABAP系统。

4)类型 L(逻辑目标):该条目不指定连接系统,而是参照物理目标生成

Technical Settings.

5Target system:目标系统名称。

6Message server目标系统的消息服务器 T-CODE RZ03 Service 栏中带有”M”字符的为消息服务器。

7Group服务器组 Tcode SMLG 可以查看。

8Target host (目标系统的主机或IP地址) SM51中的HOST name字段。

9System number(目标系统的系统编号),设定Logon/Security选项卡,Trusted system对于类型3的远程目标,可将服务器系统设定为可信任系统,则RFC用户无需对该系统再设定登陆密码,其次,要设定同步或异步的调用方式。

如果同步RFC的调用方式,同步RFC要求远程系统在调用时可用,调用程序的处理暂停,并等待远程function module调用的返回结构后再继续。

语法如下:

CALL FUNCTIOAN rfm_name

       DESTINATION dest

       …..

如果是异步的话,异步RFC也要求RFC服务器系统在调用时可用,被调用的function module将立即启动并运行,区别于同步调用,调用程序不等待远程调用结果,而继续运行,远程功能处理与调用程序的处理过程相分离,功能返回结果可以在后续过程中被接收。

语法如下:

CALL FUNCTION rfm_name

       START NEW TASK taskname

       ….

异步RFC调用时接收结果

CALL FUNCTION rfm_name

       START NEW TASK taskname

       PERFORMING return_form ON END OF TASK

子程序必须存在于程序中

 FORM return_form USING taskname

….

       RECEIVE RESULTS FROM FUNCTION rfm_name

….

ENDFORM

第三,进行异步RFC方式的RFM调用

RFC实际上是异步RFC调用的应用之一,异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持非SAP系统),可以在同一个系统内部使用异步RFC调用,并将部分处理负载转移到其它的应用服务器上,如果不现实指定异步RFC调用的目标,则在同一应用服务器内,也可以通过本地异步RFC调用实现多个工作过程的并行处理。

分组并行处理的语法如下:

CALL FUNCTION rfm_name

 STARTING NEW TASK taskname

       DESTINATION IN GROUP g1

       ….

 EXCEPTION

       RESOURCE_FAILURE = ..

并行处理条件是,逻辑独立的工作单元(logically-independent units of work):并行处理并不适合需要顺序进行的数据处理。各个数据处理过程不能具有依赖关系。

ABAP要求是被调用的功能模块程序中不能包含使用目标back的远程功能调用。

调用程序不能在异步调用之后生成新的内部会话,不能通过 call function starting new task destination in group语句启动外部程序,系统资源要求是为了处理并行作业, sap系统中至少要有三个对话工作过程。调度队列(dispatcher queue)必须低于10%满载,而且至少要有一个空闲对话工作过程用于处理并行作业中的任务,并保留两个空闲的工作过程处理系统登陆及管理任务。

第四,设置事务性RFC

通过事务RFC调用,可以将多个逻辑上相关的远程调用绑定到一个LUW.在该LUW内,所有调用按其调用顺序,在目标系统的相同程序上下文中以单个事务的方式执行,要么执行所有,要么完全回滚。

语法如下:

CALL FUNCTION rfm_name

 IN BACKGROUND TASK

….

或者

CALL FUNCTION rfm_name

 IN BACKGROUND UNIT oref

….

事务RFC 调用不能直接接收或通过 receive results from fucntion来接收rfm的返回结果,模块中不应该指定任何 export类型参数。

### 定义与概述 SAP RFC(Remote Function Call)是一种用于在不同SAP系统或SAP系统与外部系统之间进行远程通信的协议。它允许一个系统调用另一个系统中的函数模块,就像在本地调用一样,为分布式系统间的数据交互和业务流程集成提供了便利的机制。 ### 技术原理 SAP RFC基于客户端 - 服务器模型。客户端系统发起RFC调用请求,将调用信息(如函数名、输入参数等)通过网络发送到服务器系统。服务器系统接收到请求后,查找并执行相应的函数模块,将执行结果返回给客户端。通信过程中,会进行数据的序列化和反序列化,以确保数据在不同系统间的正确传输。例如,在一个跨国企业中,总部的SAP系统作为客户端,调用海外子公司的SAP系统(服务器)中的库存查询函数模块,通过RFC实现数据交互。 ### 使用方法 #### 1. 配置RFC连接 在SAP系统中,需要配置RFC目标,指定目标系统的地址、系统编号、用户名和密码等信息。可以通过事务码SM59进行配置。例如: ```plaintext - 目标名称:Z_RFC_DEST - 类型:T (TCP/IP) - 目标主机:192.168.1.100 - 系统编号:00 - 用户名:RFC_USER - 密码:password ``` #### 2. 创建和调用RFC函数模块 在SAP ABAP开发中,可以创建可远程调用的函数模块。函数模块需要定义输入、输出参数和处理逻辑。以下是一个简单的ABAP代码示例,用于调用RFC函数: ```abap REPORT z_rfc_call_example. DATA: lv_result TYPE i. CALL FUNCTION 'Z_SAMPLE_RFC_FUNC' DESTINATION 'Z_RFC_DEST' EXPORTING iv_input = 10 IMPORTING ev_output = lv_result. WRITE: / 'RFC调用结果:', lv_result. ``` #### 3. 外部系统调用SAP RFC 对于非SAP系统(如Java应用),可以使用SAP提供的Java Connector(JCo)来调用SAP RFC。以下是一个简单的Java代码示例: ```java import com.sap.conn.jco.*; public class SapRfcCallExample { public static void main(String[] args) { try { JCoDestination destination = JCoDestinationManager.getDestination("Z_RFC_DEST"); JCoFunction function = destination.getRepository().getFunction("Z_SAMPLE_RFC_FUNC"); function.getImportParameterList().setValue("IV_INPUT", 10); function.execute(destination); int result = function.getExportParameterList().getInt("EV_OUTPUT"); System.out.println("RFC调用结果: " + result); } catch (JCoException e) { e.printStackTrace(); } } } ``` ### 应用场景 #### 1. 企业系统集成 在企业中,不同部门可能使用不同的SAP系统或其他业务系统。通过RFC可以实现这些系统之间的数据同步和业务流程集成。例如,销售系统调用财务系统的RFC函数进行发票创建和记账操作。 #### 2. 数据传输 在分布式系统中,需要将数据从一个SAP系统传输到另一个系统。RFC可以用于定期或实时的数据传输,如将生产系统中的销售数据传输到数据分析系统进行统计和报表生成。 #### 3. 与外部系统交互 企业的SAP系统可能需要与外部合作伙伴的系统进行交互。通过RFCSAP系统可以调用外部系统的服务,或者向外部系统提供服务。例如,与供应商的库存管理系统进行数据交互,实时获取供应商的库存信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值