Instant Developer Cloud
Instant Developer Cloud — Note di rilascio

Versione 26.3_

Novità e miglioramenti della versione 26.3

Instant Developer Agent14

Utilizzo di TeamWorks

L'agente può ora lavorare con TeamWorks come farebbe l'utente dall'IDE: consultare lo stato del progetto, cambiare branch, confrontare le modifiche pendenti, effettuare i commit e annullare le modifiche. Le operazioni passano dagli stessi comandi usati dall'IDE, quindi restano visibili nell'interfaccia mentre l'agente lavora.

Le operazioni che modificano il progetto richiedono una richiesta esplicita dell'utente, il confronto delle modifiche è obbligatorio prima di un commit e le operazioni distruttive richiedono una conferma esplicita.

TeamWorks — stash delle modifiche e confronti rapidi

Il cambio di branch integra ora lo stash delle modifiche locali: il lavoro pendente non si perde quando si cambia contesto e può essere ripreso al ritorno sul branch. Il confronto delle modifiche e il commit scalano inoltre con la quantità di modifiche e non con la dimensione del progetto: sui progetti grandi la differenza è netta.

Revisione delle modifiche prima del commit

È ora possibile chiedere all'agente di far revisionare il proprio lavoro da un revisore indipendente, che esamina soltanto le modifiche pendenti senza aver seguito la conversazione. Il revisore restituisce i rilievi classificati per gravità e un verdetto di approvazione o di richiesta di modifiche, adattando i criteri al tipo di intervento svolto (correzione, nuova funzionalità o refactoring).

Controlli automatici sul lavoro svolto

Sono stati aggiunti 69 nuovi controlli automatici, che portano il totale da 36 a 105. Intercettano problemi che in precedenza non venivano segnalati: metodi mai richiamati, collection senza chiave esterna, datamap senza template, campi della datamap non collegati al documento, cancellazione a cascata mancante, pulsanti senza gestore del click e altri ancora.

Viene inoltre verificata la sintassi del codice JavaScript generato, che prima non veniva controllata: un errore di sintassi poteva superare tutti i controlli senza essere segnalato. I controlli vengono infine eseguiti in ogni caso al termine di ogni intervento dell'agente, anche quando l'agente non li richiede esplicitamente.

Verifica dell'applicazione su più tipi di interfaccia

Quando l'agente prova l'applicazione che ha realizzato, riesce ora a interagire con parti dell'interfaccia che prima non erano raggiungibili: le viste a schede, le voci dei menu a tendina, i menu popup e la barra dei menu di ShadowUI. Quando l'agente seleziona una voce di menu, l'utente vede il menu aprirsi e la voce essere selezionata, invece di osservare un cambiamento che avviene senza spiegazione.

Le eccezioni sollevate durante il caricamento di una pagina vengono ora segnalate all'agente, mentre prima passavano inosservate, e un'azione che apre una richiesta di conferma non blocca più la sessione.

Utilizzo delle animazioni

Le animazioni definite nel modello dell'applicazione (slide, fade, zoom, expand, class e ripple, con i relativi eventi scatenanti) non erano visibili all'agente: di conseguenza l'agente riteneva che il prodotto non le supportasse e ripiegava su CSS scritto a mano o su librerie esterne. Ora l'agente le riconosce, può crearle e modificarle.

Precisione delle risposte

Grazie a campagne di test sistematiche su applicazioni reali è stata migliorata la precisione dell'agente su ShadowUI, sul framework Ionic e sui pattern di gestione dei dati, correggendo la documentazione interna che l'agente consulta durante il lavoro.

Verifica delle Web API dell'applicazione

Oltre a provare l'interfaccia utente, l'agente può ora invocare le Web API dell'applicazione in anteprima e verificarne le risposte. Quando realizza o modifica una Web API si accorge quindi da solo di un errore e lo corregge, senza dover chiedere all'utente di provarla al suo posto.

Indicazioni all'agente mentre lavora

Non serve più aspettare che l'agente abbia finito per correggere la rotta: i messaggi inviati mentre sta lavorando gli vengono recapitati subito e ne tiene conto nel lavoro in corso. L'agente si accorge inoltre degli undo, redo, revert e reset eseguiti dall'utente durante la sessione, invece di continuare a ragionare su uno stato del progetto ormai superato.

Scelta e costruzione dei pannelli FluidUI

L'agente sceglie il tipo di pannello più adatto al contesto seguendo una policy che l'utente può orientare dalla descrizione dell'applicazione; un controllo di paradigma evita ad esempio le griglie su telefono o nelle app rivolte al cliente finale. Un pannello descritto in modo minimo viene completato automaticamente come farebbe l'IDE. L'agente può inoltre creare sotto-pannelli ospitati in un campo statico e strutture master-detail.

Modelli Claude Sonnet 5 e Claude Opus 5 selezionabili

