Bojensen Blogs

AX 2012 Financial dimension update

Here are 2 ways to update a financial dimension, while keeping the other dims. The result should be the same, just use whatever you prefer.

To use those two method proceed like so:

purchTable = purchTable::find(‘PURCHID’, true);
purchTable.DefaultDimension = getNewDefaultDimension(purchTable.DefaultDimension, “COSTCENTER”, “YOURVALUE”);
purchTable.update();

METHOD NUMBER 1:

static RecId getNewDefaultDimension(RecId defaultDimension, Name dimName, str 255 dimValue)
{
DimensionAttributeValueSetStorage dimStorage;
Counter i;
DimensionAttribute dimAttributeCostCenter;
DimensionAttributeValue dimAttributeValue;
dimStorage = DimensionAttributeValueSetStorage::find(defaultDimension);
dimAttributeCostCenter = DimensionAttribute::findByName(dimName);
if(dimValue)
{
dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttributeCostCenter, dimValue, true, true);
dimStorage.addItem(dimAttributeValue);
}
else
dimStorage.removeDimensionAttribute(DimensionAttribute::findByName(dimName).RecId);
return dimStorage.save();
}

METHOD NUMBER 2:

static RecId getNewDefaultDimension(RecId defaultDimension, Name dimName, str 255 dimValue)
{
container c;
RecId newdefaultDimension;
int i;
c = AxdDimensionUtil::getDimensionAttributeValueSetValue(defaultDimension);
i = conFind(c, dimName);
if(!i && !dimValue)
return defaultDimension;
if(i)
{
c = conDel(c, i+1, 1);
c = conDel(c, i, 1);
}
if(dimValue)
{
c += dimName;
c += dimValue;
}
c = conDel(c, 1, 1);
c = conIns(c, 1, conLen(c) / 2);
newdefaultDimension = AxdDimensionUtil::getDimensionAttributeValueSetId(c);
return newdefaultDimension;
}

To get the current value of a financial dimension:

static str 255 getDimensionValue(RecId defaultDimension, Name dimName)
{
DimensionAttributeValueSetStorage dimStorage;
Counter i;
DimensionAttribute dimAttributeCostCenter;
DimensionAttributeValue dimAttributeValue;
dimStorage = DimensionAttributeValueSetStorage::find(defaultDimension);
return dimStorage.getDisplayValueByDimensionAttribute(DimensionAttribute::findByName(dimName).RecId);
}

Comments are closed.