Dynamics AX Blog - financial_dimensions - Posts from 2014
AX 2012: Show RecId of type LedgerDimension as Display valueIn the following code-example a record is selected from table LedgerJournalTrans, than the value of the field LedgerDimension respectively the field OffsetLedgerDimension is converted in the display value, which is display in a so called Segemented entry control.
static void GetLedgerDimensionDisplayValue(Args _args)
{
DimensionStorage dimensionStorage;
DimensionDisplayValue DimensionDisplayValue;
ledgerJournalTrans ledgerJournalTrans = LedgerJournalTrans::findRecId(5637169330, false);
// LedgerDimension
dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.LedgerDimension);
DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
info(DimensionDisplayValue);
// OffsetLedgerDimension
dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.OffsetLedgerDimension);
DimensionDisplayValue = dimensionStorage.getComboDisplayValue();
info(DimensionDisplayValue);
}
Output for example: |
AX 2012: Show financial dimension using display methodFollowing display-method (created in the datasource of the form custtable) shows the financial dimension Costcenter.
public display DimensionValue showCostCenter(CustTable _custTable)
{
DimensionAttributeValueSet dimensionAttributeValueSet;
DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
DimensionAttributeValue dimensionAttributeValue;
DimensionAttribute dimensionAttribute;
#define.CostCenterDimensionName("CostCenter");
if( !_custTable || !_custTable.DefaultDimension)
{
return '';
}
dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension);
select firstOnly RecId
from dimensionAttributeValueSetItem
where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId
join DimensionAttributeValue
where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
join RecId from dimensionAttribute
where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute
&& dimensionAttribute.Name == #CostCenterDimensionName
if(dimensionAttributeValue && dimensionAttribute)
{
return dimensionAttributeValue.getValue();
}
return '';
}
Simpler version (see comments)
public display DimensionValue showCostCenter(CustTable _custTable)
{
#define.CostCenterDimensionName("CostCenter");
return ((select firstOnly DisplayValue from DefaultDimensionView
where DefaultDimensionView.Name == #CostCenterDimensionName
&& DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue);
}
|
AX 2012: Enter financial dimension based on an form inputSometimes you have the requirement that a certain financial dimension is to be set on the basis of an input in a form. The following code example is something relatively easy to implement. In the example, whenever a particular field is changed - queried on the method modified() of the field of a DataSource, the financial dimension Costcenter will be filled with the value 25. If the value to be entered an invalid, nothing happens (error message or similar).
public void modified()
{
DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Costcenter");
DimensionValue newValue = '25'; // New dimension value
super();
dimensionDefaultingController.setDimensionAttributeValue(
DimensionAttribute,
DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId,
newValue);
}
In the example, an existing instance of DimensionDefaultingController used. |
|
|
|
|
|
|

Below you'll find a code example of how to generate a RecId of type DefaultDimension for several dimensions.
Subsequently, these DefaultDimension is combined with a main account to RecId of type LedgerDimension.
static void buildDefaultAndLedgerDimension(Args _args) { DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage; DimensionAttribute dimensionAttribute; DimensionAttributeValue dimensionAttributeValue; DimensionDefault dimensionDefault; LedgerDimensionAccount ledgerDimensionAccount; dimensionAttributeValueSetStorage = new DimensionAttributeValueSetStorage(); // BusinessUnit dimensionAttribute = DimensionAttribute::findByName('BusinessUnit'); if(dimensionAttribute) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '069', false, true); dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue); } // CostCenter dimensionAttribute = DimensionAttribute::findByName('CostCenter'); if(dimensionAttribute) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '010', false, true); dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue); } // Department dimensionAttribute = DimensionAttribute::findByName('Department'); if(dimensionAttribute) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, '024', false, true); dimensionAttributeValueSetStorage.addItem(dimensionAttributeValue); } dimensionDefault = dimensionAttributeValueSetStorage.save(); // Merge main account and source dimension values and return RecId which can be used as ledgerDimension ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum("110110"), dimensionDefault); info(strFmt("Default dimension recId: %1", dimensionDefault)); info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", dimensionDefault, ledgerDimensionAccount)); }