Wednesday, September 15, 2021

Get Ledger Dimension in based on different values in d365

<> 

class AFZGlobalClass

{

    public static DimensionDynamicAccount   generateLedgerDimension(container    _conData, MainAccountNum _mainAccountId)

    {

        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;

        //CostCenter,Department,Worker ..etc..

        //container                  _conData =["142102","C","ADMIN"];;

        //mainAccount = MainAccount::findByMainAccountId('400301');

        mainAccount = MainAccount::findByMainAccountId(_mainAccountId);

        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,"en-us");

            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(_mainAccountId);

        LedgerAccountContract.parmValues(valueContracts);

        dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(LedgerAccountContract);

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

        ledgerRecId = dimensionAttributeValueCombination.RecId;

        return ledgerRecId;

    }

}

</>


Reference link - https://www.linkedin.com/pulse/generate-financial-dimension-ledgerdimension-dynamics-yadav/
Thanks - Shashi kant Yadav

No comments:

Post a Comment