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

来源:互联网 发布:js 0除以0 nan 编辑:程序博客网 时间:2024/06/07 16:28

 

事务性RFC方式的RFM调用

l        同步、异步RFC过程中,每一个RFC调用在远程系统中构成一个独立的LUW

l        事务性RFC调用,可以将多个逻辑上相关的远程调用绑定至同一个LUW,在该LUW内,按顺序调用,要么执行所有数据库操作,要么完全回滚来取消全部数据库更新操作,保证RFC调用过程的完整性和数据一致性

l        事务性RFC调用处理保证在程序到达COMMIT WORK语句时执行所有计划的更新,并保证事务性RFC调用仅运行一次

l        该调用具有安全、可靠的特点

                  

   其中oref必须引用一个接口IF_BGRFC_UNIT实现类的对象

l        在相邻两个COMMIT WORK之间出现的所有相同目标的异步调用都属于同一个LUW

l        事务性RFC不需要等待每个单独的更新过程完成,调用程序就可以立即继续进行,知道事务结束

l        若调用发送时,远程系统不可用,调用将设为后台作业运行,不能从调用模块接收返回结果,不允许调用者进行与远程系统的交互性对话及测试

 

调用参数

l        不能直接或通过RECEIVE RESULTS FROM FUNCTION语句接收RFM的返回结果FM的接口不应指定任何EXPORT类型参数,在CALL FUNCTION语句中的IMPORTING参数将导致编译错误

l        事务性运行的功能模块中不适合进行回调调用远程目标BACK

l        事务性RFC调用示例

 

l        直到COMMIT WORK 语句才开始于远程系统进行联系

l        TRAVEL_BOOK_REMOTE是一个适合进行事务性RFC调用的RFM,只进行远程系统中的数据库更新,不需要返回任何数据

 

事务ID

l        每一个事务性RFC调用均通过一个独特的事物IDTransactional IDTID

l        TID存在于数据库表ARFCSSTATEARFCSDATAARFCSSTATE记录LUW执行状态,ARFCSDATA包含事务性RFC调用的输入数据

l        作业执行过程中,从事务性RFC表中读取相关数据,与相应的事务性RFC进行通信,远程LUW成功执行,则相应的条目在表中删除,因此,若LUW运行成功,则无法重新执行因而保证了仅仅执行一次

l        COMMIT WORK同时触发了本地更新操作,则事务性RFC调用在本地更新成功完成之后才开始运行

 

设定作业开始时间

l        如果希望在特定时间启动LUW,可以通过功能模块START_OF_BACKGROUPTASK设置作业开始的时间,必须在LUW内部调用该功能模块,必须在第一个CALL…IN BACKGROUNDTASK语句之后和COMMIT WORK语句之前调用该功能模块

l        对于某个调用需要创建独立的事务,不参与其他目标的事务性RFC调用作何至一个LUW,可以通过AS SEPARATE UNTIAL附加项实现

l        各个LUW处理都是独立进行的,执行次序无法被保证

 

出错处理机制

l        发生错误,事务性RFC调用将启动重试机制或者回滚

l        通过COMMIT WORK执行远程调用时,不能建立到目标系统的连接,将在ARFCSSTATE表中记录当前状态,系统通过报表RSARFCSE根据当前的TID重新计划后台作业,准备进行下一次调用。

l        默认时间间隔15分钟,尝试至30为止

l        Tools-Administraion-Administraion-Network-RFCdestinations-Destination-TRFC options进行尝试次数、时间间隔设定

l        若经过最大尝试次数,系统仍然无法连接,系统将停止调用报表RSARFCSE,将ARFCSDATA状态更新为CPICERR,默认8天,将表中的响应条目删除SM59可以手动启动该条目

l        执行出错,A类型的消息或者RAISE语句抛出异常,则ARFCSSTATE表将记录出错状态,整个RFC中的操作将取消SM58查看该错误,修改错误后,通过SM58重新启动出错的RFM

l        RFM中,功能模块RESTART_OF_BACKGROUNDTASK启动重试功能

 

检查事务性RFC调用状态:

每个LUW都用过唯一的TID进行标识,两种方法检查TID状态:

l        ABAP程序:在CALL… IN BACKGROUND TASK之后和COMMIT WORK之前调用FMID_OF_BACKGROUNDTASK”,获得TID后,用FMSTATUS_OF_BACKGROUNDTASK”确定事务性RFC的状态

    

l        联机确认:通过SM58显示并维护事务性RFCLUW状态