Tabla de Contenidos
Layout del menú (PWA_MENUS)
El menú lateral de SmartPWA —sus categorías, sus secciones y cada opción con su icono y su destino— también se declara en un texto de configuración guardado en la base de datos.
Es el hermano del layout de los formularios: mismo sitio
(un campo DESCRIPCION), mismos ámbitos y la misma idea de que
lo que se ve no está compilado en el programa. Lo que cambia es la sintaxis,
que aquí es más sencilla: una línea por opción.
Dónde vive
En la tabla PWA_MENUS, cuya clave es COD_MENU + TIPO_AMBITO +
COD_AMBITO + CLAVE_INSTALACION.
| Campo | Qué es |
|---|---|
COD_MENU | qué menú es. El de la aplicación se llama PRINCIPAL |
NOMBRE | descripción para quien administra («Menú principal de SmartPWA») |
DESCRIPCION | el texto de configuración, que es de lo que va esta página |
ACTIVO | S o N |
A quién se le aplica cada fila lo resuelve PWA_GET_MENU(COD_MENU,
COD_USUARIO) con las cinco precedencias de siempre: usuario, usuario del que
hereda, clave de instalación, clave de grupo y general. Está explicado en
Ámbitos: quién ve qué.
<note>El menú se lee de un solo tirón, así que su límite son 8000 caracteres (el del layout de un formulario es tres veces mayor). Un menú completo de los que hay hoy anda por la mitad.</note>
El menú nunca se queda vacío
Al arrancar, la aplicación pinta el menú en tres pasadas: primero el que lleva compilado dentro, después el que guardó de la última sesión y, cuando contesta la base de datos, el que le toca al usuario. Por eso:
- una base de datos a la que todavía no ha llegado el script de
PWA_MENUSenseña el menú de respaldo, sin dar ningún error; - sin conexión se sigue viendo el de la última vez;
- y un cambio en la base de datos no se ve hasta la siguiente entrada, o hasta recargar el menú desde la pantalla de menús.
El texto, línea a línea
M:Gestión de flota S:Formularios Control de vehículos | VEHI_CONTROL | speedometer Avisos | /avisos | notifications | badge=avisos
| Línea | Qué hace |
|---|---|
M:nombre | abre una categoría (lo que en el menú es una pestaña o un bloque) |
S:nombre | abre una sección dentro de la categoría |
título | destino | icono | opciones | una opción de la sección abierta |
| (en blanco) | se ignora: sirve para separar bloques y que el texto se lea |
– lo que sea | comentario, se ignora |
Repetir un M: que ya existe no crea otra categoría: sus opciones se suman a
las que ya tenía. Con las secciones pasa lo mismo. Eso permite escribir el
texto por bloques —o pegarle a un menú un trozo de otro— sin que salgan
categorías duplicadas.
Si alguna sección de la categoría tiene nombre, la categoría se pinta como acordeón; si ninguna lo tiene, sale la lista de opciones sin más.
La opción, campo a campo
Los cuatro campos van separados por barras verticales. Los espacios sobran, así que se pueden alinear en columnas para que el texto se lea, que es como están escritos los menús de hoy.
| Campo | Obligatorio | Qué es |
|---|---|---|
| título | sí | lo que se lee en el menú |
| destino | sí | adónde lleva (ver debajo) |
| icono | no | nombre del catálogo; sin él, o si no existe, sale el genérico |
| opciones | no | pares clave=valor separados por punto y coma |
El destino
| Se escribe | Adónde va |
|---|---|
VEHI_CONTROL | al listado genérico de esa tabla (/tabla-list-wrap/VEHI_CONTROL) |
/consultas/ALR_FICHA_VEHICULO | a esa consulta |
/planificador, /avisos | a una pantalla propia de la aplicación |
La regla es simple: si empieza por barra, es una ruta; si no, es una tabla.
Las opciones
| Se escribe | Qué hace |
|---|---|
badge=avisos | pinta junto al título el contador de avisos pendientes |
id=algo | identificador estable de la opción, para poder renombrarla sin perder su ancla |
defecto.CAMPO=valor | el listado propone ese valor al crear un registro nuevo |
cualquier=cosa | va como parámetro de la pantalla de destino; el más usado es titulo= |
Clientes | TERCERO | people | titulo=Clientes; defecto.TIPO=CL
Esa línea abre el listado de terceros titulado «Clientes» y, al dar de alta,
propone el tipo CL. Es la manera de sacar del mismo listado varias
opciones de menú distintas: clientes, proveedores y empleados son la misma
tabla TERCERO con distinto valor por defecto.
Los iconos
Se nombran sin sufijo (people, car, document-text), y la aplicación
pinta la variante que corresponde. Solo valen los del catálogo; los que no
estén salen con el icono genérico (ellipse), sin dar error. La opción
Comprobar el texto de la pantalla de menús dice cuáles no ha reconocido.
Para añadir un icono nuevo hay que meterlo en el catálogo del programa
(menu/iconos-menu.ts), que es un cambio de versión: al escribir un menú
conviene quedarse en los que ya hay.
Ejemplos
Una categoría con tres secciones
M:Gestión de flota S:Formularios Control de vehículos | VEHI_CONTROL | speedometer Siniestros | VEHI_SINIESTRO | warning Contratos de vehículos | VEHI_CAB_CONTRATO | document Avisos | /avisos | notifications | badge=avisos S:Configuración Vehículos | /consultas/ALR_FICHA_VEHICULO | car Perfiles documento | DOC_PERFIL | document-text S:Informes Flota de vehículos | /consultas/ALR_VEHICULOS_FLOTA | car Vehículos alquilados | /consultas/ALR_VEHICULOS_ALQUILADOS | car Resumen facturación | /consultas/ALV_DIARIO_FACTURAS_DELEG | stats-chart
Es como está montado el menú de flota: los formularios con los que se trabaja, lo que se configura de tarde en tarde y los informes, separados.
Una categoría sin secciones
M:Procesos Borrar lote asientos | /ejecutar-proceso/BORRAR_LOTE_ASIENTOS | trash Dotación amortizaciones | /ejecutar-proceso/CONTAB_AMORT2 | calculator
Sin ninguna S:, la categoría enseña sus opciones seguidas, sin acordeón. Y
un destino /ejecutar-proceso/PROC lleva a la pantalla que pide los
parámetros de un proceso y lo lanza.
Varias opciones sobre el mismo listado
M:Terceros S:Formularios Clientes | TERCERO | people | titulo=Clientes; defecto.TIPO=CL Proveedores | TERCERO | briefcase | titulo=Proveedores; defecto.TIPO=PR Empleados | TERCERO | person | titulo=Empleados; defecto.TIPO=EM Bancos | TERCERO | cash | titulo=Bancos; defecto.TIPO=BA
Texto comentado
-- Menú de la instalación 026: sin alquiler y sin planificador. M:Taller S:Formularios Partes de avería | CAB_PARTE_AVERIA | construct -- Pendiente de que entre en producción el nuevo circuito de garantías: -- Garantías | GARANTIA_PARTE | warning
Comentar una línea con – es la manera de quitar una opción sin perderla,
que en un menú por instalación se agradece.
Comprobar antes de dar por bueno un cambio
El menú se edita en Menús (/menus), y su propio menú de acciones trae:
| Opción | Para qué |
|---|---|
| Comprobar el texto | dice cuántas categorías y opciones salen, qué iconos no están en el catálogo y qué líneas no ha entendido, sobre lo que hay escrito en pantalla, antes de guardar |
| Comparar con el general | enseña lo que tiene el menú general y a este ámbito le falta |
| Copiar a otro ámbito | duplica esta definición para un usuario, una instalación o un grupo |
| Copiar script de actualización / Descargar script (.sql) | el UPDATE OR INSERT listo para llevar el cambio a otra base de datos |
Lo de Comparar con el general importa más de lo que parece: cada ámbito describe el menú entero, no un parche. Una instalación con menú propio no se entera de las opciones nuevas que se añadan al general, y esa comparación es lo que lo pone de manifiesto. Está explicado en Ámbitos: quién ve qué.
Recetas
| Lo que se quiere | Cómo se escribe |
|---|---|
| Un bloque nuevo en el menú | M:Tesorería |
| Separar dentro de él lo que se configura | S:Configuración |
| Una opción a un listado de tabla | Clientes | TERCERO | people |
| Una opción a una consulta | Flota | /consultas/ALR_VEHICULOS_FLOTA | car |
| Ponerle otro título al listado | titulo=Clientes |
| Que el alta proponga un valor | defecto.TIPO=CL |
| El contador de avisos al lado del título | badge=avisos |
| Quitar una opción sin perderla | comentar la línea con – |
| Que una instalación no vea una categoría | borrar esas líneas de su fila de PWA_MENUS |
Cómo se mantiene esta página
Como la de los formularios: se actualiza en el mismo cambio en que se toca la sintaxis.
| Qué | Dónde |
|---|---|
| Lectura del texto del menú | projects/smart-core/src/lib/menu/menu-config.ts |
| Catálogo de iconos | projects/smart-core/src/lib/menu/iconos-menu.ts |
| Lectura por ámbito, caché y respaldo | projects/smart-core/src/lib/servicios/menu.service.ts |
| Pantalla de edición | projects/smart-core/paginas/src/lib/pwa-menu-edit/ |
| Menús versionados y sus procedimientos | db/pwa_menus_datos.sql, db/pwa_menus_procs.sql |
