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”.
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.
LikeLike
Hi Zeeshan,
There is a way to do it. I will post the job in couple of days on my blog. Stay tuned in 🙂
LikeLike
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!!
LikeLike
Hi Karsten,
You can check out this article to get the DimensionAttributeValueSet record for the financial dimensions that you have https://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: https://sumitsaxfactor.wordpress.com/2011/12/28/defaulting-ledger-dimensions-ax-2012/
Hope this helps you.
Thanks!
LikeLike
Hi,
I have values for Department and Cost Centre,i need to obtain a default dimesion (DimensionDefault) for the same. I mean to say i need to merge using just values of department and cost centre and merge into a return type of DimensionDefault. Can you please give me some tips on same.
LikeLike
You can go through this link. This does exactly the same. https://sumitsaxfactor.wordpress.com/2012/11/24/replace-a-financial-dimension-in-default-dimensionscondensed-ax-2012/
LikeLike
Thank you Sumit. Its been very useful… 🙂
LikeLike
Hi Sumit,
I have requirement to import ledger journal trans and I am currently using the classes LedgerGeneralJournal_LedgerJournalTable and LedgerGeneralJournal_LedgerJournalTrans to import the ledger journal transactions.
The import file consists of Main Account and Dimensions. Here I would like to know based on the Mainaccount what would be my valid dimensions, then I can pass on the dimension name and dimension values to above classes to do the import.
Can you please help me in getting the valid dimensions (dimension names) for a Main account.
Thanks,
Ismail.
LikeLike
Is there a way to get a list of next dimension values using the rules without using the Account entry dropdown control in AX. I would like to replicate the same functionality using dropdowns but not sure how to fetch the next set of possible values.
In the original example:
Dropdown1 value = 110180
Dropdown2 should populate with possible values for the next dimension
Is there service or a SQL query that could do that?
LikeLike
Is there a way to get a list of the next dimension value list based on what was previously entered such as main account code? Basically I am trying to see how I can list the next set of dimension values using the advanced segment rules setup in AX2012. Example: if mainaccount = 9999 only departmens 10 to 15 should showup.
LikeLike
thanks alot!
LikeLike
Thanks! Helped me
LikeLike
thanks alot!
LikeLike