| dalla versione 20.0.7800 - modificato il 25/03/2020 - link - english
|
Descrizione del difetto
I parametri di input/output non funzionavano in alcuni casi:
-
campi di cursore di cicli FOR-EACH su tabella IMDB
-
proprietà pubbliche di documento.
A partire dalla versione 20.0 di Instant Developer vengono segnalati rispettivamente i warning:
- 356 - IMDB record field are not allowed as input/output parameter ([NOMECAMPO])
- 357 - Document oriented properties are not allowed as input/output parameter ([NOMEPROPRIETA])
I warning richiedono una conferma esplicita del programmatore poiché, nei casi descritti sopra, il valore modificato all'interno delle procedure/funzioni, non verrà riportato fuori al chiamante.
Effetti del malfunzionamento
-
Il valore del campo IMDB o proprietà DO veniva passato alla procedura ma non risultava cambiato dopo la chiamata.
Soluzioni
Era sufficiente creare variabili locali dove memorizzare il valore del campo IMDB o della proprietà del documento, passare la variabile locale alla procedura e, dopo la chiamata, copiare il valore della variabile locale nel campo IMDB o proprietà del documento.
Funzionalità interessate
L'utilizzo di parametri di input/output in procedure e funzioni.
Note
-
Malfunzionamento relativo alla richiesta di assistenza 000186-2015.
-
Malfunzionamento relativo ai seguenti thread del forum:
-
I parametri di input/output di tipo "semplice" (interi, float, stringhe ma non oggetti) non sono gestiti da tutti i linguaggi. In C# c'è modo di utilizzare gli identificativi "ref" e "out" mentre in Java e Javascript non è possibile utilizzare parametri di input/output.
Instant Developer può gestire i parametri di input/output perché utilizza, anche per i tipi semplici, la classe IDVariant. Tale scelta permette ad Instant Developer di uniformare la gestione dei tipi di dato tra i vari linguaggi. La classe IDVariant permette di "boxare" il valore e, quando modificato all'interno di una procedura con parametri di input/output, può essere "riportato fuori".
Tale funzionalità, però, non è supportata in due casi particolari:
Supportare i parametri di input/output anche in questi due casi costerebbe molto in termini di performance e occupazione di memoria poiché bisognerebbe fornire all'IDVariant altre proprietà che permettano allo stesso di aggiornare le tabelle IMDB collegate e/o di chiamare l'apposito setter sull'istanza del documento quando il valore viene modificato dento alla procedura che ha il parametro di input/output. Pertanto, per il momento, si è deciso di segnalare un warning che informi che la funzionalità non è supportata. Nei casi indicati è sempre possibile utilizzare variabili locali dove copiare il valore prima della chiamata alla procedura e riutilizzarle dopo la chiamata per impostare il valore nelle query IMDB o proprietà DO.
Cosa ne pensi?
Ti sono rimaste delle domande su punti che questo articolo non ha trattato? Pensi che sia utile aggiungere una nota all'articolo? Aiutaci a migliorare la documentazione di Instant Developer scrivendo il tuo commento nei campi qui sotto.