MSdynD365FO : Working with Dimensions X++ code - Part I
Views (2466)
Sharing some x++ code which is require when you work with dimensions.
Creation of default dimension using map , if you are getting values different resources e.g. file , any http request etc.
MapEnumerator mapEnum;
boolean validDim = true;
List _contractList;
Map dimMap = new Map(Types::String, Types::String);
RecId defaultDimension;
DimensionDefaultContract dimensionDefaultContract = DimensionDefaultContract::construct();
dimMap.insert('Client', '003501_036');
dimMap.insert('Purpose', '2016GBG');
dimMap.insert('Division', 'CORP');
dimMap.insert('Department', 'ADMIN');
dimMap.insert('Location', 'LOSANGELES');
dimMap.insert('SubDepartment', 'AP');
dimMap.insert('Employee', '100077');
mapEnum = dimMap.getEnumerator();
while(mapEnum.moveNext())
{
str dimName, dimValue;
boolean dimNameValid;
dimName = mapEnum.currentKey();
dimValue = mapEnum.currentValue();
DimensionAttributeValueContract dimAttrValContract = DimensionAttributeValueContract::construct(dimName, dimValue);
_contractList = dimensionDefaultContract.parmValues();
_contractList.addEnd(dimAttrValContract);
}
if(dimensionDefaultContract && !dimensionDefaultContract.parmValues().empty())
{
DimensionNameValueListServiceProvider dimensionDefaultServiceProvider = DimensionNameValueListServiceProvider::newForDimensionNameValueListContract(dimensionDefaultContract);
DimensionStorageResult dimensionStorageResult = dimensionDefaultServiceProvider.resolve();
switch(dimensionStorageResult.parmStatus())
{
case DimensionStorageResultStatus::Valid:
defaultDimension = dimensionStorageResult.parmSavedRecId();
break;
default:
error(strFmt("Validation Status: %1", dimensionStorageResult.parmStatus()));
break;
}
}
info(strFmt("Default Dimension %1",defaultDimension));
Here is created Default dimension
If you would like to combine main account with default dimension and create LedgerDimension use below code
MainAccount mainaccount = MainAccount::findByMainAccountId('000103');
LedgerDimensionAccount ledgerddimensoin ;
ledgerddimensoin = LedgerDimensionFacade::serviceCreateLedgerDimension(mainaccount.RecId, defaultDimension);
info(strFmt("LedgerDimension :%1",ledgerddimensoin));
Comments
-
Thanks a lot for your solution. It is really helpful. Appreciate and admire your effort in this forum. Please continue your great work.

Like
Report
*This post is locked for comments