viernes, 29 de enero de 2016

TIP | [X++] Deshabilitar campos de dimensiones financieras

Hola a tod@s,

En personalizaciones requeridas por usuarios nos hemos encontrado en la necesidad de habilitar y deshabilitar campos dentro de la aplicación de Dynamics AX. Comparto la manera de realizar dicha funcionalidad en los campos de dimensiones financieras en las líneas de ordenes de ventas.
Esperando sea de su ayuda.


1. Creamos un nuevo método en la clase estándar DimensionDefaultingControllerBase.

 void parmEditableDimensionAttributeSetId(RefRecId _editableDimensionAttributeSetId = editableDimensionAttributeSetId)  
 {  
   editableDimensionAttributeSetId = _editableDimensionAttributeSetId;  
 }  

2. Creamos un nuevo método en el formulario en el cual se requiere aplicar la personalización con del siguiente código (ej. Forms/SalesTable/Methods)

 public void setDimensionAttributeSetStorage()  
 {  
   DimensionAttribute             dimAttr;  
   DimensionAttributeSetItem       dimAttrSetItem;  
   DimensionEnumeration          dimensionSetId = DimensionCache::getDimensionAttributeSetForLedger();  
   DimensionAttributeSetStorage    dimensionAttributeSetStorage;  
   ;  
   dimensionAttributeSetStorage = new DimensionAttributeSetStorage();  
   select * from dimAttr  
     order by Name  
     where dimAttr.Type != DimensionAttributeType::MainAccount  
     &&  dimAttr.Name == "#CENTRODECOSTOS"  
     join RecId from dimAttrSetItem  
       where dimAttrSetItem.DimensionAttribute   == dimAttr.RecId  
       &&  dimAttrSetItem.DimensionAttributeSet == dimensionSetId  
   //Agregar la dimensión que se desea habilitar  
   dimensionAttributeSetStorage.addItem(dimAttr.RecId, dimAttr.HashKey,NoYes::Yes);  
   dimensionDefaultingControllerLine.parmEditableDimensionAttributeSetId(dimensionAttributeSetStorage.save());  
 }  

3. El método creado en el paso 2 lo ejecutamos en el proceso donde se requiere inicializar la personalización (ej. Forms/SalesTable/DataSource/SalesLine/Methods/active)

 element.setDimensionAttributeSetStorage();  

4. Obteniendo el siguiente resultado al momento de editar el formulario.



No hay comentarios:

Publicar un comentario