Thursday, 11 August 2022

Workflow validation before submit x++ D365 CoC

 [ExtensionOf(classStr(CustFreeInvoiceWorkflow))]

final class XX_CustFreeInvoiceWorkflow_Extension

{

    public static void main(Args _args)

    {

        CustFreeInvoiceWorkflow custFreeInvoiceWorkflow = CustFreeInvoiceWorkflow::construct();

        CustInvoiceTable        custInvoiceTable;

        FormDataSource          custInvoiceTableDataSource;


        if (_args)

        {

            custInvoiceTable = _args.record();

            custInvoiceTableDataSource = FormDataUtil::getFormDataSource(custInvoiceTable);


            if(custInvoiceTable)

            {

                CustInvoiceLine     custInvoiceLine;

                MainAccountNum      mainAccountNum;

                MainAccount         mainAccount;

                

                while select custInvoiceLine where custInvoiceLine.ParentRecId == custInvoiceTable.RecId

                {

                    if(MainAccount::findByMainAccountId(LedgerDimensionFacade::getDisplayValueForLedgerDimension(custInvoiceLine.LedgerDimension)).XX_IsMandatory == true)

                    {

                        boolean         validated, contractCat, customers, projects, division, site;


                        contractCat =   XX_CustInvoiceLineDimension::getValidated(custInvoiceLine.DefaultDimension, "ContractCategory");

                        customers   =   XX_CustInvoiceLineDimension::getValidated(custInvoiceLine.DefaultDimension, "Customers");

                        projects    =   XX_CustInvoiceLineDimension::getValidated(custInvoiceLine.DefaultDimension, "Projects");

                        division    =   XX_CustInvoiceLineDimension::getValidated(custInvoiceLine.DefaultDimension, "Division");

                        site        =   XX_CustInvoiceLineDimension::getValidated(custInvoiceLine.DefaultDimension, "Site");


                        if(contractCat || customers || projects || division || site)

                        {

                            throw error("[ContractCategory, Customers, Projects, Division, Site] dimensions are mandatory in line to submit");

                        }

                    }

                }

            }

        }

        next main(_args);

    }


}

Dimension value by name x++

 public static boolean getValidated(RecId defaultDimension, Name dimName)

    {

        DimensionAttributeValueSetStorage   dimStorage;

        boolean                             hasValue;

        dimStorage  =       DimensionAttributeValueSetStorage::find(defaultDimension);

        hasValue    =       dimStorage.getDisplayValueByDimensionAttribute(DimensionAttribute::findByName(dimName).RecId)? false : True;

        return hasValue;

    }

Thursday, 4 August 2022

Unpack dimension x++

 public str unpackDimension(DimensionDefault _transDimension)

    {

        DimensionAttributeValueSetStorage           dimStorage;

        str                                         segmentName, segmentDescription;

        str                                         segmentValue = "";

        str                                         retProj;//retDept;

        boolean                                     isNullforSales;

        int                                         hierarchyCount, hierarchyIndex;

        DefaultDimensionView                        defaultDimensionView;

        RecId                                       defaultDimension;

        int                                         i;

        container                                   conAttribute;

        container                                   conValues;

        DimensionDefault                            result;

 

        defaultDimension    = _transDimension;

        dimStorage          = DimensionAttributeValueSetStorage::find(defaultDimension);

        for (i= 1 ; i<= dimStorage.elements() ; i++)

        {

            segmentName         = DimensionAttribute::find(dimStorage.getAttributeByIndex(i)).Name;

            segmentValue        = dimStorage.getDisplayValueByIndex(i);

            if(segmentName)

            {

                select defaultDimensionView

            where defaultDimensionView.DefaultDimension == defaultDimension

            && defaultDimensionView.Name == segmentName;

 

                segmentDescription = defaultDimensionView.dimensionDiscription();

            }

            if(segmentName != "Projects")

            {

                continue;

            }

            else

            {

                retProj =   segmentValue;

            }

        }

        return retProj;

    }