Microsoft Dynamics AX Cambiar el color de los controles

Cambiar el color de algunos controles de manera dinámica es una buena opción para facilitar al usuario la detección de casos particulares que le son de utilidad: Artículos bloqueados para venta, clientes con el riesgo excedido, pedidos bloqueados, etc.

Dynamics AX 2012 - ClearDisplayOption

Para cambiar el color de los controles en un formulario se utiliza la función displayOption() de los orígenes de datos de los formularios pero a veces el funcionamiento de esta modificación no es el que se espera. Estos días me ha ocurrido en Dynamics AX 2009 que los colores se cambiaban correctamente al abrir un pedido pero no se iban actualizando durante la introducción de nuevas líneas de pedido, que es lo que se esperaba.

public void displayOption(Common _record, FormRowDisplayOption _options)
{
    SalesLine auxSalesLine = _record;
   
    super(_record, _options);
   
    if (auxSalesLine.Blocked)
        _options.backColor(WinAPI::RGBCon2int([255, 128, 128])); // Rojo
}

Para ello hay que buscar el mejor lugar para introducir una llamada a la funcion clearDisplayOption() para que se vuelvan a pintar los controles afectados por el origen de datos con las opciones de presentación configuradas en ese momento, en mi caso lo puse en el método write() y ahora si funciona como se espera. Por curiosidad, he comprobado este funcionamiento en Dynamics AX 2012 con el mismo resultado.

void write()
{
    SalesLine   localSalesLine;
    SalesLine   salesLineFind;
    boolean     agreementWasChanged = (salesLine.MatchingAgreementLine != salesLine.orig().MatchingAgreementLine);

    // JAEE - 29/11/2012 - begin
    SalesLine_ds.clearDisplayOption(Salesline);
    // JAEE - 29/11/2012 - end
   
    ...
   
}

Se pueden limitar los objetos afectados por esta función para colorear sólo unos controles y no todos los del formulario, pero eso será otro día 🙂