Tra i modelli AI selezionabili nelle impostazioni del DevAgent sono ora disponibili Claude Sonnet 5 e Claude Opus 5, che sostituiscono Claude Sonnet 4.6 e Claude Opus 4.6 offrendo un contesto più ampio e livelli di ragionamento più elevati. Claude Opus 5 è il modello consigliato. I progetti che utilizzavano i modelli sostituiti vengono aggiornati automaticamente.

Gestione delle conversazioni

Le conversazioni con l'agente possono essere rinominate ed eliminate, così da tenere in ordine l'elenco e ritrovare rapidamente quella che interessa quando se ne accumulano molte. Nelle risposte dell'agente, inoltre, gli oggetti del progetto citati sono diventati collegamenti: selezionandone uno si apre l'oggetto nell'IDE, senza doverlo cercare nell'albero del progetto.

Risorse binarie del progetto

Le risorse binarie del progetto, cioè immagini, font e file, restavano fuori dall'area a cui l'agente ha accesso, e ogni richiesta che ne comportasse la lettura non andava a buon fine. Ora l'agente può leggerle, ad esempio per esaminare un'immagine già presente nel progetto.

Test automatici dell'applicazione

Un'applicazione può ora avere i propri test automatici, salvati nel progetto come risorse di tipo Test script. Per creare un test è sufficiente descrivere all'agente che cosa deve verificare, e l'agente ne scrive lo script senza che sia necessaria alcuna registrazione. In alternativa il test si registra mostrando il flusso nell'anteprima, e la registrazione viene consegnata all'agente perché la trasformi in uno script eseguibile. I test si eseguono dall'IDE, uno alla volta o tutti insieme, con o senza anteprima visibile, e l'esito riporta gli script superati e le verifiche riuscite, con il dettaglio dei fallimenti nella console di debug. Anche l'agente può eseguirli, per verificare da sé il lavoro svolto.

App3

Stripe, pagamenti per conto di un account collegato

È stato aggiunto il parametro opzionale stripeAccount al metodo setKey di Stripe. Quando è valorizzato, tutte le chiamate a Stripe effettuate da quell'istanza vengono eseguite per conto dell'account Stripe collegato indicato, anziché sull'account principale. In questo modo è possibile incassare pagamenti per conto di account collegati, come previsto dalla modalità Stripe Connect.
Miglioramento relativo al ticket 001616-2021.

Stripe, conferma dei pagamenti con carte 3D Secure

È stato aggiunto il metodo confirmCardPayment alla libreria Stripe lato client. Permette di completare la sottoscrizione di un abbonamento quando la carta richiede l'autenticazione 3D Secure.
Miglioramento relativo al ticket 000929-2024.

Metodo getScreenshot disponibile su browser

Il metodo getScreenshot del plugin camera non era implementato quando l'applicazione veniva eseguita nel browser, quindi non era possibile catturare l'immagine dello schermo. Ora è disponibile anche in questo contesto.

Database2

Campi JSON più efficienti

Su PostgreSQL i campi di tipo JSON vengono ora creati come jsonb e gli indici definiti su questi campi vengono creati come indici GIN. Le query che interrogano il contenuto dei campi JSON risultano quindi molto più veloci.

Nota
Il nuovo comportamento si applica solo alle colonne e agli indici creati da questa versione in poi. Le colonne e gli indici già esistenti restano invariati; per beneficiare del miglioramento sui database esistenti occorre convertirli manualmente, ad esempio:
ALTER TABLE my_table ALTER COLUMN my_json_col TYPE jsonb USING my_json_col::jsonb;

DROP INDEX my_table_my_json_col_idx;
CREATE INDEX my_table_my_json_col_idx ON my_table USING gin (my_json_col);

Funzione trim fra le funzioni di stringa

La funzione trim, che toglie gli spazi all'inizio e alla fine di un testo, è ora fra le funzioni di stringa disponibili quando si scrive una query strutturata.

Datamap1

Riordino delle righe di una lista

Riordinando le righe di una lista con il ListSorter occorreva scrivere il codice dell'evento onReorder per riallineare le righe della datamap, altrimenti restavano disallineate rispetto agli elementi mostrati. Ora al riordino provvede la datamap, quando l'evento onReorder non è implementato oppure quando lo si richiede impostando la proprietà autoReorder del ListSorter. Con le righe raggruppate lo spostamento è ammesso all'interno dello stesso gruppo, mentre non viene applicato se la riga uscirebbe dal proprio gruppo, e l'evento lo segnala.

Document Orientation1

Blocco in scrittura della riga letta con LoadByKey e LoadByDNA

È stata aggiunta l'opzione forUpdate ai metodi LoadByKey e LoadByDNA: quando è attiva, la riga letta viene bloccata in scrittura fino al termine della transazione. È utile quando più sessioni devono leggere e aggiornare lo stesso valore senza sovrascriversi a vicenda, come nel caso dei contatori univoci.

