Tuesday, August 19, 2025

Create ledger dimension with main account and default dimension using x++ d365fo

public DimensionDynamicAccount generateLedgerDimension(str _mainAccount, container _conData)

{

    int                                 i;

    LedgerRecId                         ledgerRecId;

    DimensionAttribute                  dimensionAttribute;

    DimensionAttributeValue             dimensionAttributeValue;

    DimensionStorage                    dimStorage;

    LedgerAccountContract               ledgerAccountContract = new LedgerAccountContract();

    DimensionAttributeValueContract     valueContract;

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

    DimensionAttributeValueCombination  dimensionAttributeValueCombination;

    container conAttr = ["EntityName","CentreName","departmentName"];

    for (i = 1; i <= conLen(conAttr); i++)

    {

        dimensionAttribute = DimensionAttribute::findByName(conPeek(conAttr, i));

        if (dimensionAttribute.RecId == 0)

        {

            continue;

        }


        if (dimensionAttribute)

        {

            dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,

                          conPeek(_conData, i));

            if (dimensionAttributeValue)

            {

                valueContract = new DimensionAttributeValueContract();

                valueContract.parmName(dimensionAttribute.Name);

                valueContract.parmValue(dimensionAttributeValue.CachedDisplayValue);

                valueContracts.addEnd(valueContract);

            }

        }

    }

    ledgerAccountContract.parmMainAccount(_mainAccount);

    ledgerAccountContract.parmValues(valueContracts);

    dimStorage = DimensionServiceProvider::buildDimensionStorageForLedgerAccount(ledgerAccountContract);

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

    ledgerRecId = dimensionAttributeValueCombination.RecId;

    return ledgerRecId;

}


Call API using x++ D365FO

 System.Net.HttpWebRequest    request; System.Net.HttpWebResponse   response; System.IO.Stream             dataStream; System.IO.StreamReade...