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里