AX2012 : X++ code to update picking list for sales order

Hi Friends,

Use the following code to generate the picking list for a sales order. This will give you the same results when you do Sales Order –> Pick and Pack –> Generate picking list.

static void SalesOrder_UpdatePickingList(Args _args)
    SalesFormLetter_PickingList salesFormLetter;
    SalesTable      salesTable = salesTable::find(\’SO-101292\’);

    salesFormLetter = SalesFormLetter_PickingList::newPickingList();

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.

Post a pick list journal through X++ code

Many times we are required to post a pick list journal through X++ code. Sometimes developers fear about how lengthy the code will be to post a journal but it\’s just a 3 lines code.
The following code can be used to posts a pick list journal.
You should have JournalId which is required to be posted. in this case i have used table object _record which holds journalId

ProdJournalCheckPostBOM prodJournalCheckPostBOM;
ProdJournalCheckPostBOM = ProdJournalCheckPostBOM::newPostJournal(_record.JournalId,false);;