FluidUI3

Pannelli e Alberi in stile ShadowUI

Nelle applicazioni che utilizzano il framework ShadowUI, i pannelli e gli alberi vengono ora disegnati con lo stile di ShadowUI, seguendo il tema dell'applicazione e integrandosi con gli altri elementi della videata.

Nota
Nei progetti esistenti, pannelli e alberi assumono il nuovo stile dopo aver aggiornato alla versione 26.3 i pacchetti FluidUI e ShadowUI.

Valori minimo e massimo per i campi data

Sono state aggiunte al campo del pannello le proprietà min e max, che permettono di limitare l'intervallo di valori selezionabili nei campi di tipo Date e Datetime.
Miglioramento relativo al ticket 000295-2025.

Messaggio di conferma della cancellazione personalizzato

È stata aggiunta la proprietà confirmDelete del pannello: impostandola a false è possibile disattivare il messaggio di conferma standard e gestire una propria richiesta di conferma prima di cancellare una riga.
Miglioramento relativo al ticket 000870-2025.

IDE6

Codice asincrono con async/await

È ora possibile scrivere il codice asincrono usando la sintassi standard async/await al posto di yield. I metodi asincroni vengono generati come funzioni async native e restituiscono direttamente il proprio risultato, quindi non prevedono più il parametro di callback in coda agli argomenti.

Il codice già scritto con yield e con le callback continua a funzionare: in fase di generazione viene convertito automaticamente nella forma equivalente basata su await.

Poiché un metodo asincrono restituisce ora una Promise, per avviare un'operazione senza attenderne il completamento non si utilizza più una funzione di callback: si richiama il metodo senza await, si gestisce il risultato con .then() e si intercettano gli eventuali errori con .catch().

Nota
Il passaggio ad async/await cambia alcuni dettagli di esecuzione rispetto a yield. In particolare un errore non gestito, che prima poteva restare silenzioso, ora viene propagato come eccezione, e i tempi di ripresa dopo una chiamata asincrona sono leggermente diversi. Si consiglia di verificare i punti in cui il codice si affida a queste condizioni.

Aggiornamento dei componenti client

Sono stati aggiornati i componenti di terze parti utilizzati lato client: FullCalendar, Chart.js, Swiper, Mermaid, Interact.js e ZXing.

Nota
L'aggiornamento di Swiper comporta il passaggio a una versione principale successiva, in cui le frecce di navigazione sono disegnate come immagini vettoriali. Si consiglia una verifica visiva nelle applicazioni che utilizzano questo componente.

Schede spostate tra le due sezioni dello schermo diviso

Lavorando con l'editor diviso in due sezioni, le schede aperte possono ora essere spostate da una sezione all'altra.

Operatori nullish `??` e `??=`

L'editor di codice gestisce ora gli operatori nullish ?? e ??=, formattandoli con la spaziatura corretta.

Riferimenti a risorse nel manifest delle PWA

È ora possibile riferirsi alle risorse dell'applicazione in qualunque punto del manifest di una PWA, e non più solo nelle icone. È sufficiente indicare il nome della risorsa preceduto dal simbolo $: in fase di generazione del manifest viene sostituito con l'URL della risorsa. Questo permette, ad esempio, di dichiarare widget con i relativi screenshot e template.

Intellisense nelle sottoquery

Scrivendo una query strutturata, l'intellisense propone tabelle e campi anche all'interno delle sottoquery.

IonicUI1

Ricerca full-text nelle IonSelect

È stata aggiunta alle IonSelect la proprietà fullText: quando è attiva, la ricerca funziona come un «contiene», cioè il testo digitato viene cercato in qualunque posizione all'interno di ogni voce della lista, invece di considerare solo le voci che iniziano con il testo cercato.
Miglioramento relativo al ticket 001180-2023.

Server3

I server diventano multi-versione

A partire dalla versione 26.3 i server diventano multi-versione: sullo stesso server possono essere installate più versioni dell'IDE, che convivono senza interferire l'una con l'altra. Il vantaggio principale riguarda l'adozione delle nuove versioni. Fino a oggi, aggiornare l'IDE significava che tutti i progetti esistenti andavano da quel momento aperti e modificati con la nuova versione, senza poterli validare prima. Con un server multi-versione è invece possibile provare i propri progetti su una versione più recente mantenendo intatto il ciclo di sviluppo e di rilascio in corso sulla versione già in uso: si continua a sviluppare e a rilasciare con la versione consolidata e, in parallelo, si verifica con calma il comportamento del progetto sulla versione nuova.

Come provare un progetto su una nuova versione

Il modo consigliato è realizzare una copia del proprio progetto e aprire la copia con la nuova versione, lasciando l'originale sulla versione corrente. Si parla volutamente di copia e non di condivisione tramite TeamWorks: l'uso di TeamWorks fra progetti salvati con versioni diverse è fortemente sconsigliato, perché il codice dei metodi può non essere compatibile da una versione all'altra.

