DataWeb 11.0.016/08/2024
Cosa c'è di nuovo
Con questa major version introduciamo tantissime novità sia a livello tecnologico che di funzionalità.
Per un approfondimento dettagliato vi rimandiamo alle sessioni di training dedicate.
- Nuove funzionalità
- Utente: se l'attuale utente è Developer, viene visualizzato anche questo ruolo nel form utente
- EmailService: l'indirizzo mittente FromAddress non è più richiesto e può essere centralizzato in AppSettings
- Newsletter: possibilità di caricare documenti al modello newsletter con download diretto dalla mail (richiede relativo endpoint nell'app)
- Gestito il salvataggio di una sezione dati aggiuntiva solo se attiva, in questo modo si possono rendere obbligatori controlli su sezioni dati opzionali
- SiteMap: integrazione della classe SiteMap per generare lato server le site map del progetto
- Gestione delle notifiche sulla sezione con visualizzzione nella header, nel selettore sezioni, nella dashboard
- Nuovo metodo ereditabile GetSectionNotificationCountAsync in Module
- Notifica del job in elaborazione nei moduli di import con GetSectionNotificationCountAsync
- Nuovo campo ReferenceId per le AppNotification in modo da poter richiamare una notifica ormai scaduta
- Integrazione delle sezioni AppSettings, Storage, AppErrors e AuditEvents nella struttura a sezioni di DataWeb
- Le sezioni Settings beneficiano di tutte le funzioni delle sezioni native di DataWeb come ad esempio gli widget e le notifiche
- Permessi Private_Settings personalizzabili sulle sezioni Settings
- Revisione di AuditEvent
- Revisione del modulo di logging e conversione in AuditEvent
- Nuovo metodo in AuditService per la retention dei log DeleteExpiredEntriesAsync(expirationDate)
- Nuovo campo EventContext per segmentare gli eventi
- Nuovo campo EventValues per tracciari i valori dei dati modificati
- Modifica dei tipi di azione al presente (esempio Modified diventa Modified)
- Integrazione di AuditEventStore nello storage CosmosDB con il pacchetto DataWeb.Data.AzureCosmosDB
- Revisione autenticazione e integrazione Authorization Server per SSO
- Rimozione dell'autenticazione con BearerToken e passaggio a cookie con AntiForgeryToken con BFF pattern
- Rinnovo cookie di autenticazione periodico
- Struttura dati e integrazione degli endpoint Token e Exchange
- Flusso di generazione e integrazione certificati per encryption e signing
- Integrazione di AuthorizationCodeFlow con PKCE per mobile e webapp
- Integrazione di CredentialFlow per comunicazione M2M
- Integrazione delle funzioni di Introspection, Revocation, Pruning
- Integrazione dell'interfaccia IFile per la gestione di file su diversi storage
- Revisione di MediaService e di tutto il flusso di elaborazione dello stream dati
- Introduzione di FileService
- Revisione di tutti i componenti sia in lista che nei form
- Gestione immagini
- Generazione delle thumbnail in formato Webp
- Possibilità di modificare il nome del file
- Integrazione dei settings per immagini e documenti
- Opzione di rimozione dei metadati nelle thumbnail e su ImageResult
- Opzione per mantenere il formato originale dell'immagine nelle thumbnail
- Opzione per impostare la qualità delle thumbnail
- Integrazione del cropping dell'immagine e relativa gestione nei Settings
- Integrazione di ImageContext per le thumbnail per segmentare le miniature su ImageResult
- Integrazione di un metodo delegato per eseguire elaborazioni sulle thumbnail su ImageResult (es: watermark)
- Opzione di disattivazione del crop sulle thumbnail su ImageResult
- Miglioramento di ModuleList
- Nuova navigazione delle sezioni adiacenti a quella corrente
- Nuova visualizzazione Card nelle liste con gestione lato utente tra Table e Card e valore predefinito nei Settings della sezione
- Passaggio alla clipboard nativa per spostare e collegare item
- Section DataField: aggiunto il campo ListName per visualizzare in lista e nel filtro di ricerca i titoli dei valori
- Section DataField: gestione del campo nidificato in un dato strutturato
- Revisione della funzione clona di item in Clona dati con replica solo delle versioni attive e in staging
- Revisione della funzione elimina di item con semplificazione delle azioni in base al numero di relazioni
- Integrazione dei ListWidget
- Classe e componente altamente personalizzabili per visualizzare dati e asset nelle liste
- Revisione generale degli widget in lista con ListWidget e gli hook ProcessValue e ProcessDeferredValueAsync
- ProcessDeferredValueAsync permette di recuperare dati che richiedono una maggiore computazione successivamente
- Nuovo ListWidgetLabel per mostrare dati Structured o personalizzati
- Nuovo ListWidgetImage per mostrare immagini da un percorso predefinito
- Nuovo ListWidgetCultureList per visualizzare un elenco di culture dato un dato strutturato di CultureEditor
- Nuovo ListWidgetCustom per personalizzare il contenuto della lista
- Miglioramento di ListWidgetFileRender e ListWidgetFileDowload per migliori prestazioni e disaccoppiamento da Item
- Integrazione delle ContextAction
- Revisione completa delle azioni esistenti sui controlli del form attraaverso ContextAction
- Permette di inserire azioni su controlli e moduli Explorer
- Supporto a ModuleList e ModuleListEdit con contesti FilteredItems e SelectedItems
- Nuove opzioni di esecuzione delle azioni: IsConfirmRequired, IsSaveItemBeforeProcess, IsReloadAfterProcess
- Revisione del flusso di esecuzione dell'azione con ActionHelper: conferma, dialog, validazione, salvataggio, esecuzione, aggiornamento dati
- Recupero valore risultante dalla action direttamente nel controllo associato senza ricaricare la pagina (vedi traduzione con CultureEditor)
- Possibilità di richiedere dati con una dialog attraverso la proprietà DialogFormName
- Nuova entità BasicItem
- Gestione delle entità basic con BasicItemService e BasicItemStore
- Tracciamento delle modifiche
- Nuovo ModuleListEdit con metodi personalizzabili
- Gestione delle funzioni CRUD con entità custom o con BasicItem
- Gestione di creazione, modifica, tracciamento campi modificati, ordinamento, clonazione, eliminazione, ricerca e filtratura
- Gestione di IsWrite sul singolo elemento
- Gestione dello status opzionale
- Pieno supporto di permessi, DataField, ListWidget, Form, ContextAction
- Resource: gestione dello status per avere risorce attive, inattive ed eliminate con soft delete
- integrazione in ModuleListEdit con BasicItem
- Duplicazione di una risorsa con status Deleted
- Solo le risorse Active sono recuperate nel progetto
- NewsletterSubscriber: integrazione in ModuleListEdit con BasicItem
- NewsletterSubscriber: nuovo Status Deleted per applicare il pattern soft delete agli iscritti newsletter
- Template: integrazione in ModuleListEdit con BasicItem
- Miglioramento versioni
- Aggiunta dell'anteprima contemporanea per più versioni in culture diverse
- Revisione completa del flusso di gestione degli stati versione
- Aggiunti controlli per segmentare meglio le versioni Global da quelle di cultura (non possono essere attive o in anteprima contemporaneamente)
- Nuovo modulo Cronologia
- Nuovi campi dati per tutti gli item: IsVersionHistory, VersionDate
- VersionDate: viene utilizzato per ordinare le versioni History
- IsVersionHistory: marca una versione come in cronologia
- Una versione History è collegata alla parent con il VersionName: 01-01
- Le versioni History non sono visualizzate nella lista delle versioni ma elencate nella modalità cronologia
- Ogni modifica crea una versione History se IsVersionHistory è attivo nelle opzioni della sezione dati
- Viene creata una nuova versione History solo se ci sono campi modificati e sono passati almeno 10 min dall'ultima versione History
- Si possono avere massimo 10 versioni in cronologia, la più vecchia viene progressivamente rimossa
- Il file associato viene replicato nella versione History
- Una versione History non è modificabile
- Una versione è History può essere ripristinata sulla versione collegata
- Al ripristino viene clonato il file per preservare la rimozione della versione in cronologia e del relativo file
- Una versione History è eliminabile (status Deleted)
- Nuovo controllo TextEditor
- Integrazione del nuovo editor con pacchetto Webpack dedicato
- Integrazione dei plugin standard
- Visualizzazione del contenuto per desktop, tablet, smartphone e full screen
- Drag'n drop e incolla per le immagini con autogenerazione del relativo item nella sezione immagini
- Palette di selezione immagine e documento con drag'n drop e selezione
- Palette di selezione template con drag'n drop e selezione
- Plugin custom ImageSize per impostare la dimensione dell'immagine sulla base delle risoluzioni definite nell'app
- Plugin custom ImageSizePreset per impostare visivamente e rapidamente le quattro dimensioni più comuni
- Plugin custom ResizeMode per impostare la ratio dell'immagine tra Crop e Fix
- Plugin custom per gestire le risoluzioni aggiuntive delle immagini per smartphone e tablet
- Recupero della lista di stili nell'editor da lista DataWeb dedicata
- Opzione nella creazione del controllo per il caricamento di un foglio stili dedicato all'editor
- TextEditorClassic per retro compatibilià sui contenuti esistenti
- Gestione degli editor con caricamento selettivo in base a TextEditor o TextEditorClassic
- Modulo Translate
- Attivazione del servizio Translator di XTRA
- Integrazione del nuovo pacchetto NuGet DataWeb.Localization.AzureTranslator
- Integrazione in Control del metodo perdonalizzabile ProcessOnTranslateAsync per elaborare il valore durante la traduzione
- Aggiunta della proprietà IsLocalization per i controlli del form
- Gestione della traduzione per il controllo Slug
- Gestione della traduzione per il controllo TextEditor con supporto ai link
- Gestione della traduzione di più versioni contemporaneamente
- Traduzione automatica in CultureEditor senza ricaricare il form
- Gestione di TranslationRule per vincolare alcuni valori di traduzione con store custom https://learn.microsoft.com/en-us/azure/ai-services/translator/dynamic-dictionary
- Dialog di sistema
- Nuovo modulo per la gestione di dialog modali sia il lista che nel dettaglio
- Dialog di traduzione della versione con selezione della versione sorgente
- Dialog di aggiunta nuova versione con selezione cultura e traduzione automatica
- Dialog Gestione Versioni con le azioni traduci, imposta stato, aggiungi localizzazioni
- ResourceAnalyzer
- Audit del codice sorgente per identificare risorse non utilizzate o mancanti
- Nuovo endpoint DataWeb ad accesso con AppKey per il recupero di tutte le informazioni delle risorse
- Report Csv risorse Unused
- Report Csv risorse Missing
- Possibilità di impostare le opzioni di analisi da AppSettings o da linea di comando
- Generazione Csv con https://joshclose.github.io/CsvHelper/
- Struttura
- Impostato VoidId (-1) per la SectionPart nuova, in questo modo è possibile riconoscere una SectionPart non salvata
- Tecnologia
- Async Cancellation Token: integrazione a tutti i livelli del token di cancellazione della richiesta
- Sostituita la validazione indirizzo email da RegEx a EmailAddress, validazione manuale con: var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute()
- Integrazione di TimeProvider https://blog.nimblepros.com/blogs/finally-an-abstraction-for-time-in-net/
- Sicurezza e stabilità: aggiornamento dei pacchetti server side NuGet
- Sicurezza e stabilità: aggiornamento dei pacchetti client side NPM
- Prestazioni
- Analisi e miglioramento indici tabelle SQL Server
- Caching del recupero file per le immagini con await newsRepo.GetImageCachedAsync(code, this.GetCulture())
- AppSettings: salvataggio in cache delle impostazioni per un veloce recupero
- Aggiunta del filtro [DisableHotlinking] per prevenire strategie di hot linking degli asset
- Marcatura delle classi non ereditabili con la keyword sealed https://www.meziantou.net/performance-benefits-of-sealed-class.htm
- Integrazione di FrozenDictionary per le risorse https://www.winfxitalia.com/script/643/Ottimizzare-Performance-Collection-Classi-FrozenSet-FrozenDictionary.aspx
- Sviluppo
- NewsletterEvent: refactoring eventi newsletter e aggiornamento DataDeliver
- Form: integrazione della proprietà "controls" sul controllo per aggiornamento cross componente (vedi FileRender)
- Localizzazione: gestione della cultura nativa DataWeb attraverso HTTPContext.Items e rimozione di CultureInfo in Localizer (vedi cultura en-CZ)
- Pagination: integrazione di PaginationHelper.GetPaginationInfo() per il recupero delle informazioni di paginazione
- TypeScript Common: integrazione di UrlHelper per il recupero di un valore nei parametri dell'url con UrlHelper.getUrlParamValue
- Debug: tracciamento delle query nella console in fase di Debug
- DevOps: integrazione delle migrazioni DevOps alla nuova versione
- DevOps: ottimizzazione del processo di migrazione con dati in linea
- DevOps: progress console tracing
- DevOps: rigenerazione dell'indice delle posizioni data una sezione (vedi AvionTourism.com)
- TemplateApp: aggiornamento di TemplateApp ai nuovi pattern
- Correzioni
- Bugfix: la selezione della versione nella lista a volte non funzionava perché l'evento di click era solo sul testo e non su tutto il pulsante
- Bugfix: su connessioni lente poteva accadere di salvare i dati di un item figlio su quelli padre, aggiunto il controllo di nav in moduledata
- Bugfix: Redirect con periodo impostato non funzionava a causa di un controllo errato
- Tuning e bugfix generale