SAP 高级应用开发 学习笔记 1 -- RFC

RFC Remote Function Call  远程功能调用, SAP系统之间以及SAP与外部系统之间的通信的基本接口技术

 

RFC过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是SAP ABAP系统

 

SAP 外部接口:

1、程序通信接口

2、文件I/O接口

3、数据接口

 

数据接口:技术实现BDCSAP SQL

 

程序通信接口和文件I/O接口是与其他系统进行数据交换的通路

 

RFC是基于CPI-C实现的。

 

RFC的调用过程:

1.        在系统间通信过程中,需要区分发送系统和接受系统。

2.        RFC调用请求从发送系统中传至接收系统

发送请求的系统在通信过程中称为RFC客户端,通信另一方则称为RFC服务器

1.        RFC客户端发起远程功能调用以执行RFC服务器提供的功能

2.        调用系统和被调用系统均可以使SAP系统或非SAP系统

RFC通信方式:

1.        两个独立的SAP系统之间通信

2.        SAP系统作为调用系统,与外部远程系统(非SAP ABAP系统)通信

3.        外部系统作为调用系统,与SAP系统通信

SAP系统之间,两个ABAP程序通过RFC接口进行通信

1.        系统A调用SAP系统B中的功能模块

2.        B系统中被调用的SAP功能模块必须支持远程调用,该SAP功能模块称为RFM

 

 

 

在于其他语言的程序进行通信时,SAP将为各种语言及相关的操作系统提供RFC库及SAP连接器,以实现RFC接口,如:

  1. 为C 和C++提供的RFC SDK
  2. 为Java 提供的Java连接器 JCo
  3. 为.NET提供的.NET连接器 NCo

SAP调用远程功能的能力是通过RFC接口系统(RFC interface system)实现的。

RFC接口提供以下两种服务:

  1. ABAP程序的调用接口                                                                                                                                            

          CALL FUNCTION . . . DESTINATION, 若远程功能来自SAP ABAP系统,则FM必须是实际的功能模块,并支持RFC远程调用

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

         SAP系统为外部程序提供RFC支持接口和GUI支持接口,这样非SAP系统中,外部程序就能调用并执行SAP RFM,反之亦然

 

 

RFC调用时,RFC接口具体功能包括:

  1. 登录并推出远程系统,并进行权限检查
  2. 调用并管理远程系统会话所需的通信进程
  3. 自动将实参转换成远程系统所需的格式,RFC接口支持所有ABAP数据类型
  4. 处理通信过程中的错误
  5. 负责远程调试的实现

RFC通信模式:

  1. 同步通信,双方时钟允许误差较小,一次性功能调用
  2. 异步通信,双方时钟允许存在一定误差
  3. 差异在于调用系统是否需要立即接收返回结果

SAP系统中的RFC过程扩展下述几种不同模式:

  1. 同步RFC
  2. 异步RFC
  3. 事务性RFC,广义上也属于异步通信模式
  4. 队列RFC,对事务性RFC功能的进一步扩展
  5. 并行RFC,实际上是异步RFC

支持远程调用的功能模块 RFM:

  1. 在创建RFM功能模块时,需要在指定属性中的processing type选项设定为remote-enabled module
  2. 声明参数时,不能在运行时确定参数类型,必须在参数定义时,参照数据字典类型进行声明。
  3. 必须指定为值传(pass value),对于表类型参数,系统也隐式进行值传递
  4. 格式转换,若传入参数的长度较短,RFC将在后面补充空格,意味着,对于字符类型数据,长度可以不必完全一致但是调用方实参不应大于被调用方形参的定义的长度。    
  5. 异常处理,可在远程功能中进行异常的抛出,在程序中的异常出现之处通过raise语句实现,但是基于ABAP类的异常不能从远程功能  调用过程中抛会给调用系统,因此需要避免使用
  6. RFC接口预设的系统异常类型:

          SYSTEM_FAILURE,报告远程系统中的所有失败和系统问题         

          COMMUNICATION_FAILURE,若不能建立或通信中连接中断,抛出异常

         系统将自动地抛出以上2种异常,不必再程序代码总进行显示处理,调用RFC功能时必须接收,否则出现异常时可能引起系统运行时SHORT DUMP中断,所有其他不可知类型的异常指定为OTHERS类型。

 