Nessun cambiamento per i progetti esistenti all'aggiornamento del server

Perché il lavoro in corso non subisca alcuna variazione, quando un server viene aggiornato alla 26.3 viene installata automaticamente anche la versione dell'IDE presente prima dell'aggiornamento, e tutti i progetti esistenti continuano ad aprirsi con quella versione. L'adozione della 26.3 sui singoli progetti diventa così una scelta esplicita, da compiere quando lo si ritiene opportuno.

Server di produzione: aggiornamenti senza rischi di compatibilità

Il supporto multi-versione porta un vantaggio anche sui server di produzione: l'aggiornamento del server a una nuova versione non comporta più alcun cambiamento di comportamento, nemmeno teorico, per le applicazioni già installate. In precedenza, aggiornando il server, un'applicazione compilata con una versione precedente iniziava da quel momento a utilizzare l'insieme dei moduli Node.js della nuova versione, con il rischio — in casi rari — di problemi di compatibilità. Ora è invece possibile installare sul server di produzione la versione dell'IDE corrispondente a quella con cui l'applicazione è stata compilata, così che l'applicazione utilizzi sempre l'insieme di moduli coerente con la propria build. Sullo stesso server possono quindi convivere applicazioni compilate con versioni diverse dell'IDE, senza doverle ricompilare con la nuova versione quando il server viene aggiornato.

Nota
Un progetto salvato con una determinata versione non è più modificabile con le versioni precedenti. Il motivo è concreto proprio nel passaggio alla 26.3: con questa versione il codice dei metodi viene generato utilizzando la nuova sintassi asincrona async/await, che le versioni precedenti non riconoscono. Un progetto salvato con la 26.3 e poi riaperto con la 26.2 conterrebbe quindi costrutti non compilabili. È per questa ragione che, per provare una nuova versione, occorre partire da una copia o da un backup del progetto e non dall'originale.

Aggiornamento dei moduli npm

Sono stati aggiornati i moduli npm utilizzati dal server, tra cui i driver dei database e la libreria Stripe, risolvendo alcune vulnerabilità di sicurezza.

Active Directory, aggiornamento della libreria di autenticazione

L'autenticazione tramite Active Directory è stata riscritta utilizzando una libreria LDAP mantenuta attivamente, in sostituzione di quella precedente ferma al 2018.

Nota
Cambiando la libreria sottostante è consigliabile verificare il funzionamento dell'autenticazione nelle installazioni che utilizzano Active Directory.
TeamWorks1

Cambiare branch senza perdere il lavoro in corso

Per passare a un altro branch con modifiche non ancora confermate occorreva confermarle o annullarle, se il branch di destinazione non era allineato a quello attuale. Ora, quando si sceglie il branch da attivare, viene proposto anche di salvare le modifiche nel branch attuale: il progetto passa al branch scelto senza modifiche pendenti, e il lavoro in corso resta accantonato nel branch in cui è stato lasciato.

Tornando su quel branch, il progetto propone di recuperare le modifiche salvate, di rimandare la scelta o di eliminarle definitivamente; il recupero richiede che nel frattempo non siano state fatte altre modifiche non confermate. Nell'elenco dei branch, quelli che contengono modifiche salvate sono contrassegnati. Ogni branch può contenere un solo insieme di modifiche salvate per volta.

WebAPI1

Funzione contains() nel filtro OData

Il parametro $filter delle WebAPI ora riconosce la funzione OData contains(campo, 'valore'). Prima le richieste che la utilizzavano venivano rifiutate con l'errore «501 Not Implemented» e occorreva ripiegare sulla forma equivalente basata su indexof.
Miglioramento relativo al ticket 001066-2026.

Correzioni della versione 26.3

Instant Developer Agent5

Barra del contesto occupato

L'indicatore della quantità di contesto occupato spariva all'inizio di ogni richiesta, non veniva mostrato affatto alla prima richiesta di una sessione e, dopo un'interruzione, restava vuoto per tutto il resto della sessione. Ora resta visibile anche mentre l'agente sta lavorando. Il pannello delle statistiche si aggiorna inoltre anche mentre è aperto.

Ereditarietà tra documenti persa nelle modifiche dell'agente

Quando un documento è definito come estensione di un altro, ad esempio più tipi di materiale che ereditano i dati comuni da un materiale generico, il legame di ereditarietà poteva perdersi durante le modifiche svolte dall'agente: il documento tornava silenziosamente a non avere un padre.

Le conseguenze erano due. Al salvataggio veniva scritto solo il record del documento figlio e non quello del padre, facendo fallire l'operazione sui database che prevedono un vincolo fra le due tabelle. Inoltre reimpostare l'ereditarietà sembrava non avere alcun effetto, perché la modifica non arrivava mai al modello del progetto.

Rispetto del perimetro dell'incarico

