Pages

Banner 468 x 60px

 

Wednesday, November 22, 2017

AX 2012 Financial dimension update using x++

0 comments
AX 2012 Financial dimension update using x++ :

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); 
 } 


0 comments:

A financial dimension value is based on the record and has been used on a transaction. You cannot delete the record

  SOLUTION delete in table DimensionAttributeLevelValue base on Bank Account  :  and Delete the Bank Account FINISH