Recently we ran into an issue where the "Check Upgrade Readiness" step in upgrading from Dynamics AX 2009 to Dynamics AX 2012 failed with the error/stack below
Error executing code: ReleaseUpdateTransformDB50_UnitOfMeasure (object) has no valid runnable code in method 'initTransformationJobs'.
(S)\Classes\ReleaseUpdateTransformDB50_UnitOfMeasure\initTransformationJobs(C)\Classes\SysCheckListItem_CreateShadowTables\populateScripts - line 20(C)\Classes\SysCheckListItem_CreateShadowTables\main - line 38(C)\Classes\MenuFunction\run(C)\Classes\SysHelp\processMenuFunction - line 85(C)\Classes\SysHelp\processStandardLink - line 26(C)\Classes\SysHelp\processOnEventNavigate - line 40(C)\Classes\SysHelp\onEvent_BeforeNavigate2 - line 27(C)\Classes\FormActiveXControl\onEvent_BeforeNavigate2
Having followed the instruction from the Microsoft Dynamics AX 2012 Upgrade Guide we had imported the UpgradeAX5.xpo from the \DatabaseUpgrade\XPO subfolder on the AX 2012 media.The XPO contains the ReleaseUpdateTransformDB50_UnitOfMeasure class and other simular named classes used by the Upgrade Readiness Check.
In our problem scenario we imported the XPO into an AX 2009 environment where we didn't have the "X++ Source Code" License. Without this License Users are not able to Import Classes configured to Run On the Server and classes with the "RunOn" property set to "server" get imported with their RunOn property set to "called from"
As the (S) in the error message stack indicates the ReleaseUpdateTransformDB50_UnitOfMeasure class was searched for on the server. It wasn't found there as while importing the RunOn property was reverted from "server" to "called from" Resulting in the error.
Importing the UpgradeAX4.xpo in Dynamics AX 4.0 to upgrade to AX 2012 will lead to a similar issue when no X++ Source code License is available
Resolution:-Have a X++ Source Code License when importing the UpgradeAX5.xpo in Dynamics AX 2009 or the UpgradeAX4.xpo in Dynamics AX 4.0
Workaround:-Import the appropriate xpo on a system with X++ license and file copy the .aod file from the that server to the destination server.Note: Make sure you have the all the customizations from the destination server on the server you use for import.