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