Quando l'utente dice che si occuperà personalmente di qualcosa («lo faccio io»), l'agente lo tratta ora come un limite dell'incarico e non procede per un'altra via. Inoltre non introduce più modifiche strutturali al modello non richieste — nuove colonne, proprietà del documento, campi della datamap o controlli: se un intervento sembra richiederle, chiede prima all'utente dove debba vivere il dato.

I commenti del programmatore non vengono più persi o spostati

I commenti presenti nel codice sopravvivono ora al ciclo di lavoro dell'agente: in precedenza potevano sparire, duplicarsi o spostarsi quando l'agente rileggeva e riscriveva il progetto.

Correzioni ai tool di lavoro

Serie di correzioni ai tool che l'agente usa sul progetto:

  • query_db esegue anche le istruzioni senza result set (DDL) invece di andare in errore;
  • l'import dello schema mappa timestamp / timestamp without time zone su datetime invece di ripiegare su varchar;
  • le modifiche strutturali alle tabelle @readonly producono un avviso invece di essere ignorate in silenzio;
  • la documentazione dei Remote Control Methods del Cloud Connector riporta ora il parametro obbligatorio key.
App7

GetHTML non restituiva il codice della pagina

Il metodo getHTML di App.HTMLConverter poteva non restituire il codice HTML della pagina, perché il browser che la produce non si avviava e la chiamata terminava con un errore di timeout. Le opzioni di avvio indicate nella chiamata non venivano applicate, quindi non era possibile rimediare dall'applicazione.
Correzione relativa al ticket 002134-2025.

Dispositivi Android riconosciuti come iOS

Su alcuni dispositivi Android il sistema operativo veniva rilevato erroneamente come iOS e, di conseguenza, il browser veniva classificato come Safari. Il problema si presentava ogni volta che lo user agent inviato dal browser non conteneva la stringa «Android», ad esempio con la modalità «Richiedi sito desktop» attiva.
Correzione relativa al ticket 000840-2026.

Tastierino numerico su campo con maschera

Su dispositivi mobili, il primo tocco su un tasto del tastierino numerico di un campo con maschera non produceva alcun effetto sul valore del campo.
Correzione relativa al ticket 000416-2026.

Plugin delle emoji dell'editor HTML

L'editor HTML caricava una versione obsoleta del plugin delle emoji, che utilizzava chiamate deprecate e offriva un insieme di emoji più ridotto.

Campi data e ora con maschera

Un campo di tipo data con maschera poteva rileggere il valore con giorno, mese e anno scambiati subito dopo il salvataggio: scrivendo 20/12/2004 il campo mostrava 20/04/2012, pur avendo salvato sul database il valore corretto. Il problema dipendeva dalla maschera usata e dall'anno della data. Sui campi di tipo ora e data-ora, invece, al posto dell'orario comparivano i caratteri della maschera, e l'orario salvato sul database poteva risultare diverso da quello scritto.
Correzione relativa al ticket 001292-2026.

Mailer, l'ordine di assegnazione di from e fromName

Assegnando la proprietà fromName di App.Mailer prima della proprietà from veniva sollevata un'eccezione a runtime. Le due proprietà possono ora essere assegnate in qualunque ordine.

Duplicazione di un documento

Duplicando un documento, il campo contatore della copia manteneva il valore dell'originale, che va invece azzerato perché al salvataggio sia il database ad assegnarne uno nuovo. Su SQL Server il salvataggio della copia non riusciva, mentre su PostgreSQL la copia veniva salvata con un contatore duplicato.

Database7

Errore di sintassi sui predicati `is true` e `is false`

Una query che usava i predicati booleani is true, is false, is not true o is not false in una clausola WHERE generava SQL non valido e falliva con un errore di sintassi.
Correzione relativa al ticket 001074-2026.

Nota
Su SQL Server e Oracle la sintassi IS TRUE / IS FALSE non è supportata dal database stesso, quindi questi predicati restano utilizzabili solo su PostgreSQL, MySQL e SQLite. I predicati is null e is not null funzionano invece su tutti i database.

Errore nella creazione del database con chiavi esterne

La creazione o l'aggiornamento del database poteva fallire con l'errore «there is no unique constraint matching given keys for referenced table» quando una tabella con una chiave esterna veniva creata prima della tabella a cui la chiave fa riferimento.
Correzione relativa al ticket 000591-2026.

Errore eseguendo una stored procedure di SQL Server

L'esecuzione di una stored procedure di SQL Server tramite il comando EXECUTE poteva sollevare l'eccezione «Cannot read properties of undefined (reading 'hasOwnProperty')» quando la procedura restituiva un recordset vuoto.
Correzione relativa al ticket 000997-2026.

Chiavi esterne non create su database Oracle

La sincronizzazione dello schema verso un database Oracle non riusciva a creare i vincoli di chiave esterna, perché il comando generato conteneva clausole non previste dalla sintassi Oracle.

