Created by Jerry Wang, last modified on Jun 13, 2014
假设有数据库表ZUPDATE_TEST1和ZUPDATE_TEST2 需要同时update,理论上有下列几种方式.
本文模拟了表2 执行update的上下文如果有fatal exception发生的情况( 通过在update 表2的function module里人为加上ASSERT 1 = 0 的语句),目的是检查表1和表2的更新是否真正persist到数据库里。
1. 表1在normal的work process里进行update,表2通过update function module进行update
REPORT ZUPDATE_NORMAL_AND_UPDATE. PARAMETERS: index type int4 OBLIGATORY. data: ls_data type zupdate_test2. ls_data-myindex = index. ls_data-text = 'test' && index. insert ZUPDATE_TEST1 FROM ls_Data. WRITE: / 'result: ', sy-subrc. CALL FUNCTION 'ZUPDATE_TEST2' IN UPDATE TASK EXPORTING index = index. COMMIT WORK AND WAIT. FUNCTION ZUPDATE_TEST2. data: ls_data type zupdate_test2. ls_data-myindex = index. ls_data-text = 'test' && index. insert ZUPDATE_TEST2 FROM ls_Data. ASSERT 1 = 0. ENDFUNCTION.
结果: 表1成功更新,表2更新失败( 对应的entry未插入到数据库里)
2. 表1和表2分别在不同的两个update function module里更新,表2更新的update function module里有fatal exception发生.
REPORT ZUPDATE_TWO_UPDATE_CALL. PARAMETERS: index type int4 OBLIGATORY. CALL FUNCTION 'ZUPDATE_TEST1' IN UPDATE TASK EXPORTING index = index. CALL FUNCTION 'ZUPDATE_TEST2' IN UPDATE TASK EXPORTING index = index. COMMIT WORK AND WAIT.
结果: 表1和表2均未更新。
结果: 表1和表2均未更新。 3. 表1和表3的更新放在同一个update function module里