关于CacheLookup一个有趣的问题
今天寫一個與其他系統進行物料同步的接口,通過COM Business Connector調用Axapta3.0的方法將數據插入到物料表中,中間發生異常,事務回滾,再次調用的時候提示剛剛發生異常的物料已經存在了,但是查看InventTable表卻又看不到這條記錄,用select查詢卻可以查詢到這條記錄。
應該是物料緩存導致的,重啟AOS異常消失。
InventTable表的CacheLookup屬性為Found,只要在數據庫中查詢到的記錄就緩存到AOS中,下次查詢只要AOS中存在就不再查詢數據庫,這個邏輯很清晰,但是遇到事物回滾就比較麻煩,類似于下列代碼:
static void CacheLookupTest(Args _args) {InventTable inventTable,inventTableCheck,inventTableSelect;;ttsbegin;inventTableCheck = InventTable::find("CacheLookupTest");if(!inventTableCheck.RecId){inventTable.ItemId = "CacheLookupTest";inventTable.insert();}inventTableSelect = InventTable::find("CacheLookupTest");ttsabort; }?第一次運行查詢inventTableCheck時,數據庫里沒有CacheLookupTest記錄,所以正常插入,然后inventTableSelect查詢,按照Found的邏輯,現在已經有這個物料了那么理應緩存到AOS中,但是由于接下來是ttsabort將事物回滾而不是提交,執行完以后數據庫是里是不會出現CacheLookupTest這個物料的,那么AOS里的緩存是有那還是沒有?
測試的答案是Axapta3.0在這種情況下會緩存這個物料,AX2009不會緩存這個物料,顯然AX2009的邏輯是正常的。
由于Axapta3.0版本眾多,不確定具體哪個版本會有這個問題,也或者只有我這個環境有這個問題,總歸是個好玩的東西,記錄下來備查。
轉載于:https://www.cnblogs.com/Farseer1215/p/3917989.html
總結
以上是生活随笔為你收集整理的关于CacheLookup一个有趣的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-html5 简易 下拉表
- 下一篇: 用矩阵乘法优化递推