La misma aplicación, la misma versión y la misma base de datos, pero cada instalación —y si hace falta cada usuario— con sus formularios, su menú y sus informes. Eso son los ámbitos.
Lo que se configura por ámbito son hoy tres cosas, y las tres funcionan igual:
| Qué se configura | Tabla | Quién elige la fila | Página |
|---|---|---|---|
| El layout de una ficha de edición | PWA_FORMS | PWA_GET_FORM | Diseño de formularios |
| El menú de la aplicación | PWA_MENUS | PWA_GET_MENU | Diseño del menú |
| El diseño de informe de una consulta | PWA_INFORMES | PWA_GET_INFORME |
Las tres tablas llevan los mismos tres campos en su clave primaria, detrás de
lo que identifica el objeto (COD_FORM, COD_MENU o COD_PROC):
| Campo | Qué lleva |
|---|---|
TIPO_AMBITO | US un usuario, CI una clave de instalación o de grupo, G la definición general |
COD_AMBITO | el código del usuario o la clave, según el tipo |
CLAVE_INSTALACION | la instalación del usuario; solo se rellena en las de tipo US |
Los campos que no aplican no se dejan en blanco: llevan el comodín *.
Forman parte de la clave primaria, y una clave con un hueco vacío no se puede
guardar. La aplicación los rellena sola cuando se crea la definición desde la
pantalla de listado.
<note>Solo hay tres tipos de ámbito para cinco niveles de precedencia, porque
dos pares comparten fila: una definición US vale para el usuario y para
quien herede de él, y una CI vale para la clave de instalación y para la
del grupo. Lo que cambia es contra qué valor casa COD_AMBITO, no cómo se
guarda la fila.</note>
Cuando la aplicación necesita un layout, un menú o un informe, el procedimiento
PWA_GET_* busca en este orden y se queda con el primero que exista:
| # | Tipo | COD_AMBITO casa con | Para qué se usa |
|---|---|---|---|
| 1 | US | el usuario conectado | el caso raro: una pantalla a medida de una persona |
| 2 | US | USUARIO.USUARIO_MENUS del conectado | un usuario hereda la configuración de otro, así no se repite |
| 3 | CI | EMPRESA.CLAVE_INSTALACION (tres caracteres) | lo normal: lo propio de un cliente |
| 4 | CI | EMPRESA.CLAVE_INSTALACION_GRUPO (cuatro caracteres) | lo común a un grupo de instalaciones |
| 5 | G | — | la definición general, la que vale para todos |
Las claves de instalación tienen tres caracteres y las de grupo cuatro,
así que nunca se confunden aunque compartan campo. El censo de instalaciones,
con sus claves, está en Z_LICENCIAS, y la clave de la empresa en la que se
trabaja sale de EMPRESA.
El mismo código de usuario existe en varias empresas —hay un JUANMA en cada
una— y los scripts de mantenimiento se aplican a todas. Sin la clave de
instalación, la definición del usuario de un cliente le caería encima al
usuario homónimo de otro. Por eso, en las filas US, CLAVE_INSTALACION
es obligatoria y la aplicación no deja crearlas sin ella.
<note important>Cada definición describe el objeto entero, no un parche sobre el general.</note>
Una instalación con su propio layout de albarán tiene todo el layout del albarán; una con su propio menú tiene todo el menú. La consecuencia:
La pantalla de menús trae para esto la opción Comparar con el general, que dice qué opciones tiene el general y a este ámbito le faltan. Es lo primero que hay que mirar cuando alguien dice «a mí no me sale eso que habéis puesto».
Desde la aplicación, en el listado correspondiente —Formularios, Menús o Diseños de informe— con el botón de nuevo registro. Se piden solo el código del objeto y el ámbito; los comodines los pone la aplicación:
US, CI o G.US.La aplicación comprueba lo que no puede salir bien y lo dice con estas mismas palabras:
Recién creada, la definición está vacía: hay que pegarle el texto del general (o el de otra instalación parecida) y quitarle lo que no aplique. En los menús ese paso es una sola opción: Copiar a otro ámbito, desde la definición que sirve de origen.
La barra de título de las pantallas de edición lo dice: «Formulario albaran-venta-edit · Usuario JUANMA (026)», «· Clave de instalación 026» o «· General». Es la manera rápida de comprobar que se está tocando la definición que se cree.
Los ámbitos viven en la base de datos de cada cliente, así que un cambio hecho aquí no viaja solo. Las pantallas de formularios y de menús traen:
UPDATE OR INSERT de esta definición.
Ese script es idempotente —se puede ejecutar las veces que haga falta— y es lo
que se incorpora a la base del cliente por la vía de siempre. Las definiciones
generales están además versionadas en el repositorio
(db/pwa_forms_layouts.sql, db/pwa_menus_datos.sql), que es de donde
salen para todos los clientes; las de instalación o de usuario, al ser de uno
solo, no se versionan ahí.
CI a US. Lo que necesita un usuario suele necesitarlo su puesto, no su persona; y un ámbito de usuario es uno que nadie recuerda que existe cuando algo no sale.PWA_FORMS.| Qué | Dónde |
|---|---|
| Tipos de ámbito, comodín y descripciones | projects/smart-core/src/lib/utilidades/pwa-forms.ts |
| Lectura del layout por ámbito | projects/smart-core/src/lib/servicios/form-layout.service.ts |
| Lectura del menú por ámbito | projects/smart-core/src/lib/servicios/menu.service.ts |
| Alta de definiciones con sus comprobaciones | projects/smart-core/paginas/src/lib/tabla-list-wrap/ |
| Copiar a otro ámbito y comparar con el general | projects/smart-core/paginas/src/lib/pwa-menu-edit/ |
Procedimientos PWA_GET_FORM, PWA_GET_MENU, PWA_GET_INFORME | db/pwa_forms_procs.sql, db/pwa_menus_procs.sql, db/pwa_informes_procs.sql |