In this post, I will be explaining the method to get individual values for each dimension combination that is created and stored.
Dimension combinations are stored are DimensionAttributeValueCombination class. But they are stored as a combination ex: (100010-AX-00001- – - -). How would you know the value in each combination belongs to what dimension?
The answer is through dimension storage class. This class is used to manipulate these combinations.
The job below helps you in finding out the required values. The job has lots of self explanatory comments.
static void getDimensionCombinationValues(Args _args)
{
// DimensionAttributeValueCombination stores the combinations of dimension values
// Any tables that uses dimension combinations for main account and dimensions
// Has a reference to this table’s recid
DimensionAttributeValueCombination dimAttrValueComb;
//GeneralJournalAccountEntry is one such tables that refrences DimensionAttributeValueCombination
GeneralJournalAccountEntry gjAccEntry;
// Class Dimension storage is used to store and manipulate the values of combination
DimensionStorage dimensionStorage;
// Class DimensionStorageSegment will get specfic segments based on hierarchies
DimensionStorageSegment segment;
int segmentCount, segmentIndex;
int hierarchyCount, hierarchyIndex;
str segmentName, segmentDescription;
SysDim segmentValue;
;
//Get one record for demo purpose
gjAccEntry = GeneralJournalAccountEntry::find(5637765403);
setPrefix("Dimension values fetching");
//Fetch the Value combination record
dimAttrValueComb = DimensionAttributeValueCombination::find(gjAccEntry.LedgerDimension);
setPrefix("Breakup for " + dimAttrValueComb.DisplayValue);
// Get dimension storage
dimensionStorage = DimensionStorage::findById(gjAccEntry.LedgerDimension);
if (dimensionStorage == null)
{
throw error("@SYS83964");
}
// Get hierarchy count
hierarchyCount = dimensionStorage.hierarchyCount();
//Loop through hierarchies to get individual segments
for(hierarchyIndex = 1; hierarchyIndex <= hierarchyCount; hierarchyIndex++)
{
setPrefix(strFmt("Hierarchy: %1", DimensionHierarchy::find(dimensionStorage.getHierarchyId(hierarchyIndex)).Name));
//Get segment count for hierarchy
segmentCount = dimensionStorage.segmentCountForHierarchy(hierarchyIndex);
//Loop through segments and display required values
for (segmentIndex = 1; segmentIndex <= segmentCount; segmentIndex++)
{
// Get segment
segment = dimensionStorage.getSegmentForHierarchy(hierarchyIndex, segmentIndex);
// Get the segment information
if (segment.parmDimensionAttributeValueId() != 0)
{
// Get segment name
segmentName = DimensionAttribute::find(DimensionAttributeValue::find(segment.parmDimensionAttributeValueId()).DimensionAttribute).Name;
//Get segment value (id of the dimension)
segmentValue = segment.parmDisplayValue();
//Get segment value name (Description for dimension)
segmentDescription = segment.getName();
info(strFmt("%1: %2, %3", segmentName, segmentValue, segmentDescription));
}
}
}
}
Here is a sample output after running the code:
Note: Hiearchies: CEEBD_Dept-CostCenter-Purpose and CorpShared_Dept-CostCenter-Purpose are child hierarchies of “Account structure”.



Zeeshan Haider Jafry
December 28, 2011 at 4:08 pm
Hi Sumit,
How can i set the default dimension value? means if i want to set the default value of only department dimension, how can i do this through code.
Sumit Loya
December 28, 2011 at 5:01 pm
Hi Zeeshan,
There is a way to do it. I will post the job in couple of days on my blog. Stay tuned in
Karsten Rasch-Adamsen
February 13, 2012 at 4:41 pm
Hi Sumit,
Great work on digging into the ledger dimension framwork!
I am curious as to how I should approach this scenario:
From X++ I would like to create records in LedgerJournalTrans and I have all the necessary values at hand (accountnum, amount, dato and – of course – financial dimensions but as separate values).
So if I have the accountnum+dimension values how would I find/create the dimension combination to be referred from the create LedgerJournalTrans?
Thanks and keep up the good work!!
Sumit Loya
February 15, 2012 at 5:29 pm
Hi Karsten,
You can check out this article to get the DimensionAttributeValueSet record for the financial dimensions that you have http://sumitsaxfactor.wordpress.com/2011/12/28/defaulting-financial-dimensions-ax-2012/
After you get this, you can merge it with your Ledger dimension by looking at the post here: http://sumitsaxfactor.wordpress.com/2011/12/28/defaulting-ledger-dimensions-ax-2012/
Hope this helps you.
Thanks!