Monday, December 26, 2016

Inventory Dimension enable /disable based upon item selected in AX 2012

1.       Add below declaration in your class declaration of form

         public class FormRun extends ObjectRun
        {
          InventDimCtrl_Frm       inventDimFormSetup;
        }
2.       Add below piece in form’s Init method :
public void init()
{
    element.updateDesign(InventDimFormDesignUpdate::Init);
}


3.       Add below method :
InventDimCtrl_Frm inventDimSetupObject()
{
    return inventDimFormSetup;
}

4.   Add below method :
void updateDesign(InventDimFormDesignUpdate mode)
{
    inventDimParm   inventDimParmVisible;
    inventDimParm   inventDimParmEnabled;

    switch (mode)
    {
        case InventDimFormDesignUpdate::Init          :
        case InventDimFormDesignUpdate::LinkActive    :
            if (!inventDimFormSetup)
            {
                inventDimFormSetup  = InventDimCtrl::newFromForm(element);
            }
            inventDimFormSetup.parmSkipOnHandLookUp(true);

            if (element.args().dataset() == tableNum(datasource))
            {
                inventDimParmVisible = EcoResProductDimGroupSetup::newItemId(Item_Adjustment.ItemId).inventDimParmActiveDimensions();
            }
            else
            {
                inventDimParmVisible.initProductDimensionsAllGroups();
            }
            inventDimFormSetup.parmDimParmVisibleGrid(inventDimParmVisible);
            break;

        case InventDimFormDesignUpdate::Active        :
            inventDimFormSetup.formActiveSetup();
            inventDimParmEnabled = EcoResProductDimGroupSetup::newItemId(datasource.ItemId).inventDimParmActiveDimensions();
            inventDimParmEnabled.InventLocationIdFlag = true;
            inventDimFormSetup.parmDimParmEnabled(inventDimParmEnabled);
            inventDimFormSetup.formSetControls(true);
            //inventDimFormSetup.

            break;

        case InventDimFormDesignUpdate::FieldChange   :
            inventDimFormSetup.formActiveSetup();
            inventDimParmEnabled = EcoResProductDimGroupSetup::newItemId(datasource.ItemId).inventDimParmActiveDimensions();
            inventDimFormSetup.parmDimParmEnabled(inventDimParmEnabled);
            //inventDimFormSetup.
            inventDimFormSetup.formSetControls(true);
            break;

        default :
            throw error(strfmt("@SYS54195",funcname()));
    }
}


5.       Add below lines in Active method of DS :
public int active()
{
    int ret;
    ret = super();
    element.updateDesign(InventDimFormDesignUpdate::Active);
   
    return ret;
}

6      Add below line in ItemId’s modified method :
element.updateDesign(InventDimFormDesignUpdate::FieldChange);


Well you are ready to go :
 PS : You want to enable\ disable one particular  Dimension field irrespective  of Item selected , how to do : 
Simple put the corresponding flag true or false as
inventDimParmEnabled.InventLocationIdFlag = true;

No comments:

Post a Comment