Seguramente a estas alturas a casi todos nos han hecho la pregunta “se puede cambiar el color del tema para que sea el de nuestra empresa/marca?”. Desgraciadamente no se puede, pero lo que podemos hacer es definir un tema para cada empresa.
Esta entrada es una prueba de concepto. Todavía no he conseguido que el tema cambie cuando se cambia de empresa por el desplegable superior.
El estándar
Por defecto cada usuario puede seleccionar el tema que quiera en las opciones de usuario:
Si comprobáis la tabla SysUserInfo tiene un campo enumerado Theme de tipo SysUserInfoTheme. Este enum no es extensible, y esa es una de las razones de no poder cambiar los colores estándar (la otra es que la clase que lo controla no es accesible).
El cliente nos puede pedir que se definan unos colores fijos para distintas compañías. Para asegurarse que los usuarios no confunden empresas o incluso entornos.
Vamos a hacerlo
Para este ejemplo he decidido añadir un campo en las empresas para poder definir qué tema usar en cada una de ellas.
Añadimos un nuevo campo de tipo SysUserInfoTheme en la tabla CompanyInfo:
Después añadimos el campo en el formulario OMLegalEntity:
Ya tenemos una lista de los temas disponibles. Vamos a añadir la duncionalidad.
Si hacemos una búsqueda de metadatos por el campo Theme de la SysUserInfo encontraremos que se usa en el método GetThemeDensityForCurrentUser de la clase SysFormUtil. Lo vamos a extender de la siguiente manera:
Al retornar el valor de nuestro campo hacemos que el sistema cargue el tema definido en la tabla CompanyInfo en vez del que ha elegido el usuario. Por ejemplo:
USMF
THMF
SAMF
Diferentes empresas, diferentes temas!
Ahora sólo me queda encontrar una forma de hacer que esto funcione al cambiar de DataArea. He probado con el lookup form que muestra la lista de empresas pero nada. Alguna idea?