Friday, September 9, 2011

AX2012 : The function InventDim::dim2dimParm has been called with an unknown inventory dimension.

Hi Friends,
Recently i started working on my first customization in AX 2012 which was to add a new inventory tracking dimension in the system. I would like to share the following problem which I faced. After doing the basic setup modifications in the system, i was able to see the new dimension in tracking dimensions form, but when i tried to create a sales order , on entering the item itself i was greeting with this following long error message :
"



The function InventDim::dim2dimParm has been called with an unknown inventory dimension.


Microsoft.Dynamics.Ax.Xpp.ErrorException: Exception of type 'Microsoft.Dynamics.Ax.Xpp.ErrorException' was thrown.

at Dynamics.Ax.Application.InventDim.dim2dimParm(Int32 _dimField) in InventDim.dim2dimParm.xpp:line 31

at Dynamics.Ax.Application.InventDim.Clearnotselecteddim(InventDimParm _inventDimParm) in InventDim.clearNotSelectedDim.xpp:line 10

at Dynamics.Ax.Application.CustVendExternalItemDescription.findExternalItemDescription(ModuleCustVend _moduleType, String _itemId, InventDim _inventDim, String _custVendAccountId, String _custVendItemGroupId) in CustVendExternalItemDescription.findExternalItemDescription.xpp:line 31

at Dynamics.Ax.Application.CustVendExternalItemDescription.Findexternaldescription() in CustVendExternalItemDescription.findExternalDescription.xpp:line 34

at Dynamics.Ax.Application.PurchLine.Initfromvendexternalitemdescription(InventDim _inventDim, Boolean ) in PurchLine.initFromVendExternalItemDescription.xpp:line 5

at Dynamics.Ax.Application.PurchLine.Initfromvendexternalitemdescription()

at Dynamics.Ax.Application.PurchLineType.Initfrominventtable(InventTable inventTable) in PurchLineType.initFromInventTable.xpp:line 40

at Dynamics.Ax.Application.PurchLine.initFromInventTableIL(Object[] _inputContract) in PurchLine.initFromInventTableIL.xpp:line 20

at PurchLine::initFromInventTableIL(Object[] )

at Microsoft.Dynamics.Ax.Xpp.ReflectionCallHelper.MakeStaticCall(Type type, String MethodName, Object[] parameters)

at Dynamics.Ax.Application.SysDictTable.invokeStaticMethod(Object[] _params) in SysDictTable.invokeStaticMethod.xpp:line 26

at SysDictTable::invokeStaticMethod(Object[] )

at Microsoft.Dynamics.Ax.Xpp.ReflectionCallHelper.MakeStaticCall(Type type, String MethodName, Object[] parameters)

at Microsoft.Dynamics.Ax.Xpp.PredefinedFunctions.runAsInvoke(String className, String staticMethodName, Object[] parms, Object[]& exportInfolog)"



Wondering what went wrong I put debugger in the method from where the error was originating i.e. InventDim::dim2dimParm, to my surprise debugger was not stopping in the code.

On further troubleshooting, I came to know that some IL code is getting executed because of which the debugger is not stopping in AX client.

As we know that AX2012 there is a powerful capability that X++ code is compiled as IL code.
This IL code resides in the following location "C:\Program Files\Microsoft Dynamics AX\60\Server\MicrosoftDynamicsAX\bin\XppIL\source".
I checked the Xpp file InventDim.Dim2DimParm by opening in Notepad and to my surprise the modifications which i did for new inventory dimension were not in this code.

To update this XPP file , we need to use generate incremental IL tool which can be found under build menu of Ax 2012 work space, there is also a shortcut for this (ctrl + shift + F7).

I generated incremented IL and then checked the XPP file and found that it is updated with the modification.

Now I was able to define item in sales line and system allowed me to proceed ahead.

so the catch was to "Generate incremental IL code" for your modifications before testing them.