Riferimenti a valori del client nelle espressioni SQL

Nelle espressioni SQL delle query, un riferimento a un valore del client — ad esempio il valore di un campo della videata — veniva inserito nel testo della query come valore letterale, anziché come parametro come già avveniva per le variabili locali.

Chiavi e campi contatore

Su SQLite l'aggiunta di un campo contatore a una tabella esistente produceva un comando che il database rifiutava, e le colonne di una chiave primaria composta venivano create senza il vincolo di obbligatorietà.

Aggiornamento dello schema del database

Modificando una chiave esterna o un indice e togliendo una colonna prima di aggiornare lo schema, il comando «Aggiorna schema» terminava con un errore del database, perché la colonna veniva eliminata prima che venisse rimosso il vincolo che la utilizza.

Datamap3

Criteri di ricerca negati

Nei criteri di ricerca di una datamap il carattere # chiede di escludere i valori corrispondenti a quello scritto: quanto segue il # è il valore da escludere, non un altro criterio, e per questo il # non si combina con gli altri operatori. La combinazione veniva però accettata e la negazione andava persa, così con i confronti maggiore e minore (#>50, #<50), con gli intervalli aperti (#3000:, #:99) e con la ricerca per somiglianza (#&mario) la ricerca restituiva esattamente le righe che si volevano escludere. Ora queste scritture tornano a essere lette come un unico valore da escludere. Per negare un confronto d'ordine si usa il confronto opposto, scrivendo :50 al posto di #>50 e 50: al posto di #<50.

Trattino basso nei criteri di ricerca

Nei criteri di ricerca di una datamap il trattino basso veniva interpretato come un carattere jolly, cioè come un carattere qualsiasi, mentre l'unico jolly previsto è l'asterisco. Cercando m_r, ad esempio, venivano trovate anche le righe contenenti mar.

Clonazione di una collection

Clonando una collection, i filtri aggiunti a mano con l'addDOFilter non venivano riportati nel clone e le datamap annidate in una riga non venivano clonate insieme alla riga.

Document Orientation1

Evento onChange non notificato modificando la proprietà da interfaccia

Se si modificava un elemento collegato a una proprietà di documento, l'evento onChange della proprietà non veniva notificato; scattava invece scrivendo direttamente la proprietà da codice.
Correzione relativa al ticket 000517-2026.

Elementi visuali8

Input di tipo select, valore selezionato perso

In un input di tipo select, modificando la proprietà list per aggiungere o cambiare le voci della lista, il valore selezionato dall'utente veniva perso e tornava a quello impostato inizialmente.

DropZone, caricamento di più di due file

Impostando a false la proprietà autoProcessQueue di una DropZone e caricando più di due file contemporaneamente, solo i primi due venivano effettivamente caricati sul server.
Correzione relativa al ticket 002391-2024.

DropZone, proprietà previewsContainer ignorata

L'impostazione della proprietà previewsContainer, che indica il container in cui mostrare l'anteprima dei file caricati, non aveva alcun effetto e l'anteprima veniva sempre mostrata all'interno della DropZone stessa.
Correzione relativa al ticket 000191-2025.

GMap, errori di geocodeLocation non segnalati

Se la decodifica di un indirizzo tramite il metodo geocodeLocation falliva, ad esempio per una configurazione incompleta dell'account di fatturazione di Google, l'errore non veniva segnalato all'applicazione.
Correzione relativa al ticket 000001-2023.

Calendar, ricaricamento della datamap nell'evento OnDatesRender

Se nell'evento OnDatesRender di un calendario si filtrava la datamap associata per mostrare solo gli eventi dell'intervallo visualizzato, l'evento veniva notificato all'infinito perché il calendario veniva ricreato da zero a ogni ricaricamento. Ora, se le colonne della datamap non cambiano, gli eventi vengono aggiornati senza ricreare il calendario.
Correzione relativa al ticket 000562-2025.

Calendar, visualizzazione degli eventi

Sul calendario gli eventi potevano risultare duplicati quando i dati arrivavano prima del disegno del componente; inoltre l'altezza espressa in percentuale non veniva applicata correttamente e gli aggiornamenti parziali degli eventi non erano affidabili.

Evento onUpload non notificato nelle app offline

In un'applicazione offline, scegliendo un file da un elemento di tipo input o IonInput con tipo file, l'evento onUpload non veniva notificato.
Correzione relativa al ticket 000767-2025.

AltContainer, scorrimento tra le pagine

Lo scorrimento con il dito per passare da una pagina all'altra tramite un AltContainer poteva causare un errore al primo gesto; inoltre, dopo un trascinamento, poteva essere eseguito un clic indesiderato.

FluidUI5

Spostamento di un campo contenente un IonDateTime di tipo ora

