In this example, we create a SalesTable record and attach multiple financial dimensions.
1. Build the Financial Dimension Set
First, create a helper method that collects dimension values and returns a DefaultDimension.
private DimensionDefault addFinancialDimension(
OMOperatingUnitNumber _businessUnit,
OMOperatingUnitNumber _department,
OMOperatingUnitNumber _employee,
OMOperatingUnitNumber _lc,
OMOperatingUnitNumber _purpose,
OMOperatingUnitNumber _region,
OMOperatingUnitNumber _retailChannel)
{
DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
container dimensionNames = ['BusinessUnit', 'Department', 'Employee', 'LC', 'Purpose', 'Region', 'RetailChannel'];
container dimensionValues = [_businessUnit, _department, _employee, _lc, _purpose, _region, _retailChannel];
int i;
dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage();
for (i = 1; i <= conLen(dimensionNames); i++)
{
Name dimName = conPeek(dimensionNames, i);
str dimValue = conPeek(dimensionValues, i);
if (!dimValue)
continue; // Skip empty values
dimensionAttribute = DimensionAttribute::findByName(dimName);
if (!dimensionAttribute)
throw error(strFmt("Financial dimension %1 not found.", dimName));
dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(
dimensionAttribute,
dimValue,
false,
true);
if (!dimensionAttributeValue)
throw error(strFmt("Value %1 not found for dimension %2.", dimValue, dimName));
dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue);
}
return dimensionAttributeValueSetStorage.save();
}
This method loops through each dimension, finds the corresponding value in the system, and builds a DefaultDimension that can be assigned to transactions.
2. Create the Sales Order
Now we create a sales order and apply the dimensions.
static void CreateSalesOrderWithFinancialDimensions(Args _args)
{
SalesTable salesTable;
DimensionDefault defaultDimension;
ttsbegin;
defaultDimension = this.getFinancialDimension(
"001",
"022",
"EMP01",
"LC01",
"Sales",
"NORTH",
"ONLINE"
);
salesTable.clear();
salesTable.initValue();
salesTable.SalesId = NumberSeq::newGetNum(SalesParameters::numRefSalesId()).num();
salesTable.CustAccount = "US-001";
salesTable.initFromCustTable();
salesTable.DefaultDimension = defaultDimension;
salesTable.insert();
ttscommit;
}
Result
The sales order is created with all required financial dimensions automatically assigned, ensuring consistent financial reporting and reducing manual work. This approach is commonly used in customizations and integrations within Dynamics 365 Finance and Operations.
.png)