Release Notes — WUIC Framework v1.0.20
Data: 12 maggio 2026 Versione precedente pubblicata: 1.0.19 (4 maggio 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
Release di consolidamento dopo la 1.0.19, focalizzata su bug fix con impact diretto su editor e visualizzazione (INSERT con trigger INSTEAD OF, campi numerici azzerati al blur, calendar vuoto alla prima navigazione, preservazione SQL custom nei report) e su un giro di allineamento del componente mappa alle nuove API Google Maps: completamento delle opzioni dell'archetype map, migrazione a Routes API per lo snap-to-roads, rimozione della dipendenza dalla drawing library deprecata.
🐛 Bug fix degni di nota
- INSERT con trigger
INSTEAD OF: tabelle con triggerINSTEAD OF INSERTperdevano il PK ritornato dallo statement esterno (OUTPUT INSERTED.<pk>ritornava0o NULL perché il trigger dirottava l'INSERT). Fix: la INSERT generata da_Metadati_methodsusa ora una table variable (@__inserted_pkconOUTPUT ... INTO) come canale primario e fallback aIDENT_CURRENT('<table>')quando il trigger consuma lo statement. Risolve anche il SQL Server msg 334 (OUTPUT INSERTEDsenzaINTOnon è ammesso su tabelle con trigger abilitati). - field-editor number — reset a 0 al blur: quando la colonna metadata aveva
mc_min_valueomc_max_valuevalorizzati, il campo numerico veniva azzerato al blur invece di mantenere il valore digitato. Il guard di range scattava prima del round-trip di parsing, leggendo un valore intermedio non-numerico e collassando a 0. Comportamento corretto: il valore viene confermato e clampato sui limiti solo se effettivamente fuori range, altrimenti resta invariato. - Archetype
map— opzioni completate: l'archetype del componente mappa ha tre nuove proprietà che chiudono gap UX comuni:polyline— overlay polyline per tracciamento percorsi (record GPS storicizzati). Raggruppamento per campo (groupByField), ordinamento (orderByField), colore per record/per gruppo, opzionale snap-to-roads, dots waypoint distinti dal path interpolato.clickableIcons— pass-through agoogle.maps.MapOptions.clickableIcons. Quandofalse, Google Maps non apre la propria info window built-in sui POI (negozi, fermate, indirizzi), che altrimenti intercettava i click destinati ai marker custom dell'app.markerColorField— colore delPinElementletto da un campo del record (CSS#rrggbb). Ignorato se il record ha già unacustomMarkerImageSrcFieldvalorizzata (immagine/SVG ha precedenza).
- Google Maps Directions API — deprecato:
DirectionsServiceè deprecato a partire dal 2026-02-25. Lo snap-to-roads delle polyline usa ora la nuova Routes API (google.maps.routes.Route.computeRoutes), con fallback automatico aDirectionsServicelegacy (funzionante fino al 2027-02-25) per key non ancora migrate. Travel mode legacy → routes mapping invariato (DRIVING/WALKING/BICYCLING). Batching automatico a 25 waypoint per chiamata. - Google Maps Drawing API — rimosso: la drawing library (
google.maps.drawing) è deprecata dal 2025-08 e rimossa nelle versioni di Maps JavaScript API rilasciate da maggio 2026. La logicaDrawingManagersuMapListComponentera soloconsole.logstub (nessuna feature reale di disegno persistita) ed è stata rimossa.PointFilterComponent(filtro geo per area/cerchio nelle list-grid) è stato riscritto con click+mousemove handler manuali — stessa UX (poligono via click multipli, cerchio via centro+raggio, chiusura dblclick), indipendente dalla libreria deprecata. - Report — preservazione query SQL custom via sentinel
__autogenerated: i report con SQL custom che alias-avano colonne non registrate nei metadata perdevano join/colonne perché la dynamic query auto-generata sovrascriveva la query utente. Fix cross-DBMS (MSSQL, MySQL, PostgreSQL, Oracle): ogni SELECT auto-generato inserisce ora1 AS [__autogenerated]come prima colonna; la pipeline metadata riconosce il token a runtime e preserva la query custom quando il sentinel non è presente. Permette layout Stimulsoft che leggono colonne non registrate come metadata (tipico in template fatturazione/PEC dove il SQL deriva colonne computed). - Calendar — eventi non visibili alla prima navigazione:
<wuic-scheduler-list>mostrava un calendario vuoto quando l'utente navigava direttamente a#/<route>/scheduler(l'inizializzazione di FullCalendar avveniva condata=[]prima della risposta async; un F5 lo popolava perché la cache di sessione consegnava i dati prima del mount). Fix: sincronizzazione esplicita degli eventi via API (removeAllEvents()+addEvent()) dopo il render del calendario, bypassando il binding[events]="data"non affidabile del wrapper FullCalendar 6.x Angular su update post-mount.
📦 Pacchetti aggiornati
| Package | Da | A |
|---|---|---|
| WuicCore | 1.0.19 | 1.0.20 |
| Wuic.Webcore | 1.0.19 | 1.0.20 |
| WuicOData | 1.0.19 | 1.0.20 |
| RuntimeEfCore | 1.0.19 | 1.0.20 |
| wuic-framework-lib (NPM) | 1.0.19 | 1.0.20 |
🔧 Aggiornamenti operativi raccomandati per chi aggiorna
- Eseguire
dotnet ef database updatese si è su EF migrations. - Se si usa lo snap-to-roads sulle polyline mappa: verificare che la propria Google Maps API key abbia la Routes API abilitata oltre alla Directions API. Senza Routes API il framework cade sul legacy
DirectionsService, che continua a funzionare ma è in finestra di deprecation (sunset 2027-02-25). - Se si dipendeva dalla drawing toolbar standard di
MapListComponent(zero use case noti, gli handler erano stub): la toolbar è stata rimossa. Nessuna azione richiesta per i filtri geo nelle list-grid —PointFilterComponentmantiene la stessa UX con implementazione interna. - Per usare il nuovo overlay polyline su una route mappa: aggiungere a
md_props_bag.archetypes.map.polylinela configurazione{ enabled: true, groupByField, orderByField, ... }via designer o patch metadata.