WUIC ← Retour aux téléchargements

Notes de version — WUIC Framework v1.7.0

Date: 11 août 2026 Version publiée précédente: 1.5.0 (21 juillet 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21


Paquets remplacés le 15 août 2026. Les archives publiées initialement contenaient un appsettings.json avec autoGeneratedQueryTimeout à 1 : avec cette valeur, toute requête dépassant une seconde se termine par une erreur du serveur. Quelques réglages d'en-tête (logo, orientation du menu, sélecteur de thèmes, notifications) étaient également restés d'une session de test. Les archives ont été reconstruites et leurs sommes de contrôle mises à jour.

Si vous avez téléchargé avant le 15 août : téléchargez à nouveau le paquet, ou ouvrez appsettings.json et remettez autoGeneratedQueryTimeout à 30, en supprimant les clés header-logo, header-logo-position, header-menu-orientation, header-show-theme-selector, header-menu-multicolumn-submenu et header-show-notifications si vous ne les avez pas définies vous-même. Aucun de ces réglages ne touche aux données : modifier le fichier et redémarrer suffit.


Trois semaines de travail sur deux fronts. Le premier est l'apparence : arrive le Theme Builder, une page depuis laquelle composer des thèmes sur mesure — couleurs, typographie, arrière-plan, densité, rendu de la grille — qui s'appliquent à tous les utilisateurs de l'installation, et l'en-tête de l'application a été redessiné et rendu configurable. Le second est l'intégration et l'observabilité : le nouveau Webhook Hub pour recevoir et envoyer des événements avec signature et réessais, et le Performance Inspector qui mesure les temps de fetch et de rendu par route. Le chatbot apprend à agir sur trois autres surfaces de l'application et à interroger le schéma de la base de données.


🎨 Theme Builder

Une nouvelle page sous Administration permet de composer des thèmes personnalisés sans toucher au code. Chaque thème enregistré apparaît dans le sélecteur de thèmes de tous les utilisateurs de l'installation, à côté de ceux fournis.

Ce que l'on peut régler :

L'aperçu est en direct et applique le thème à toute la page pendant qu'on le compose, sans toucher aux préférences de l'utilisateur : en quittant, en rechargeant ou en fermant le navigateur, son propre thème revient.

L'export Excel suit le thème : un fichier exporté avec un thème personnalisé actif sort avec les couleurs de ce thème — en-tête, lignes alternées, bordures — au lieu des gris génériques. Des styles de repli ont été ajoutés pour toutes les familles de préréglages, si bien qu'un thème pas encore échantillonné hérite de l'aspect de sa famille.

Le catalogue des thèmes fournis s'élargit de nouvelles variantes, et le thème actif est appliqué dès la première image après un rechargement, sans le clignotement du thème précédent.

🖥️ En-tête redessiné et configurable

L'en-tête de l'application est désormais un composant du framework : les installations en héritent au lieu d'en maintenir une copie. Le bloc en haut à droite a été compacté — sélecteur de thèmes, clair/sombre, langue, notifications et espace utilisateur tiennent dans une carte qui se déplie au survol — et l'espace utilisateur affiche nom, rôle, licence et déconnexion.

Une nouvelle section Header & Menu dans les paramètres permet de choisir l'orientation du menu (horizontal au-dessus ou en dessous, vertical à gauche ou à droite), de charger un logo et de le positionner, et d'activer ou de désactiver le sélecteur de langue, celui de thèmes et les notifications. Il est aussi possible de désactiver la disposition automatique en plusieurs colonnes des entrées de sous-menu : les sous-menus longs deviennent alors défilables au lieu d'être tronqués.

🔗 Webhook Hub

Nouveau système pour intégrer l'application à des services externes, dans les deux sens.

En sortie : les événements sont mis en file et livrés de façon asynchrone, avec signature HMAC du payload, réessais à intervalle fixe ou exponentiel, file de dead letter pour les livraisons définitivement échouées et possibilité de rejouer une livraison. Chaque tentative est tracée dans les logs.

En entrée : l'endpoint POST /api/webhooks/inbound accepte les appels externes et les achemine selon une configuration de métadonnées — exécution SQL, appel HTTP ou invocation d'une méthode — avec protection anti-replay.

Sont également inclus des politiques de notification avec période de silence configurable, une API d'administration pour gérer les endpoints et une tâche du planificateur qui vide la file. Toute la configuration — endpoints, événements, abonnements, règles d'entrée — vit dans des tables de métadonnées : ajouter une intégration ne demande ni code dédié ni nouveau déploiement. La page « Webhook Hub » de la documentation intégrée décrit la procédure complète en 5 langues.

📈 Performance Inspector

Le framework peut collecter des métriques de fetch et de rendu pour chaque route, les agréger et les présenter dans un tableau de bord d'administration : moyenne, p95, maximum et nombre, avec une rétention de 7 jours et une activation route par route.

La fonction est désactivée par défaut et s'active avec AppSettings:enablePerformanceInspector, en hot-reload. À côté des métriques, un inspecteur de la qualité des données s'active par route depuis le props bag (extraProps.qualityInspector).

🤖 Chatbot : nouvelles actions et lecture du schéma

Le chatbot RAG gagne dix nouveaux types d'action et la capacité d'interroger la structure du projet.

Une nouvelle page de documentation liste les prompts pris en charge, vérifiée face aux tests automatisés.

📊 Spreadsheet : visibilité des colonnes alignée sur la grille

Le spreadsheet respecte désormais les mêmes indicateurs de visibilité que la list grid : mc_hide_in_list, mc_hide_in_edit et mc_show_in_filters. Une colonne masquée dans la liste n'apparaît plus dans la feuille, et une colonne masquée en édition n'est plus modifiable dans les cellules.

🛡️ Sécurité

Hardening best-effort sur la génération assistée des rapports : le nom de fichier demandé est désormais validé en rejetant les chemins absolus et les caractères non autorisés, avec un contrôle qui se comporte de la même manière sous Windows et sous Linux — il s'appuyait auparavant sur une normalisation qui filtrait différemment sur les deux systèmes. L'erreur renvoyée distingue une configuration invalide d'un échec de génération, afin que les intégrateurs ne cherchent pas le problème au mauvais endroit.

🐛 Corrections notables

🔧 Mises à jour opérationnelles recommandées

  1. Revoir appsettings.json après la mise à jour : les nouvelles clés ont des valeurs par défaut prudentes et ne demandent aucune intervention, mais c'est le bon moment pour les parcourir.
  2. Performance Inspector : mettre AppSettings:enablePerformanceInspector à true pour l'activer ; il reste inactif si la clé est absente.
  3. Webhook Hub : aucune intervention n'est nécessaire pour le rendre accessible. Tables, routes d'administration et entrées de menu — regroupées dans un sous-menu « Webhook Hub » sous Administration — sont créées au premier chargement du menu, aussi bien sur une installation neuve qu'en mise à jour depuis une version antérieure. Reste à configurer l'intégration : en sortie trois lignes (l'endpoint avec URL de destination, secret partagé, délai et politique de réessai ; l'événement ; l'abonnement qui les relie), en entrée un endpoint de direction inbound et une règle d'acheminement. La signature voyage dans l'en-tête X-Wuic-Signature ; la procédure complète figure dans la page « Webhook Hub » de la documentation intégrée.
  4. Theme Builder : la table des thèmes est créée au premier enregistrement. Si vous utilisez des thèmes personnalisés, vérifiez l'export Excel d'une grille pour confirmer que les couleurs sont celles attendues.
  5. Chatbot : les nouvelles actions sont disponibles après le redémarrage du moteur RAG ; les opérations non réversibles exigent une confirmation et ne peuvent pas être appliquées sans elle.
  6. Linux derrière un reverse proxy : si l'installation répond sur un port non standard ou uniquement en HTTP, régénérer la configuration nginx ou aligner à la main le vhost existant sur proxy_set_header Host $http_host; et proxy_set_header X-Forwarded-Proto $scheme;. Les mises à jour ne réécrivent pas un vhost déjà présent.