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裡