How to make Financial Dimensions Mandatory through X++ code

Create a new class and create the methods -> Pre- or post evnet handler method and write the following code.


After this go to the table -> methods-> validatewrite ->  New event handler subscription
In my scenario, custinvoiceline is the table


public static void FreeTxtValidateWrite(XppPrePostArgs _args)
{
    DimensionAttribute                  dimAttrDept,dimAttrClient,dimAttrDivision,dimAttrEmp,dimAttrIssue,dimAttrMaster,dimAttrMedia,dimAttrProduct,dimAttrProject;
    DimensionAttributeValue             dimAttrValueDept,dimAttrValueClient,dimAttrValueDivision,dimAttrValueEmp,dimAttrValueIssue,dimAttrValueMaster,dimAttrValueMedia,
                                        dimAttrValueProduct,dimAttrValueProject;
    DimensionAttributeValueSetItem      dimAttrValueSetItemDept,dimAttrValueSetItemClient,dimAttrValueSetItemDivision,dimAttrValueSetItemEmp,dimAttrValueSetItemIssue,
                                        dimAttrValueSetItemMaster,dimAttrValueSetItemMedia,dimAttrValueSetItemProduct,dimAttrValueSetItemProject;
    CustInvoiceLine                     custInvoiceLine;
    RefRecId                            defaultDimension;
    SalesParameters                     salesParameters;
    int                                 i = 0;
    boolean                             ret;
    ;


    select firstOnly EU001Client,EU001Department,EU001Division,EU001Employee,EU001Issue,EU001MasterClient,EU001Media,EU001Product,EU001Project from salesParameters;
    custInvoiceLine     = _args.getThis();
    //ret                 = _args.getReturnValue();

    defaultDimension    =   custInvoiceLine.DefaultDimension;

    if (salesParameters.EU001Client == NoYes::Yes)
    {
        dimAttrClient         =   DimensionAttribute::findByName('Client');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemClient
            where dimAttrValueSetItemClient.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueClient
                where dimAttrValueClient.RecId == dimAttrValueSetItemClient.DimensionAttributeValue
                    && dimAttrValueClient.DimensionAttribute == dimAttrClient.RecId
                    && dimAttrValueClient.IsDeleted == false;
        if (!dimAttrValueSetItemClient.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Client is required for this line.");
        }
    }

    if (salesParameters.EU001Department == NoYes::Yes)
    {

        dimAttrDept         =   DimensionAttribute::findByName('Department');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemDept
            where dimAttrValueSetItemDept.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueDept
                where dimAttrValueDept.RecId == dimAttrValueSetItemDept.DimensionAttributeValue
                    && dimAttrValueDept.DimensionAttribute == dimAttrDept.RecId
                    && dimAttrValueDept.IsDeleted == false;
        if (!dimAttrValueSetItemDept.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Department is required for this line.");
        }
    }

    if (salesParameters.EU001Division == NoYes::Yes)
    {

        dimAttrDivision         =   DimensionAttribute::findByName('Division');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemDivision
            where dimAttrValueSetItemDivision.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueDivision
                where dimAttrValueDivision.RecId == dimAttrValueSetItemDivision.DimensionAttributeValue
                    && dimAttrValueDivision.DimensionAttribute == dimAttrDivision.RecId
                    && dimAttrValueDivision.IsDeleted == false;
        if (!dimAttrValueSetItemDivision.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Division is required for this line.");
        }
    }

    if (salesParameters.EU001Employee == NoYes::Yes)
    {
        dimAttrEmp         =   DimensionAttribute::findByName('Employee');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemEmp
            where dimAttrValueSetItemEmp.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueEmp
                where dimAttrValueEmp.RecId == dimAttrValueSetItemEmp.DimensionAttributeValue
                    && dimAttrValueEmp.DimensionAttribute == dimAttrEmp.RecId
                    && dimAttrValueEmp.IsDeleted == false;
        if (!dimAttrValueSetItemEmp.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Employee is required for this line.");
        }
    }

    if (salesParameters.EU001Issue == NoYes::Yes)
    {
        dimAttrIssue         =   DimensionAttribute::findByName('Issue');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemIssue
            where dimAttrValueSetItemIssue.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueIssue
                where dimAttrValueIssue.RecId == dimAttrValueSetItemIssue.DimensionAttributeValue
                    && dimAttrValueIssue.DimensionAttribute == dimAttrIssue.RecId
                    && dimAttrValueIssue.IsDeleted == false;
        if (!dimAttrValueSetItemIssue.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Issue is required for this line.");
        }
    }

    if (salesParameters.EU001MasterClient == NoYes::Yes)
    {
        dimAttrMaster         =   DimensionAttribute::findByName('MasterClient');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemMaster
            where dimAttrValueSetItemMaster.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueMaster
                where dimAttrValueMaster.RecId == dimAttrValueSetItemMaster.DimensionAttributeValue
                    && dimAttrValueMaster.DimensionAttribute == dimAttrMaster.RecId
                    && dimAttrValueMaster.IsDeleted == false;
        if (!dimAttrValueSetItemMaster.DisplayValue)
        {
            //ret     = checkFailed("MasterClient must be specified.");
            i++;
            ret     = checkFailed("Dimension MasterClient is required for this line.");
        }
    }


    if (salesParameters.EU001Media == NoYes::Yes)
    {
        dimAttrMedia         =   DimensionAttribute::findByName('Media');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemMedia
            where dimAttrValueSetItemMedia.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueMedia
                where dimAttrValueMedia.RecId == dimAttrValueSetItemMedia.DimensionAttributeValue
                    && dimAttrValueMedia.DimensionAttribute == dimAttrMedia.RecId
                    && dimAttrValueMedia.IsDeleted == false;
        if (!dimAttrValueSetItemMedia.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Media is required for this line.");
        }
    }



    if (salesParameters.EU001Product == NoYes::Yes)
    {
        dimAttrProduct         =   DimensionAttribute::findByName('Product');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemProduct
            where dimAttrValueSetItemProduct.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueProduct
                where dimAttrValueProduct.RecId == dimAttrValueSetItemProduct.DimensionAttributeValue
                    && dimAttrValueProduct.DimensionAttribute == dimAttrProduct.RecId
                    && dimAttrValueProduct.IsDeleted == false;
        if (!dimAttrValueSetItemProduct.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Product is required for this line.");
        }
    }


    if (salesParameters.EU001Project == NoYes::Yes)
    {
        dimAttrProject         =   DimensionAttribute::findByName('Project');

        select firstonly RecId, DisplayValue from dimAttrValueSetItemProject
            where dimAttrValueSetItemProject.DimensionAttributeValueSet == defaultDimension
            join dimAttrValueProject
                where dimAttrValueProject.RecId == dimAttrValueSetItemProject.DimensionAttributeValue
                    && dimAttrValueProject.DimensionAttribute == dimAttrProject.RecId
                    && dimAttrValueProject.IsDeleted == false;
        if (!dimAttrValueSetItemProject.DisplayValue)
        {
            i++;
            ret     = checkFailed("Dimension Project is required for this line.");
        }
    }

    if (i > 0)
    {
        throw error(strFmt("Pelase fill the required dimensions"));
    }
    else
    {
        _args.setReturnValue(ret);
    }
}

Comments

Popular posts from this blog

Create RFQ through X++

Base enum values in Dynamics 365

Project Id through X++ code