在同一个workprocess里对两张表分别使用online update和update function module update
Created by Jerry Wang, last modified on Jul 22, 2014
有兩張表:
 
用一個report測試,表1是直接online update,表2在update function module里update,由于有了SET UPDATE TASK LOCAL的keyword,使得function module ZINSERT_TABLE2 也在當前work process內執行。
data: ls_jerry1 type ZJERRYTABLE1,ls_jerry2 type ZJERRYTABLE2.ls_jerry1-client = sy-mandt. ls_jerry1-inumber = 'i042416'. ls_jerry1-name = 'WANGJER'. insert ZJERRYTABLE1 FROM ls_jerry1.CALL FUNCTION 'ZINSERT_TABLE2' IN UPDATE TASK.SET UPDATE TASK LOCAL.COMMIT WORK AND WAIT.function module內只是一個很簡單的assert語句用于模擬update function module出錯的情況:
 
F8執行report,收到期望中的update function module執行出錯的提示:
 
但是SE16 里table1里檢查table1 已經有一條entry成功插入了:
 
再來模擬table1 update不成功,但是table2 update成功的scenario. 將update function module改成update table2:
report 仍然保持不變,這樣table1的update會由于duplicate key而失敗。
report執行完之后,table1仍然只有1條數據,但是table2已經insert成功了。
 
究其原因,在這個例子里,table1和table2的update并不是放在同一個SAP LUW里的。這行ABAP OPEN SQL insert 語句(insert ZJERRYTABLE1 FROM ls_jerry1.), 什么時候會真正地把數據寫到database server里?當遇到顯式的database commit( COMMIT WORK ), 或者隱式的database 操作時,表1的操作就會立即寫到database里,而與表2無關。
 關于這兩種不同的database commit方式,可以查看ABAP help:
 
總結
以上是生活随笔為你收集整理的在同一个workprocess里对两张表分别使用online update和update function module update的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: SAP ABAP实用技巧介绍系列之利用R
- 下一篇: 苹果 iOS/iPadOS 16.5 开
