|
26.09.2014, 13:45 | #1 |
Участник
|
странные CIL ошибки при апгрейде
Делаю апгрейд с Ax2009 на Ax2012R3
В Data Upgrade checklist в пункте Presynchronize (upgrade) на трети тасков посыпались ошибки: ошибки примерно такие: X++: System.NullReferenceException: Object reference not set to an instance of an object. at Dynamics.Ax.Application.SysDictClass.invokeObjectMethod(XppObjectBase _object, String _methodName, Boolean _tryBaseClass, Boolean ) in SysDictClass.invokeObjectMethod.xpp:line 18 at Dynamics.Ax.Application.ReleaseUpdateDB.Run(String methodName, sysReleasedVersion scriptVersion, Boolean force) in ReleaseUpdateDB.run.xpp:line 52 at Dynamics.Ax.Application.ReleaseUpdateExecute.Run() in ReleaseUpdateExecute.run.xpp:line 37 at Dynamics.Ax.Application.BatchRun.runJobStaticCode(Int64 batchId) in BatchRun.runJobStaticCode.xpp:line 54 at Dynamics.Ax.Application.BatchRun.runJobStatic(Int64 batchId) in BatchRun.runJobStatic.xpp:line 13 at BatchRun::runJobStatic(Object[] ) at Microsoft.Dynamics.Ax.Xpp.ReflectionCallHelper.MakeStaticCall(Type type, String MethodName, Object[] parameters) at BatchIL.taskThreadEntry(Object threadArg) X++: System.NullReferenceException: Object reference not set to an instance of an object. at Dynamics.Ax.Application.ReleaseUpdateDB.indexAllowDup(DictIndex _dictIndex) in ReleaseUpdateDB.indexAllowDup.xpp:line 12 allowDupRCashParametersKeyIdx выдал ошибку allowDupRCashTransAccDocTypeIdx отработал X++: public void allowDupRCashParametersKeyIdx() { ReleaseUpdateDB::indexAllowDup(new DictIndex(tableNum(RCashParameters), indexNum(RCashParameters, KeyIdx))); } X++: public void allowDupRCashTransAccDocTypeIdx() { ReleaseUpdateDB::indexAllowDup(new DictIndex(tableNum(RCashTrans), indexNum(RCashTrans, AccDocTypeIdx))); } ошибка на System.NullReferenceException: Object reference not set to an instance of an object. at Dynamics.Ax.Application.ReleaseUpdateDB.indexAllowDup(DictIndex _dictIndex) in ReleaseUpdateDB.indexAllowDup.xpp:line 12 X++: static void indexAllowDup(DictIndex _dictIndex) { DictTable dictTable = new DictTable(_dictIndex.tableid()); //это 12я строка, она без условия ; создается он выше указанных методах одинаково new DictIndex(tableNum(<таблица>), indexNum(<таблица>, <индекс>)) почему он мог в одном случае не создаться при вызове new (и при этом не дать ошибки на new) - я не понимаю если содержимое этих же скриптов запускаю через джоб - отрабатывает все нормально, т.е. при запуске из X++ работает, а при CIL (это, как я понимаю, именно он судя по стеку ошибки) - нет вопрос 1) в чем может быть проблема, в какую сторону смотреть? 2) можно ли форсированно эти (и следующие, во избежание проблем) апгрейд-джобы запускать толкьо как X++ код, без CIL ? |
|
26.09.2014, 14:31 | #2 |
Участник
|
Попробовать перекомпилировать все, перегенерировать IL, посмотреть нет ли ошибок на этих этапах или предупреждений.
|
|
|
|