ABAP RFC远程调用

RFC  可以在SAP系统之间、SAP系统与非SAP系统之间进行远程调用,且调用是双向的(SAP系统可以调用非SAP系统、非SAP系统也可以调用SAP系统——如Java通过Jco连接器来访问SAP)

RFM限制

RFM:支持远程调用的功能模块。即SAP系统中的函数可以被其他SAP或非SAP系统调用。

 

ABAP调用RFM

call function  rfm_name  destination  test 。

destination附加项后面接的是远程目标名称,该事务在SM59中设定,其中包含连接和登陆远程目标系统

所需的全部参数信息。如果调用的就是本机的RFC目标,则destination可以使用<主机名>_<系统标识>_<实例编号>来指定,可以通过SM51查看当前SAP系统中活动的应用服务器。

sm51

biaoshi

DATA: gt_protocol TYPE btcxpm OCCURS 0 WITH HEADER LINE,
      l_reason TYPE string.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
DESTINATION 'SAPECC6_ECC_00'
EXPORTING
    commandname                 = 'ZDIR'"宽屏显示服务器上D:盘目录的内容
    additional_parameters      
= 'd:\ /w'"额外参数
*   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.
IF sy-subrc = 0.
LOOP AT gt_protocol.
WRITE: / gt_protocol.
ENDLOOP.
ENDIF.

程序说明:SXPG_COMMAND_EXECUTE为SAP系统提供的标准预定义RFM,用来执行服务器上的操作命令。

本例中的DESTINATION 参数指定的服务器名,并没有通过SM59进行定义,因为远程目标系统为同一SAP系统中的其他服务器,因此可以直接指定。如果远程目标系统为其他的SAP 系统,则必须要通过SM59进行定义。

 

远程目标系统维护SM59

sm59

上节调用FRM示例中,直接指定了当前SAP系统内部的应用服务器作为远程目标,标准的做法是:现在FRC客户端(SAP主调方)系统中定义作为远程目标的RFC服务器,然后在ABAP调用时指定该远程系统,此时的远程系统可以是系统内部的应用服务器,其他SAP系统,非SAP系统等。

这些配置信息都保存在FRCDES表中,

 

RFC不同的调用模式

call  funtion 中的destination 可以是文字也可以是变量,其值为SAP系统中已知的远程目标系统,除去SM59中手工定义的目标外,如果远程目标系统就是当前系统的SAP应用服务器,也可以直接指定应用服务器的名称,即SM59中的I类型目标。

同步调用RFC

远程调用,通信双方的系统必须均可用,主调程序等待远程功能处理结束并返回结果。

对于表类型的参数,在本地普通功能调用中默认就是为引用传递(实质为传递字段符号),单RFC不支持引用传递机制,所以也将默认进行隐式的值传递调用,另外,只传递表本身,不会传递表头。

同步远程对话处理

对于同步RFC和异步RFC,可以存在对话过程,如call screen、call  transaction、或列表处理等,但是要注意的是,以后台模式调用有对话程序的RFM,将导致程序中断,会引发系统异常SYSTEM_FAILURE。

如果远程RFM处理时出现交互对话过程,将在当前调用程序的会话中先进行远程对话处理,处理结束之后再继续调用程序。

screen

异步调用RFC

主调用程序的执行并不依赖于RFC服务器系统的可用性,被调用的远程功能启动后,调用程序继续运行,远程功能和调用程序处理相互分离,远程功能的结果可以稍后接受:

 

 

 

 

 

 

posted @ 2017-05-27 14:08  赵瑞朋  Views(2138)  Comments(0)    收藏  举报