Spostando in una videata un campo di pannello che contiene un IonDateTime configurato per la sola ora, l'operazione si interrompeva con un errore e il campo non veniva spostato. Per riuscirci occorreva nascondere il contenuto del campo, spostarlo e poi ripristinarlo.
Correzione relativa al ticket 001293-2026.

Sfarfallio aggiungendo o cancellando molte righe

Aggiungendo o cancellando molte righe da una datamap al di fuori dell'evento beforeLoad, il pannello si ridisegnava a ogni riga producendo un evidente sfarfallio.
Correzione relativa al ticket 001552-2024.

Warning su campo invisibile con filtro QBE

Aprendo una videata con un pannello che aveva un campo invisibile su cui era impostato un filtro QBE, nel debug veniva emesso il warning poco chiaro «undefined: onQBECombo skipped because element is disabled, read only or not visible in view». Il filtro QBE su un campo nascosto è uno scenario legittimo e non genera più alcuna segnalazione.
Correzione relativa al ticket 001010-2026.

Cancellazione di tutti i record

Selezionando tutti i record di un pannello con la multiselezione e cancellandoli, il primo record non veniva eliminato.
Correzione relativa al ticket 000871-2026.

Selezione multipla dopo un filtro o un raggruppamento

Nei pannelli con selezione multipla la spunta era legata alla posizione della riga e non alla riga stessa. Filtrando le righe o cambiando il raggruppamento, la selezione restava sulle vecchie posizioni e finiva su righe diverse da quelle scelte, con il rischio di operare su record sbagliati.
Correzione relativa ai ticket 000702-2025 e 001244-2025.

IDE11

Nomi degli oggetti troncati nell'albero

Nell'albero del progetto i nomi degli oggetti risultavano troncati e non erano leggibili senza allargare manualmente l'albero.
Correzione relativa al ticket 002292-2024.

Sostituzioni di «Trova e sostituisci» perse

Le sostituzioni effettuate con «Trova e sostituisci» nell'editor di codice restavano nel solo testo a video e non venivano acquisite nel progetto, così chiudendo la vista del metodo — ad esempio selezionando un altro oggetto nell'albero — il lavoro andava perso e al rientro il metodo tornava al contenuto precedente. Il problema riguardava sia «Sostituisci tutto» sia la sostituzione singola.
Correzione relativa al ticket 001390-2026.

Applicazione terminata durante il primo avvio

Avviando dall'IDE un'applicazione di grandi dimensioni, il primo avvio terminava quasi sempre con l'errore «l'applicazione non ha risposto per 30 secondi», l'applicazione veniva terminata e occorreva riavviarla. Ora, prima della prima risposta dell'applicazione, viene concesso un tempo di attesa di 120 secondi.

Errore compilando in debug un try/catch/finally dentro un ciclo

Compilando l'applicazione in debug, se un metodo conteneva un blocco try/catch/finally scritto su una sola riga all'interno di un ciclo for, si otteneva l'errore «unexpected token 'finally'». Compilando senza debug il codice funzionava correttamente.
Correzione relativa al ticket 000328-2025.

L'editor SQL corrompe il codice circostante

Scrivendo una query che conteneva una virgoletta doppia all'interno di una stringa, l'editor di codice SQL non delimitava correttamente la query e finiva per inglobare e cancellare le righe di codice successive.
Correzione relativa al ticket 001669-2025.

Importazione di un componente con intervallo di versioni aperto

Se un componente dichiarava di essere compatibile con un intervallo di versioni aperto da un lato, ad esempio 25.0: per indicare «dalla 25.0 in poi», la sua importazione falliva sempre con il messaggio «Il componente richiede una versione più aggiornata dell'IDE», anche quando la versione in uso rientrava nell'intervallo dichiarato.

Costanti delle query proposte per la traduzione

Il sistema di traduzione proponeva tra le costanti traducibili anche i testi contenuti all'interno delle query.
Correzione relativa al ticket 002229-2025.

Avvio dell'applicazione con una videata non compilata

Se la compilazione di una videata non andava a buon fine, la sua classe non entrava nel codice dell'applicazione e l'avvio si interrompeva con un errore che non aveva alcun riferimento alla videata. Ora l'errore nomina la videata e rimanda agli errori di compilazione dell'applicazione, dove si trova la causa.
Correzione relativa al ticket 001337-2026.

Testo delle query strutturate alterato

Scrivendo una query strutturata nel codice di un metodo, parti del testo potevano essere modificate o perdersi. Ne erano interessati i commenti, gli alias di tabella scritti fra virgolette, l'elenco dei valori di un insert e la clausola having. Il testo poteva inoltre accumulare spazi e indentazione a ogni modifica.

Codice del metodo sovrascritto da una query incompleta

Una query strutturata ancora incompleta, ad esempio una select senza alcun campo indicato, poteva sovrascrivere parte del codice del metodo che la conteneva.

Anteprima dell'applicazione

