Create ledger or offset ledger dimension in D365 fo X++

X++ code to create ledger/offset ledger dimension in D365 fo.

1. Pass the attribute values sequentially in a container as below. you can find these sequence from ledger setup in general ledger module.

          //  container offsetConLoc  =   [mainaccount,_businessunit,site, region, department,customersVendorNbr, project, employe, fixedasset];

            DimensionDynamicAccount    OffsetLedgerDimension  = this.generateLedgerDimension(offsetConLoc, _mainaccount);

2. create a new method to generate the recid of dimension values.

 public DimensionDynamicAccount   generateLedgerDimension(container    conData,   MainAccountNum  mainAccountNum)

    {

        int                                  hierarchyCount;

        int                                  hierarchyIdx;

        RecId                                dimAttId_MainAccount;

        LedgerRecId                          ledgerRecId;

        MainAccount                          mainAccount;

        RefRecId                             recordvalue;

        DimensionAttribute                   dimensionAttribute;

        DimensionAttributeValue              dimensionAttributeValue;

        DimensionSetSegmentName              DimensionSet;

        DimensionStorage                     dimStorage;

        LedgerAccountContract                LedgerAccountContract = new                                                                                                                                                          LedgerAccountContract();

        DimensionAttributeValueContract      ValueContract;

        List                                 valueContracts = new List(Types::Class);

        dimensionAttributeValueCombination   dimensionAttributeValueCombination;

 


        mainAccount     =  MainAccount::findByMainAccountId(_mainAccountNum);

        recordvalue     =  DimensionHierarchy::getAccountStructure(mainAccount.RecId,Ledger::current());

        hierarchyCount  =  DimensionHierarchy::getLevelCount(recordvalue);

        DimensionSet    =  DimensionHierarchyLevel::getDimensionHierarchyLevelNames(recordvalue);


        for(hierarchyIdx = 1;hierarchyIdx<=hierarchyCount;hierarchyIdx++)

        {

            if(hierarchyIdx == 1)

            {

                continue;

            }

            dimensionAttribute = DimensionAttribute::findByLocalizedName(DimensionSet[hierarchyIdx],false, #enus);


            if(dimensionAttribute)

            {

                dimensionAttributeValue =DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,conPeek(_conData,hierarchyIdx));


                if(dimensionAttributeValue)

                {

                    ValueContract = new DimensionAttributeValueContract();

                    ValueContract.parmName(dimensionAttribute.Name) ;

                    ValueContract.parmValue(dimensionAttributeValue.CachedDisplayValue);

                    valueContracts.addEnd(ValueContract);

                }

            }

        }

        LedgerAccountContract.parmMainAccount(_mainAccountNum);

        LedgerAccountContract.parmValues(valueContracts);

        dimStorage                          =    DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);

        dimensionAttributeValueCombination  =    DimensionAttributeValueCombination::find(dimStorage.save());

        ledgerRecId                         =    dimensionAttributeValueCombination.RecId;


        return ledgerRecId;

    }


Thank you !!

No comments:

Post a Comment