Dynamics AX 2012 R2 AIF自定义服务中的事务回滚Bug
Reinhard在一个Customer Service里的一个Method中,发现一个Transcation RollBack Bug。先看该Method的代码:
[SysEntryPointAttribute(true)] public void SomeMethod() { ttsbegin; createJournalTable; createJournalLine; ttsend; try { //throw error inside postJournalTable throw error('some error message'); } catch { //Could not catch Exception::Error } }
在这个Method中,有一个创建Journal的Transcation,在Transcation外面,有一个 Try Catch Block,用于捕获Exception。
Reinhard发现如果Exception是Error类型的话,Reinhard的Try Catch Block是捕捉不到的。会导致Whole Method RollBack。也就是说,Journal不会被创建。
如果Exception的类型是Error以外的类型,Reinhard的Try Catch Block可能捕捉得到。In this case,Journal 可以被创建。
Reinhard查了很多资料,Some Guy 说,是因为Aif Framework Core Code中,有一个Big Transcation导致的。
在Reinhard的例子里,Reinhard要在Try Catch Block中执行PostJournal操作。Reinhard不是很关心该操作的执行结果——成功,还是失败。但是该操作如果产生Error类型的Exception的话,会导致Whole Method RollBack,Journal也不会被创建。
解决方案是,将可能导致Error的PostJournal的操作剥离出来,放到一个Batch中,定时执行。
学习本是一个不断模仿、练习、创新的过程。对于自己,博文只是总结。在总结的过程发现问题,解决问题。对于他人,在此过程如果还能附带帮助他人,那就再好不过了。 感谢您的阅读。如果文章对您有用,那么请打赏我一杯咖啡,也可以轻轻点个推荐,以资鼓励。
微信打赏
支付宝打赏