Il refresh della pagina non chiude più l'anteprima e non lascia più la pagina bianca; la scelta della piattaforma iOS/Android dall'IDE torna a raggiungere l'anteprima.

IonicUI1

Componente IonRange

Su iOS la traccia del componente IonRange non risultava visibile come sugli iPhone attuali e il selettore occupava spazio anche quando non era visualizzato.

MyCloud2

Indirizzo errato delle risorse

Sui server MyCloud l'indirizzo generato per le risorse dell'applicazione non era raggiungibile, perché veniva costruito anteponendo il nome del server al dominio e senza tenere conto della porta, che può essere diversa da quelle standard.
Correzione relativa al ticket 001556-2024.

Riavvio continuo del server

Sui server MyCloud il server poteva riavviarsi in continuazione riportando nel log l'errore «Error while reading IDF template directory».
Correzione relativa al ticket 002060-2025.

Server4

Sessione persa dopo una breve interruzione di rete

Quando un'applicazione perdeva la connettività di rete, dopo circa 15 secondi la sessione veniva eliminata dal server: una breve interruzione, come un cambio di rete o la sospensione del dispositivo, era sufficiente a perdere la sessione e a costringere l'utente a ricominciare. Il tempo di attesa prima di eliminare la sessione è ora configurabile e il valore predefinito è stato portato a 120 secondi.

Correzione relativa al ticket 000788-2026.

Nota
Il tempo di attesa esteso si applica solo alle disconnessioni dovute a una caduta di rete. Quando l'utente chiude deliberatamente la scheda del browser la sessione viene rilasciata rapidamente come in precedenza, così da non trattenere inutilmente le risorse del server.

Errore «Invalid SID» aprendo l'applicazione da un collegamento

Aprendo un'applicazione tramite un collegamento dopo aver chiuso il browser, si otteneva l'errore di SID non valido e si veniva rimandati all'indirizzo di uscita. Ora, quando il SID non è più valido, l'applicazione viene semplicemente riavviata con una nuova sessione mantenendo i parametri presenti nell'indirizzo. Il problema si presentava su Edge e su Safari per Mac.
Correzione relativa al ticket 000666-2026.

Richieste REST senza risposta

Una richiesta REST che andava in timeout lasciava il chiamante in attesa indefinita, invece di restituire l'errore previsto per il timeout.

Sessioni IDE che restavano appese sul server

La chiusura di una sessione IDE poteva non completarsi: il processo della sessione restava attivo sul server, in alcuni casi con la CPU al 100%, insieme ai processi ausiliari dell'agente. Ora un watchdog forza la terminazione quando la chiusura ordinaria non si completa entro pochi secondi, vengono terminati anche i processi ausiliari, e i cicli interni che potevano mandare in stallo il processo sono stati protetti. Una riconciliazione forzata che non termina viene interrotta con un errore esplicito invece di bloccare la sessione.

ShadowUI1

Correzioni ai controlli

Corretti eventi e layout di slider, radio group, date picker e barra dei menu; il popup menu (app.popup con type menu) funziona ora anche nelle applicazioni ShadowUI; il click sulle icone raggiunge di nuovo il gestore dell'evento; corretta la larghezza della barra di avanzamento.

Sync1

Notifiche di aggiornamento dei documenti

Con la proprietà fastDiff attiva, le variazioni ricevute dal dispositivo venivano applicate senza notificare l'evento onDocUpdate, e il codice scritto nell'evento non veniva eseguito.

WebAPI2

Indirizzi dei documenti restituiti dal servizio

Le risposte di una WebAPI contengono l'indirizzo del documento a cui si riferiscono — quello del documento appena inserito, e quello di ogni documento letto nelle risposte con i metadati completi — e in quell'indirizzo compare il valore della sua chiave. Il valore poteva essere scritto in una forma che non consentiva di ritrovare il documento a partire da quell'indirizzo. Ne erano interessate le chiavi che contengono i caratteri + o %, quelle di tipo data, quelle con contenuti binari, quelle costituite da un documento e quelle composte da più proprietà.

Valori non previsti dal dominio di una proprietà

Una proprietà con dominio viaggia verso una WebAPI con il nome della costante corrispondente al suo valore. Quando il valore non era fra quelli previsti dal dominio, al posto del nome veniva scritta la parola undefined, sia nei filtri sia negli indirizzi restituiti dal servizio. Il problema si presentava, ad esempio, con dati importati o dopo aver ristretto un dominio su documenti già scritti.

Note di rilascio di versioni precedenti

Di seguito la lista delle note di rilascio delle ultime tre versioni di Instant Developer Cloud.

VERSIONE 26.3VERSIONE 26.2VERSIONE 26.1
Versione 26.302/09/26Versione 26.216/06/26Versione 26.112/05/26
Versione 26.2.123/06/26Versione 26.1.118/05/26
Versione 26.2.215/07/26Versione 26.1.227/05/26
Versione 26.2.321/07/26