在同一个workprocess里对两张表分别使用online update和update function module update
Created by Jerry Wang, last modified on Jul 22, 2014
有兩張表:
用一個(gè)report測(cè)試,表1是直接online update,表2在update function module里update,由于有了SET UPDATE TASK LOCAL的keyword,使得function module ZINSERT_TABLE2 也在當(dāng)前work process內(nèi)執(zhí)行。
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內(nèi)只是一個(gè)很簡(jiǎn)單的assert語(yǔ)句用于模擬update function module出錯(cuò)的情況:
F8執(zhí)行report,收到期望中的update function module執(zhí)行出錯(cuò)的提示:
但是SE16 里table1里檢查table1 已經(jīng)有一條entry成功插入了:
再來模擬table1 update不成功,但是table2 update成功的scenario. 將update function module改成update table2:
report 仍然保持不變,這樣table1的update會(huì)由于duplicate key而失敗。
report執(zhí)行完之后,table1仍然只有1條數(shù)據(jù),但是table2已經(jīng)insert成功了。
究其原因,在這個(gè)例子里,table1和table2的update并不是放在同一個(gè)SAP LUW里的。這行ABAP OPEN SQL insert 語(yǔ)句(insert ZJERRYTABLE1 FROM ls_jerry1.), 什么時(shí)候會(huì)真正地把數(shù)據(jù)寫到database server里?當(dāng)遇到顯式的database commit( COMMIT WORK ), 或者隱式的database 操作時(shí),表1的操作就會(huì)立即寫到database里,而與表2無(wú)關(guān)。
關(guān)于這兩種不同的database commit方式,可以查看ABAP help:
總結(jié)
以上是生活随笔為你收集整理的在同一个workprocess里对两张表分别使用online update和update function module update的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP ABAP实用技巧介绍系列之利用R
- 下一篇: ABAP Authorization o