In sintesi
In questa lezione viene introdotto il servizio di riconfigurazione a runtime dello schema del documento.
Nota: questo video corso è stato realizzato con la versione 4 di Instant Developer. Anche se i contenuti sono ancora attuali e sono utili per imparare ad utilizzare Instant Developer, alcune affermazioni sono di fatto superate. Per i dettagli e le ultime novità sulle funzionalità illustrate vi rimandiamo alla sezione di reference che viene tenuta aggiornata giornalmente.
In alcuni contesti, alcune proprietà specifiche degli oggetti che dobbiamo modellare non sono conosciute a design time. Si pensi ad esempio alla tabella Articoli di un programma gestionale: a seconda dei contesti in cui l'applicazione viene utilizzata potrebbe essere interessante memorizzare informazioni specifiche degli articoli diverse caso per caso. Nel campo della moda, ad esempio, è indispensabile memorizzare la taglia ed il colore degli articoli, mentre in campo industriale potrebbe essere necessaria la composizione chimica ed il peso specifico.
Il servizio Extensible Schema nasce proprio per rispondere a questa esigenza, mettendo a disposizione un metodo standard per trattare con le proprietà estese. Creiamo la classe Prodotto ed attiviamo questo servizio. Come vediamo Instant Developer ha aggiunto 10 nuovi campi alla tabella che utilizzano il dominio dedicato alle proprietà estese. Se servissero più di 10 proprietà estese, è sufficiente duplicare i campi già presenti fino alla quantità desiderata; se se servono meno quelli in più si possono cancellare. Anche nel documento appaiono le proprietà estese corrispondenti ai campi.
Vediamo adesso come mostrare a video queste proprietà. Innanzitutto posizioniamo il campo relativo alla proprietà estesa numero 1, possiamo anche creare una lookup verso la tabella valori lista, in quanto è possibile definire delle liste valori collegate con le proprietà estese. A questo punto è possibile utilizzare il comando del menù contestuale Add Extended Properties per creare tutte le altri campi relativi a proprietà estese.
Come fa un documento a sapere quali proprietà estese supporta? Nel database sono presenti quattro tabelle che contengono la descrizione degli schemi estesi. Queste tabelle sono usate direttamente dal framework, quindi la loro forma è fissata. Quando un documento sa che supporta le proprietà estese, carica dal database lo schema esteso che gli compete. Per sapere il nome dello schema esteso, un documento lancia l'evento On Get Schema Name, se non è implementato allora viene preso il nome della classe del documento. Lanciamo l'applicazione e creiamo a runtime uno schema esteso per i prodotti, con le proprietà taglia e colore. Vediamo che il pannello prodotti, è in grado di adattarsi alla definizione delle proprietà estese legate al prodotto. Notiamo che un documento non implementa uno schema esteso fisso, ma può implementarne diversi tramite l'evento On Get Schema Name, questo può essere utile ad esempio, per variare il significato delle proprietà estese in base al tipo dell'articolo.
Vediamo infine come è possibile utilizzare applicativamente le proprietà estese. Normalmente sarebbe possibile utilizzarle sono nelle personalizzazioni, in quanto a design time non si sa quali proprietà estese ci sono. Instant Developer introduce a questo punto un idea di "programmazione orientata ai concetti", nella quale ad ogni proprietà è possibile collegare una stringa che ne rappresenta il significato (o concetto). A design time questo è possibile specificando il concetto nel dominio, a runtime lo si specifica nel campo corrispondente nella definizione delle proprietà estese. La libreria ci mette a disposizione il metodo Get Property Index che consente di recuperare l'indice della proprietà dato il concetto (o altre proprietà). Se il valore ritornato è maggiore di zero, allora il documento supporta il concetto indicato ed è possibile utilizzare le funzioni Get Property e Set Property per leggerne o scriverne il valore. Ad esempio aggiungiamo un bottone ed una procedura che legge da codice il colore di un articolo. Proviamo l'applicazione.