Colores por empresa en Dynamics 365 For Operations

¿Cómo conseguirlo?

En esta nueva versión, las combinaciones de colores que el usuario ve están agrupadas por lo que D365FO llama Temas.
Esto significa que no podemos elegir un color en concreto, pero sí una determinada combinación de colores entre varias
predefinidas por el sistema. La aplicación estándar da la posibilidad al usuario de elegir uno de estos temas, que se
aplican a cualquier empresa en la que el usuario esté trabajando (Opciones > User options):

Una petición muy habitual en implantaciones de Dynamics es que estos colores se cambien automáticamente
dependiendo de la empresa en que el usuario esté trabajando. Esta característica resulta muy útil cuando se
trabaja con varios entornos (test, producción…) y con varias empresas, ya que el usuario puede, de manera
inmediata, situarse “visualmente” en el entorno o empresa en la que está, disminuyendo la posibilidad
de errores
.

La buena noticia es que es fácil de implementar. Necesitaremos realizar tres pasos:

  1. El almacenamiento persistente que determinará qué temas han de usarse para una empresa determinada.
    Podemos extender alguna tabla de parametrización existente (la tabla CompanyInfo es una buena candidata).
    En cualquier caso, obviamente, será necesario implementar algún tipo de interfaz de usuario para que se
    pueda cambiar.En este caso, hemos elegido una nueva tabla de parametrización, con un campo adicional de tipo NoYes que
    permite activarlo o desactivarlo (UseCompanyTheme):

    Junto con su correspondiente interfaz de usuario en el formulario de entidades legales (OMLegalEntity):

    El tema que se aplicará es uno de los posibles valores del enumerado SysUserInfoTheme. Según nuestras
    necesidades, podemos complicarlo más o menos (empaquetarlo en un container, por ejemplo), pero la opción
    más sencilla es crear un campo para almacenarlo (y usarlo) directamente:

  2. El código efectivo que cambia el tema al usuario. Para ello, usamos la funcionalidad de Chain Of Command
    sobre el método GetThemeDensityForCurrentUser() de la clase SysFormUtil.En este caso, hemos optado por
    centralizar la funcionalidad en un método estático de la tabla de parámetros, y darles prioridad a los
    colores por empresa: Si no son aplicables, seguimos las preferencias del usuario. La línea importante,
    la que hace la “magia”, es la llamada a appl.setTheme():

  3. Los puntos de entrada, que llamarán al método donde tenemos centralizada la funcionalidad (en nuestro caso,
    estático en la nueva tabla de parámetros). Necesitaremos poner dos:

    1. Implementar un suscriptor al delegado onSetDefaultCompany de la clase Application:

    2. Implementar un suscriptor al método post-modified del control DataArea_id del formulario de sistema SysCompanyChooser:

Podemos decir que este último punto de entrada es el momento de los fuegos artificiales (puesto que es
inmediatamente visible al usuario), de esta funcionalidad. Este formulario de sistema es el que normalmente se
usa para cambiar de empresa en el navegador en cualquier formulario. El efecto visual de este último cambio es
que, inmediatamente después de que el usuario haya escogido la nueva empresa, la pantalla se refrescará con el
tema aplicable a la nueva empresa.

Resultado

Parametrización

Aplicación de la funcionalidad

Como se ha comentado arriba, en este ejemplo, hemos optado por centralizar la funcionalidad (puntos de entrada
y aplicación del Tema) en la tabla de parámetros, y darles prioridad a los colores por empresa:

Pero siempre que se cumplan las premisas indicadas arriba, debería funcionar.
A disfrutarlo 😉

J.M. Guisado

Entradas recomendadas