venerdì 12 dicembre 2014

AX 2012 - Creare una ledgerDimension partendo dai singoli segmenti

In questo post vediamo come creare una ledgerDimension partendo dai singoli segmenti. In questo esempio esempio abbiamo a  disposizione il conto e il centro di costo. Il codice sottostante ritorna il recId da assegnare al campo ledgerdimension:

 static void CreateLedgerDimension(Args _args)  
 {  
   LedgerDimensionAccount ledgerDimension;  
   LedgerDimensionAccount mainAccDimension;  
   RefRecId        defaultDimRecId;  
   RecId createDefaultDimension()  
   {  
     DimensionAttributeValueSetStorage  valueSetStorage = new DimensionAttributeValueSetStorage();  
     DimensionDefault          result;  
     int           i;  
     DimensionAttribute   dimensionAttribute;  
     DimensionAttributeValue dimensionAttributeValue;  
     container        conAttr = ["CentroCosto"]; //array dei nomi delle dimensioni  
     container        conValue = ["1100"];    //container dei valori  
     str           dimValue;  
     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();  
     info(Strfmt("%1",result));  
     return result;  
   }  
   //quì la dimensione relativa al solo main account  
   mainAccDimension = DimensionStorage::getDefaultAccountForMainAccountNum("3090");   
   //il metodo createDefaultDimension crea la dimensione serve per costruire il resto del segmento  
   defaultDimRecId = createDefaultDimension();  
   //il metodo serviceCreateLedgerDimension effettua il merge delle dimensioni e ristorna il recId realtivo  
   ledgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(mainAccDimension,defaultDimRecId);  
   info(Strfmt("%1",ledgerDimension));  
 }  

Il risultato che andremo ad attenere sarà: