DO: Proprietà private o di tipo oggetto e reflection
copia linkDescrizione
E' ora possibile enumerare anche le proprietà private e/o di tipo oggetto dei documenti.
Per farlo è sufficiente utilizzare i nuovi metodi GetOtherPropertyCount e GetOtherPropertyDefinition che permettono di elencare le proprietà private e/o le proprietà di tipo oggetto.
N.B.: Per mantenere la compatibilità con le versioni precedenti di Instant Developer il comportamento delle funzioni GetPropertyCount, GetPropertyDefinition, GetProperty e SetProperty non è cambiato.
Sono stati invece creati nuovi metodi che permettono di gestire solo le proprietà private e/o di tipo oggetto: GetOtherPropertyCount, GetOtherPropertyDefinition, GetPrivateProperty, GetObjectProperty, SetPrivateProperty e SetObjectProperty.
Per leggere e scrivere le proprietà private e/o di tipo oggetto occorre utilizzare i metodi GetPrivateProperty, GetObjectProperty, SetPrivateProperty e SetObjectProperty. Tali funzioni accettano come parametro l'indice della proprietà che si può ottenere utilizzando i metodi GetOtherPropertyCount e GetOtherPropertyDefinition.
Il miglioramento riguarda anche i metodi CopyFrom e Duplicate dei documenti. In versione 22.0 sono stati aggiunti due nuovi parametri opzionali (con valore di default uguale a FALSE per mantenere la compatibilità con le versioni precedenti) che permettono di indicare al sistema se occorre copiare anche le proprietà private e/o quelle di tipo oggetto.
Sono anche state aggiunte due nuove proprietà alla libreria IDPropertyDefinition: Private (valorizzata a TRUE se la proprietà è privata) e Description (che contiene la descrizione di design-time della proprietà). La proprietà Description può essere utilizzata anche come "tag-di-design-time" poiché è possibile leggerne il valore in funzioni generiche che utilizzano la reflection per condizionare il codice.
Funzionalità interessate
L'enumerazione delle proprietà private e/o di tipo oggetto nei documenti e relativa copia nei metodi CopyFrom o Duplicate.
Esempio di codice
// Clone a document (single level)
// *******************************
private IDDocument NPQ04556.GenericDocCopy(
IDDocument Src //
)
{
IDDocument dst = IDDocument.getFromDNA(Src.typeName(), ...)
//
// First: copy "public" properties
IDDocumentStructure idds = Src.getStructure()
for (int i = 1; i <= idds.getPropertyCount(); i = i + 1)
dst.setProperty(i, Src.getProperty(i))
//
// Next: copy private and object properties
for (int i1 = 1; i1 <= idds.getOtherPropertyCount(); i1 = i1 + 1)
{
IDPropertyDefinition idpd = idds.getOtherPropertyDefinition(i1)
if (idpd.dataType == Object)
dst.setObjectProperty(i1, Src.getObjectProperty(i1))
else if (idpd.private)
dst.setPrivateProperty(i1, Src.getPrivateProperty(i1))
}
//
// Document is not changed
dst.setOriginal()
//
return dst
}
Note
- Miglioramento relativo ai seguenti thread del forum: e relativo alla richiesta di assistenza 000150-2020.
Ultima modifica: 09/02/2024 / Validità: da 22.0.8500