No sabía si llamarlo entorno o ambiente, el caso es que en aplicaciones de las llamadas de escritorio, que hayan de funcionar en una red manejando datos que residan en un servidor, son necesarias varias configuraciones:
- Local: Son datos referentes a la máquina: que impresora se ha elegido para las facturas, cual para los recibos, que rutas de acceso a datos compartidos, etc.
- Usuario: si en nuestra aplicación el usuario puede configurarse cosas, muchas de esas configuraciones deben acompañar al usuario de forma independiente a la máquina: Preferencias de colores, vistas de documentos, filtros personalizados, etc.
- Global: Hay configuraciones que afectan de forma general al programa: los permisos de acceso, ruta de instalación, nº de serie, etc.
- Documento/empresa: Si el programa maneja documentos o es multiempresa, para cada uno de ellos habrán configuraciones o datos que se han de tener en cuenta de forma independiente a la máquina y al usuario.
Normalmente utilizo una única tabla para almacenar estas configuraciones, con la siguiente estructura:
ID Identificador único TABLA A que tabla o entorno pertenece el dato: GLOBAL, USER, LOCAL, etc. ID_TABLA Identificador del usuario, empresa, documento, etc o NULL si es global DATO Nombre/código del dato, por ejemplo: PATH_PDF o PATH_CONTAPLUS o COLOR_WARNING TIPO Tipo del dato: I=integer, F=float, D=fecha, S=cadena, B=bit, etc. VALOR Valor almacenado convertido en cadena Luego al entrar en el programa lo cargo en listas de objetos para no tener que ir haciendo consultas cada vez que necesito algo de la configuración.
