关于CacheLookup一个有趣的问题
今天寫(xiě)一個(gè)與其他系統(tǒng)進(jìn)行物料同步的接口,通過(guò)COM Business Connector調(diào)用Axapta3.0的方法將數(shù)據(jù)插入到物料表中,中間發(fā)生異常,事務(wù)回滾,再次調(diào)用的時(shí)候提示剛剛發(fā)生異常的物料已經(jīng)存在了,但是查看InventTable表卻又看不到這條記錄,用select查詢卻可以查詢到這條記錄。
應(yīng)該是物料緩存導(dǎo)致的,重啟AOS異常消失。
InventTable表的CacheLookup屬性為Found,只要在數(shù)據(jù)庫(kù)中查詢到的記錄就緩存到AOS中,下次查詢只要AOS中存在就不再查詢數(shù)據(jù)庫(kù),這個(gè)邏輯很清晰,但是遇到事物回滾就比較麻煩,類似于下列代碼:
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; }?第一次運(yùn)行查詢inventTableCheck時(shí),數(shù)據(jù)庫(kù)里沒(méi)有CacheLookupTest記錄,所以正常插入,然后inventTableSelect查詢,按照Found的邏輯,現(xiàn)在已經(jīng)有這個(gè)物料了那么理應(yīng)緩存到AOS中,但是由于接下來(lái)是ttsabort將事物回滾而不是提交,執(zhí)行完以后數(shù)據(jù)庫(kù)是里是不會(huì)出現(xiàn)CacheLookupTest這個(gè)物料的,那么AOS里的緩存是有那還是沒(méi)有?
測(cè)試的答案是Axapta3.0在這種情況下會(huì)緩存這個(gè)物料,AX2009不會(huì)緩存這個(gè)物料,顯然AX2009的邏輯是正常的。
由于Axapta3.0版本眾多,不確定具體哪個(gè)版本會(huì)有這個(gè)問(wèn)題,也或者只有我這個(gè)環(huán)境有這個(gè)問(wèn)題,總歸是個(gè)好玩的東西,記錄下來(lái)備查。
轉(zhuǎn)載于:https://www.cnblogs.com/Farseer1215/p/3917989.html
總結(jié)
以上是生活随笔為你收集整理的关于CacheLookup一个有趣的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cocos2d-html5 简易 下拉表
- 下一篇: 用矩阵乘法优化递推