In sintesi
In questa lezione vedremo come evolve lo stato dei documenti durante una transazione in memoria.
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 questa lezione vedremo come evolve lo stato dei documenti durante una transazione in memoria. Dopo che un documento è stato istanziato con la CreateInstance, esso non può ancora essere utilizzato efficacemente: infatti o deve essere caricato dal database, oppure deve essere dichiarato "nuovo", chiamandone la funzione INIT che imposta le proprietà di default ed imposta a VERO la proprietà INSERTED. Vediamo allora come inserire un nuovo documento ordine nel database: aggiungiamo un bottone ed una procedura. Nella procedura creiamo l'istanza e la inizializziamo. Poi salviamo il documento con la Save To DB. Proviamo l'applicazione. Questo metodo ci risparmia di dover definire delle query dirette sul database, inoltre all'interno della classe potremo personalizzare le azioni di salvataggio sul database, come vedremo nelle prossime lezioni. Questa stessa procedura viene utilizzata dai pannelli quando si inseriscono nuove righe in un pannello su documento.
Notiamo che la libreria ci da un certo numero di proprietà e di eventi per seguire l'evoluzione dello stato di un documento. Ad esempio, se da pannello o da codice viene modificata una proprietà di un documento caricato dal database, esso va in stato UPDATED, lanciando anche un evento. Impostando la proprietà DELETED su un documento caricato dal database, esso verrà cancellato se su di esso o su un suo padre verrà chiamata la funzione di SAVE TO DB; la funzione RESET ORIGINAL cancella tutte le modifiche fatte su un documento e su tutti i suoi figli, quindi se, ad esempio, abbiamo cancellato le righe di un ordine, ma non abbiamo ancora salvato l'ordine, chiamando questa funzione possiamo recuperare l'ordine con tutte le sue righe. All'opposto la funzione SET ORIGINAL stabilisce che lo stato attuale del documento è quello originale quindi le modifiche non verranno salvate sul database. Notiamo infine le funzioni IS DELETED e IS MODIFIED che lavorano non sul singolo documento ma su di esso e su tutti i suoi figli.
Quando un utente modifica i dati di un pannello document oriented (che, sappiamo deve avere l'AUTOSAVE attivo), il pannello comunica le modifiche al documento in una "transazione", chiamando quindi i metodi Begin Transaction, modificando le proprietà, ed infine chiamando il metodo End Transaction. Nel documento possiamo intercettare l'evento On End Transaction e andare a vedere che cosa ha fatto l'utente con la funzione Was Modified, tuttavia non è questo l'evento per segnalare eventuali errori (la validazione verrà vista nelle prossime lezioni). E' possibile anche simulare transazioni da codice chiamando Begin ed End Transaction. Per fare un esempio, creiamo l'evento End Transaction nella classe Ordine e se l'utente modifica il cliente associato, carichiamo in automatico l'indirizzo di spedizione. Proviamo l'applicazione.