调用SAP标准RFM

  1. 功能模块的调用通过Call Function语句实现,远程功能调用,可通过在Call Function语句中添加Destination子句完成
  2. Destination后面接的是远程目标名称,该目标在SM59中设定。
  3. 可以在远程调用时直接指定当前系统的应用服务器作为RFC目标,格式为<hostname>_<sysid>_<sysnr>,<hostname>为主机名,<sysid>为SAP系统名,<sysnr>为系统编号。
  4. 通过SM51查看当前SAP系统中活动的应用服务器

例:调用SAP 标准RFM:SXPG_COMMAND_EXECUTE,通过RFC调用时可以运行本地或其他SAP系统中的外部命令

*&---------------------------------------------------------------------* *& Report ZTEST_001_16 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ztest_001_16. DATA: gt_protocol TYPE btcxpm OCCURS 0 WITH HEADER LINE, l_reason TYPE string. CALL FUNCTION 'SXPG_COMMAND_EXECUTE' * DESTINATION 'sapr3gse_GSE_10' DESTINATION 'KFED1_KF1_00' EXPORTING commandname = 'Z_GET_DIR' additional_parameters = '-a' * OPERATINGSYSTEM = SY-OPSYS * TARGETSYSTEM = SY-HOST * DESTINATION = * STDOUT = 'X' * STDERR = 'X' * TERMINATIONWAIT = 'X' * TRACE = TABLES exec_protocol = gt_protocol EXCEPTIONS no_permission = 1 command_not_found = 2 parameters_too_long = 3 security_risk = 4 wrong_check_call_interface = 5 program_start_error = 6 program_termination_error = 7 x_error = 8 parameter_expected = 9 too_many_parameters = 10 illegal_command = 11 wrong_asynchronous_parameters = 12 cant_enq_tbtco_entry = 13 jobcount_generation_error = 14 OTHERS = 15. CASE sy-subrc. WHEN 1. l_reason = 'no_permission'. WHEN 2. l_reason = 'command_not_found'. WHEN 3. l_reason = 'parameters_too_long'. WHEN 4. l_reason = 'security_risk'. WHEN 5. l_reason = 'wrong_check_call_interface'. WHEN 6. l_reason = 'program_start_error'. WHEN 7. l_reason = 'program_termination_error'. WHEN 8. l_reason = 'x_error'. WHEN 9. l_reason = 'parameter_expected'. WHEN 10. l_reason = 'too_many_parameters'. WHEN 11. l_reason = 'illegal_command'. WHEN 12. l_reason = 'wrong_asynchronous_parameters'. WHEN 13. l_reason = 'cant_enq_tbtco_entry'. WHEN 14. l_reason = 'jobcount_generation_error'. WHEN 15. l_reason = 'other_error'. ENDCASE. IF NOT l_reason IS INITIAL. MESSAGE e016(rp) WITH 'Error' l_reason. ELSE. LOOP AT gt_protocol. WRITE: gt_protocol. ENDLOOP. ENDIF.

 

本例子中:

  1. 远程目标是直接根据应用服务器名称指定的,并没有通过SM59进行定义,因为远程目标是同一SAP系统的其他应用服务器,若远程目标是其他SAP系统,则必须在SM59中进行定义。
  2. 程序所执行的外部命令Z-GET-DIR的功能,是查看一个特定应用服务器中的目录列表在SM69中设定

SAP 高级应用开发 学习笔记 1 -- RFC_第1张图片

SAP 高级应用开发 学习笔记 1 -- RFC_第2张图片

 

你可能感兴趣的:(应用服务器,command,SAP,Parameters,asynchronous,generation)