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系统中活动的应用服务器。
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
上节调用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处理时出现交互对话过程,将在当前调用程序的会话中先进行远程对话处理,处理结束之后再继续调用程序。
异步调用RFC
主调用程序的执行并不依赖于RFC服务器系统的可用性,被调用的远程功能启动后,调用程序继续运行,远程功能和调用程序处理相互分离,远程功能的结果可以稍后接受:





浙公网安备 33010602011771号