Release Notes — WUIC Framework v1.7.27
Data: 14 ottobre 2026 Versione precedente pubblicata: 1.7.26 (13 ottobre 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
La 1.7.27 corregge una regressione della 1.7.26 sui filtri between con data e ora, rende le date scritte da insert e update indipendenti dalla cultura del server e completa l'allineamento di MySQL, PostgreSQL e Oracle a SQL Server. In sintesi:
- filtro
betweencon estremi ISO che includono l'ora di nuovo funzionante su SQL Server, PostgreSQL e Oracle con un server in italiano; - cambio visibile ai client delle API: una data inviata come testo non ISO 8601 a insert/update risponde 400
errors.input.date_not_iso; - operazione disabilitata sulla route: 403
errors.auth.operation_disabledinvece di 400, sui quattro database; - correzioni dei provider MySQL, PostgreSQL e Oracle (gruppi di filtri annidati, filtri su colonne non selezionate, pivot, valori distinti, viste del pivot);
- export in background con avanzamento anche su MySQL, PostgreSQL e Oracle.
Dove è stato verificato: test unitari e test con database reale su SQL Server, MySQL, PostgreSQL e Oracle; test end-to-end della documentazione sui quattro database per filtri della griglia e del pivot, pivot builder, export in background e coda degli export (su una tabella da 230.000 righe) e per i sei test che salvano date (editor data, wizard, timeline, concorrenza ottimistica, import).
🐛 Regressione della 1.7.26: between con data e ora
Con un server in italiano un filtro between con estremi ISO comprensivi di ora (2015-12-31T23:59:59) veniva riletto nel formato del server: su SQL Server il filtro dava un errore di conversione, su PostgreSQL e Oracle un errore di formato o giorno e mese invertiti. Gli estremi restano ora in ISO invariante; gli estremi con la sola data erano già corretti.
🚦 Date in insert e update: solo ISO 8601 (cambio visibile ai client delle API)
- Testo non ISO = 400. Una data che arriva come testo a
insertRecord,updateRecord,batchRecord, clone o OData deve essere ISO 8601:2026-10-13,2026-10-13T14:30:00o2026-10-13 14:30:00, con secondi, frazioni,Zo offset facoltativi. Altrimenti la risposta è HTTP 400errors.input.date_not_isoconargs.columneargs.value. Prima il testo era letto nella cultura del server:05/10/2026era il 5 ottobre su un server italiano e il 10 maggio su uno americano, e un testo illeggibile dava 500. - Job dello scheduler. La stessa regola vale per i
params_valuesscritti a mano dei job che eseguono insert o update: le date vanno scritte in ISO. - Testo con
Z. Mantiene la stessa ora in UTC su tutti i database, come una data del JSON; prima, viabatchRecord, SQL Server e MySQL la convertivano nell'ora locale del server. - Date di logging nella risposta. La data di inserimento, modifica o cancellazione restituita nell'entity è in ISO (
yyyy-MM-ddTHH:mm:ss) e, rimandata in un update, viene accettata. Verificato con database reale su SQL Server, MySQL e PostgreSQL; su Oracle con i test unitari. - Import da file. Le date in formato locale della cultura del server continuano a essere lette; una cella non leggibile fa fallire la riga con
errors.input.date_not_iso. - Letterali SQL. Le date scritte nell'SQL di insert e update sono in cultura invariante su tutti i database: con una cultura a calendario buddista (th-TH) l'anno usciva 2569.
Difetti corretti con questo lavoro:
- PostgreSQL e Oracle, giorno e mese invertiti. Con un server in italiano una data salvata dal form come il 12/10/2026 veniva scritta come il 10/12/2026.
- Salvataggio batch della griglia e del foglio. Una data a mezzanotte veniva inviata in UTC e arrivava come il giorno precedente; ora viene inviata come nel salvataggio del singolo record.
- Foglio. Una data incollata o trascinata in una cella data viene convertita in ISO con il formato della lingua corrente.
🔐 Operazione disabilitata: 403
Insert, update, delete o ripristino su una route che ha quell'operazione disabilitata rispondono HTTP 403 errors.auth.operation_disabled (con la route) su SQL Server, MySQL, PostgreSQL e Oracle; prima la risposta era 400 errors.validation.failed su tutti e quattro.
🗄️ MySQL, PostgreSQL e Oracle
- Gruppi di filtri annidati. Su PostgreSQL e Oracle un gruppo dentro il filtro (da "Chiedi ai dati" o dal filtro avanzato della griglia) non veniva applicato e la lista restituiva righe in più. Un sottogruppo dentro un gruppo funziona su tutti i database: su SQL Server ripeteva il gruppo, su MySQL dava un errore di sintassi.
- Filtri su colonne non selezionate. Su PostgreSQL e Oracle un filtro su una colonna della tabella non richiesta dalla lista (colonne nascoste dall'utente, export, "Chiedi ai dati") veniva ignorato in silenzio; ora si applica, come su SQL Server e MySQL.
betweennel pivot. Il filtro a intervallo del pivot funziona su SQL Server, MySQL, PostgreSQL e Oracle.- Date nei confronti. Le date dei filtri della griglia e del pivot si scrivono in formato ANSI/ISO indipendente dalla cultura del server (prima su Oracle
ORA-01858/ORA-01843, su SQL Server un errore di conversione con login in italiano); una data illeggibile dà un errore tipizzato. - Valori distinti. Su Oracle funzionano anche su colonne di testo lungo (
ORA-22848); su MySQL rispettanoDISTINCTe i vincoli di riga della route. - Viste del pivot.
scaffoldViewe la vista creata dal pivot registrano unmd_idvalido su PostgreSQL, Oracle e SQL Server (prima 0) e il job di aggiornamento della vista si crea anche su PostgreSQL e Oracle. - Utenti su MySQL. La ricerca di un utente per id, nome o email rilegge dal database se l'utente non è in cache: un utente appena creato risultava inesistente (401).
- Export in background. Su MySQL, PostgreSQL e Oracle l'avanzamento dell'export arriva al dialog e alla coda come su SQL Server (prima saltava da 0 a 100%); su Oracle la lettura dell'avanzamento falliva con
ORA-00911.
📦 Pacchetti aggiornati
| Package | Da | A |
|---|---|---|
WuicCore |
1.7.26 | 1.7.27 |
Wuic.Webcore |
1.7.26 | 1.7.27 |
WuicOData |
1.7.26 | 1.7.27 |
RuntimeEfCore |
1.7.26 | 1.7.27 |
Wuic.MySqlProvider |
1.7.26 | 1.7.27 |
Wuic.PostgresProvider |
1.7.26 | 1.7.27 |
Wuic.OracleProvider |
1.7.26 | 1.7.27 |
wuic-framework-lib (npm) |
1.7.26 | 1.7.27 |
🔧 Aggiornamenti operativi raccomandati per chi aggiorna
- Client delle API: verificare che insert, update, batch, clone e OData inviino le date in ISO 8601; un formato locale ora risponde 400
errors.input.date_not_iso. - Job dello scheduler che eseguono insert o update: riscrivere in ISO le date dei
params_values. - Gestione degli errori: chi intercettava il 400 di un'operazione disabilitata deve gestire il 403
errors.auth.operation_disabled. - Traduzioni: la chiave
errors.input.date_not_iso(cinque lingue) è negli script di primo avvio e viene aggiunta all'avvio anche ai database esistenti.