Notas de la versión — WUIC Framework v1.7.0
Fecha: 11 de agosto de 2026 Versión publicada anterior: 1.5.0 (21 de julio de 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
Paquetes sustituidos el 15 de agosto de 2026. Los archivos publicados inicialmente incluían un
appsettings.jsonconautoGeneratedQueryTimeouten1: con ese valor, toda consulta que supere un segundo termina con un error del servidor. También habían quedado algunos ajustes de la cabecera (logotipo, orientación del menú, selector de temas, notificaciones) de una sesión de pruebas. Los archivos se han reconstruido y sus sumas de verificación actualizado.Si descargaste antes del 15 de agosto: vuelve a descargar el paquete, o abre
appsettings.jsony devuelveautoGeneratedQueryTimeouta30, eliminando las clavesheader-logo,header-logo-position,header-menu-orientation,header-show-theme-selector,header-menu-multicolumn-submenuyheader-show-notificationssi no las has definido tú. Ninguno de los dos ajustes afecta a los datos: basta con editar el archivo y reiniciar.
Tres semanas de trabajo en dos frentes. El primero es el aspecto: llega el Theme Builder, una página desde la que componer temas a medida — colores, tipografía, fondo, densidad, representación de la cuadrícula — que se aplican a todos los usuarios de la instalación, y la cabecera de la aplicación se ha rediseñado y hecho configurable. El segundo es la integración y la observabilidad: el nuevo Webhook Hub para recibir y enviar eventos con firma y reintentos, y el Performance Inspector que mide los tiempos de fetch y render por ruta. El chatbot aprende a actuar sobre otras tres superficies de la aplicación y a consultar el esquema de la base de datos.
🎨 Theme Builder
Una nueva página bajo Administración permite componer temas personalizados sin tocar código. Cada tema guardado aparece en el selector de temas de todos los usuarios de la instalación, junto a los predefinidos.
Qué se puede configurar:
- Color principal, del que se genera la escala completa de 11 tonos: la escala sigue siendo pulsable, y elegir un tono más oscuro lo promueve a color principal. Una etiqueta indica la relación de contraste WCAG alcanzada (AAA / AA / AA-large / fail).
- Superficies claras y oscuras, radio de las esquinas y densidad (cómoda o compacta).
- Tipografía: familia tipográfica de un catálogo de fuentes del sistema o pila libre, y tamaño base que escala toda la interfaz.
- Fondo de página: color sólido, degradado o imagen. El degradado puede tener una deriva lenta opcional que hace oscilar su inclinación con el tiempo; la imagen se configura con ajuste, repetición, posición y un velo oscuro para que el texto siga siendo legible.
- Cuadrícula: las filas alternas y la fila seleccionada ya no son colores fijos sino mezclas entre la superficie y un acento, gobernadas por dos mandos de intensidad y con la opción de un acento distinto del color principal.
- Modo claro/oscuro libre o impuesto por el tema.
La vista previa es en vivo y aplica el tema a toda la página mientras se compone, sin tocar las preferencias del usuario: al salir, recargar o cerrar el navegador vuelve el tema propio.
La exportación a Excel sigue el tema: un archivo exportado con un tema personalizado activo sale con los colores de ese tema — cabecera, filas alternas, bordes — en lugar de los grises genéricos. Se han añadido estilos de reserva para todas las familias de preajustes, de modo que un tema aún no muestreado hereda el aspecto de su familia.
El catálogo de temas predefinidos se amplía con nuevas variantes, y el tema activo se aplica ya en el primer fotograma tras una recarga, sin el parpadeo del tema anterior.
🖥️ Cabecera rediseñada y configurable
La cabecera de la aplicación es ahora un componente del framework: las instalaciones la heredan en lugar de mantener una copia. El bloque superior derecho se ha compactado — selector de temas, claro/oscuro, idioma, notificaciones y área de usuario viven en una tarjeta que se expande al pasar el ratón — y el área de usuario muestra nombre, rol, licencia y cierre de sesión.
Una nueva sección Header & Menu en los ajustes permite elegir la orientación del menú (horizontal arriba o abajo, vertical a la izquierda o a la derecha), cargar un logotipo y posicionarlo, y activar o desactivar el selector de idioma, el de temas y las notificaciones. También se puede desactivar la disposición automática en varias columnas de las entradas de submenú: en ese caso los submenús largos pasan a ser desplazables en vez de quedar cortados.
🔗 Webhook Hub
Nuevo sistema para integrar la aplicación con servicios externos, en ambas direcciones.
De salida: los eventos se encolan y se entregan de forma asíncrona, con firma HMAC del payload, reintentos a intervalo fijo o exponencial, cola de dead letter para las entregas fallidas definitivamente y posibilidad de reproducir una entrega. Cada intento queda registrado en los logs.
De entrada: el endpoint POST /api/webhooks/inbound acepta llamadas externas y las encamina según una configuración de metadatos — ejecución SQL, llamada HTTP o invocación de un método — con protección anti-replay.
Se incluyen además políticas de notificación con periodo de silencio configurable, una API administrativa para gestionar los endpoints y un job del planificador que vacía la cola. Toda la configuración — endpoints, eventos, suscripciones, reglas de entrada — vive en tablas de metadatos: añadir una integración no requiere ni código dedicado ni un nuevo despliegue. La página «Webhook Hub» de la documentación integrada recoge el procedimiento completo en 5 idiomas.
📈 Performance Inspector
El framework puede recoger métricas de fetch y render para cada ruta, agregarlas y mostrarlas en un panel administrativo: media, p95, máximo y recuento, con una retención de 7 días y activación ruta por ruta.
La función está desactivada de forma predeterminada y se habilita con AppSettings:enablePerformanceInspector, en hot-reload. Junto a las métricas hay un inspector de la calidad del dato, activable por ruta desde el props bag (extraProps.qualityInspector).
🤖 Chatbot: nuevas acciones y lectura del esquema
El chatbot RAG gana diez nuevos tipos de acción y la capacidad de consultar la estructura del proyecto.
- Tres nuevas superficies contextuales: pivot builder, editor de ajustes y report designer. El chatbot propone acciones sobre la página en la que uno se encuentra. En el editor de ajustes los cambios solo se preparan: guardar sigue siendo un gesto explícito del usuario. En el volcado enviado al modelo los valores reservados — cadenas de conexión, contraseñas, claves, licencia — están enmascarados, y una lista de exclusión impide escribirlos. En el report designer se genera siempre un archivo nuevo con fecha y hora, sin tocar el informe abierto.
- Operaciones sobre metadatos: creación de tabla, scaffolding de tablas, vistas y columnas, movimiento de entradas de menú. Las dos operaciones no reversibles — eliminar una columna y eliminar una entrada de menú — exigen una confirmación explícita verificada también en el servidor, de modo que se aplica incluso cuando la petición llega de un cliente sin interfaz.
- Introspección: el chatbot puede enumerar conexiones (solo los nombres, nunca las cadenas de conexión), bases de datos, tablas, columnas y el árbol del menú. Sin estas lecturas no podía conocer los identificadores reales sobre los que operar.
Una nueva página de documentación enumera los prompts admitidos, verificada frente a las pruebas automáticas.
📊 Spreadsheet: visibilidad de columnas alineada con la cuadrícula
El spreadsheet respeta ahora los mismos indicadores de visibilidad que la list grid: mc_hide_in_list, mc_hide_in_edit y mc_show_in_filters. Una columna oculta en el listado ya no aparece en la hoja, y una columna oculta en edición ya no es editable en las celdas.
🛡️ Seguridad
Hardening best-effort en la generación asistida de informes: el nombre de archivo solicitado ahora se valida rechazando rutas absolutas y caracteres no permitidos, con una comprobación que se comporta igual en Windows y en Linux — antes se apoyaba en una normalización que filtraba de forma distinta en ambos sistemas. El error devuelto distingue una configuración no válida de un fallo de generación, de modo que quien integra el framework no busca el problema en el sitio equivocado.
🐛 Correcciones destacadas
- Calendario, primera carga: la vista mostraba datos no filtrados por el intervalo visualizado — normalmente ningún evento en el mes actual, aun habiendo citas. La primera carga se lanzaba antes de que estuvieran disponibles los campos de inicio y fin configurados para el arquetipo, y ninguna petición posterior lo corregía. Ahora los campos se resuelven antes de componer el filtro y, si llegan después, los datos se vuelven a pedir una sola vez.
- Escenas 3D con licencia professional: las páginas del diseñador y del visor 3D redirigían a la pantalla de acceso denegado, porque la funcionalidad no estaba incluida en ningún perfil de licencia. Ahora forma parte del perfil professional.
- Informes en Linux: la generación asistida de un informe fallaba porque las fuentes se gestionaban mediante una biblioteca gráfica disponible solo en Windows.
- Performance Inspector, agregación: dos ejecuciones solapadas del trabajo de agregación — el panel lo lanza en su propia recarga y además puede ejecutarse a mano — terminaban con un error de clave duplicada. Además, la ventana de datos en bruto no estaba alineada con el límite del bucket diario, por lo que el bucket más antiguo se reconstruía a partir de un subconjunto de los eventos.
- Linux tras un proxy inverso: las URL absolutas generadas por el backend perdían el puerto y usaban el esquema equivocado cuando la instalación se sirve en un puerto no estándar o solo por HTTP.
- Oracle, guardado de escenas 3D: el guardado fallaba por el uso de un nombre de parámetro reservado y por la conversión de los valores numéricos. Corregidos ambos, junto con el tratamiento de las columnas con nombre en minúsculas entrecomillado.
- Oracle, exposición OData: las columnas se forzaban a mayúsculas en lugar de usar el nombre físico declarado en los metadatos, lo que hacía inalcanzables las entidades con nombres mixtos.
- PostgreSQL y Oracle, lookups en gráficos y agrupaciones: el campo descriptivo de un lookup no se resolvía del nombre lógico al físico, y la agrupación mostraba valores vacíos o erróneos.
- Chatbot, confirmaciones ausentes: en cuatro puntos la petición de confirmación no aparecía nunca por una llamada mal formada; en dos de ellos el borrado (historial y sesiones del chat) ocurría sin preguntar nada. Ahora toda confirmación pasa por el mismo camino y, ante un error, la respuesta es «cancelar».
- Importación de metadatos: las rutas cuyo campo de base de datos está vacío — es decir, las que usan la base de datos predeterminada de la aplicación — no podían importarse, y el error sugería un problema de permisos o una base de datos equivocada.
- Visor 3D: la escena ocupaba una franja horizontal en lugar de la altura completa de la página.
- Interfaz, cuadrícula sobre fondo temático: el área bajo la última fila dejaba traslucir el fondo de la página, haciendo que la cuadrícula pareciera agujereada. Ahora la superficie de la cuadrícula sigue el tema, en claro y en oscuro.
🔧 Actualizaciones operativas recomendadas para quien actualiza
- Revisar
appsettings.jsontras la actualización: las claves nuevas tienen valores predeterminados prudentes y no requieren intervención, pero es un buen momento para repasarlas. - Performance Inspector: poner
AppSettings:enablePerformanceInspectorentruepara activarlo; permanece inactivo si la clave no existe. - Webhook Hub: no hace falta ninguna intervención para que sea accesible. Tablas, rutas administrativas y entradas de menú — agrupadas en un submenú «Webhook Hub» bajo Administración — se crean en la primera carga del menú, tanto en una instalación nueva como al actualizar desde una versión anterior. Queda por configurar la integración: de salida son tres filas (el endpoint con URL de destino, secreto compartido, tiempo de espera y política de reintento; el evento; la suscripción que los enlaza), de entrada un endpoint con dirección
inboundy una regla de encaminamiento. La firma viaja en la cabeceraX-Wuic-Signature; el procedimiento completo está en la página «Webhook Hub» de la documentación integrada. - Theme Builder: la tabla de temas se crea en el primer guardado. Si se usan temas personalizados, comprobar la exportación a Excel de una cuadrícula para confirmar que los colores son los esperados.
- Chatbot: las nuevas acciones están disponibles tras reiniciar el motor RAG; las operaciones no reversibles exigen confirmación y no pueden aplicarse sin ella.
- Linux tras un proxy inverso: si la instalación responde en un puerto no estándar o solo por HTTP, regenerar la configuración de nginx o alinear a mano el vhost existente con
proxy_set_header Host $http_host;yproxy_set_header X-Forwarded-Proto $scheme;. Las actualizaciones no reescriben un vhost ya presente.