06 May 2026

Merge Dimensions (MainAccountId and LedgerDimensions) defaultDimension in D365 F&O and X++

 public DimensionDynamicAccount getLedgerDimension(container _conData, TransDate _transDate = today())

{

    int                                         hierarchyCount;

    int                                         hierarchyIdx;

    DimensionDynamicAccount                     ledgerRecId;

    MainAccountNum                              mainAccountId = conPeek(_conData, 1);

    MainAccount                                 mainAccount;

    RefRecId                                    recordvalue;

    DimensionAttribute                          dimensionAttribute;

    DimensionAttributeValue                     dimensionAttributeValue;

    DimensionSetSegmentName                     DimensionSet;

    DimensionStorage                            dimStorage;

    LedgerAccountContract                       LedgerAccountContract = new LedgerAccountContract();

    DimensionAttributeValueContract             ValueContract;

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

    int                                         currentYear;

    Name                                        PopDim;

    str                                         dimValue;

   

 

    dimensionAttributeValueCombination dimensionAttributeValueCombination;

 

    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, CompanyInfo::find().LanguageId);

 

        if(dimensionAttribute)

        {

            dimValue = conPeek(_conData,hierarchyIdx);

            

            dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue);

 

            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;

}

No comments:

Post a Comment

Give me the commetns and solutions

Merge Dimensions (MainAccountId and LedgerDimensions) defaultDimension in D365 F&O and X++

 public DimensionDynamicAccount getLedgerDimension(container _conData, TransDate _transDate = today()) {     int                            ...