venerdì 3 gennaio 2014

AX 2012 - Default dimension

In questo post vediamo come gestire le dimensioni finanziare nelle anagrafiche cliente/fornitore. Il job sottostante scrive nella defualt dimension "CLIENTE" il valore del custAccount:

 static void CreateDefaultDimension(Args _args)  
 {  
   DimensionAttributeValueSetStorage  valueSetStorage = new DimensionAttributeValueSetStorage();  
   DimensionDefault          result;  
   CustTable        custTable = CustTable::find('‪‪‪I01-000001',true);  
   int           i;  
   DimensionAttribute   dimensionAttribute;  
   DimensionAttributeValue dimensionAttributeValue;  
   container        conAttr = ["CLIENTE"]; //nome della dimensione  
   container        conValue = ["I01-000001"]; //valore da inserire  
   str           dimValue;  
   /* per evitare l'hard code 'CLIENTE' possiamo cercare nella tabella dimensionAttribute per   
   backEntityType che è un table num. Nel caso cliente tableNum sarà = tableNum(DimAttributeCustTable)  
   mentre nel caso fornitori tableNum(DimAttributeVendTable)*/  
   for (i = 1; i <= conLen(conAttr); i++)  
   {  
     dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i));  
     if (dimensionAttribute.RecId == 0)  
     {  
       continue;  
     }  
     dimValue = conPeek(conValue,i);  
     if (dimValue != "")  
     {  
       dimensionAttributeValue =  
           dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);  
       valueSetStorage.addItem(dimensionAttributeValue);  
     }  
   }  
   result = valueSetStorage.save();  
   ttsBegin;  
   custTable.DefaultDimension = result;  
   custTable.doUpdate();  
   ttsCommit;  
 }  
Prima dell'esecuzione del job:


Dopo l'esecuzione:


Una diversa soluzione, un pò più complessa l'ho trovata quì

Nessun commento:

Posta un commento