队列RFC方式的RFM调用
l 确保事务性RFC调用中的LUW都按照其创建次序执行,需要使用队列RFC创建LUW序列。
l 队列RFC是事务性RFC的增强版本,用于SAP-SAP及SAP-非SAP系统间的连接
l 多个FM发送至目标系统中的三种可能情况(实际的连接过程仍然通过事务性RFC来实现,可以增加入站、出站队列),普通事务性RFC、含出站队列的队列RFC、含出入站队列的队列RFC,出站队列在队列RFC中是必须的
l 出站调度器用于控制其他逻辑目标系统中的LUW执行
l 入站调度器控制本地系统中的队列RFC执行(目标NONE或IN BACKGROUND TASK实现为指定目标RFC)
l 事务SMQS可以配置出战的队列RFC序列
l 事务SMQR可以配置入站的队列RFC序列
l 需要在普通事务性RFC调用之前使用功能模块TRFC_SET_QUEUE_NAME来指明后续的事务性RFC所要插入的出战队列
l 通过FM TRFC_SET_QIN_PROPERTIES来完成,入站队列
本地RFM调用和回调
l 通过DESTNATION附加项的两个特殊目标NONE和BACK,可以进行RFM本地远程调用和回调
l 调用本地系统中的远程功能模块,即调用当前系统内部的RFM
l CALL FUNCTION语句格式决定以远程调用、非远程调用方式运行
l 远程调用:
CALL FUNCTION rfm_name DESTINATION 'NONE' ... CALL FUNCTION ‘RFC_CUSTOMER_GET’ DESTINATION 'NONE' EXPORTING KUNNR = custno TABLES CUSTOMER_T = itab EXCEPTIONS NO_RECORD_FOUND = 01.
l 本地调用:call function 语句没有destination、starting new task、in background task/unit任意出现,不在单独的内存滚动区中运行,若当调用没有指定某些必选exporting参数时,会引起系统异常终止
CALL FUNCTION ‘RFC_CUSTOMER_GET’ EXPORTING KUNNR = CUSTNO TABLES CUSTOMER_T = ITAB EXCEPTIONS NO_RECORD_FOUND = 01. CALL FUNCTION rfm_name DESTINATION SPACE.
远程回调:
l 在服务器执行远程功能时,该服务器可以调用客户中随调用程序载入内存的功能模块,称为回调
l 通过特殊目标BACK可以触发回调机制
CALL FUNCTION rfm_name
DESTINATION ‘BACK’
l 只有同步调用时,才可以在服务器中被调用功能模块中使用BACK功能
各种RFC调用总结:
l 同步RFC调用需要等待RFM返回结果;异步RFC不需要,但需要通过RECEVICE语句在回调子程序中接收结果;事务性RFM不能接收RFM返回值
l 同步异步RFC调用,服务器系统必须在调用时可用;事务性RFC无此限制
l 同步异步RFC调用过程,允许用户与远程系统进行交互对话;事务性RFC不允许
l 同步异步RFC调用过程,参数值将直接传输至支持远程调用的功能模块;事务性RFC,参数值暂时存储在数据库中
l 对于异步RFC,只适用于SAP系统内部或之间的调用,不能通过T类型目标连接至外部系统
l 事务性RFC、队列RFC支持状态查询