Stati di una collection
copia linkTrascrizione

Abbiamo ampiamente trattato l’argomento dello stato di un documento, ma dovremmo soffermarci anche sullo stato di una collection. Una collection può avere lo stato Loaded = TRUE o lo stato Modified = TRUE.
E’ possibile, conoscere in esecuzione, se una determinata collection è stata caricata dal database oppure non è ancora stata caricata tramite la proprietà Loaded, e conoscere se la collection è stata Modificata in esecuzione con la proprietà Modified: basta che un documento presente nella collection sia in stato Modified che la collection viene segnata come modified.
Ricordo che la proprietà Loaded di una collection potrebbe trovarsi in modalità false poiché il caricamento di un documento non implica automaticamente il caricamento della o delle collection figlie.
Facciamo un esempio di utilizzo della proprietà Loaded: nel documento Prenotazione vorremmo impostare il Totale Servizi, dato dalla somma delle righe dei servizi, o meglio dalla somma di una proprietà contenuta nella collection PrenotazioniServizi. Se controlliamo, Il documento contiene già un metodo, creato insieme, denominato calcolaTotale; useremo questo metodo ma intanto aggiungiamo un nuovo metodo chiamato calcolaTotaleServizi() che esegue solamente la somma dei servizi.
Public void calcolaTotaleServizi() {
}
Non sappiamo ancora esattamente quale codice scrivere per calcolare la somma degli elementi di una collection, ma una cosa è certa: per fare la somma degli elementi, devono essere caricati in memoria, e grazie allo stato collection possiamo scoprirlo.
If (PRENOTAZIONESERVIZI.loaded = false).
Questa istruzione indica se la collection è stata caricata dal database oppure non è mai stata caricata.
Nel blocco dell’istruzione inserisco un commento:
//CARICAMENTO RITARDATO COLLECTION per ricordarmi che dovrò aggiungere del codice.
L’istruzione condizionale che abbiamo aggiunto, è quasi corretta, dico quasi perché esiste un caso in cui la collection non è stata caricata dal database e neanche deve essere caricata: cioè quando il documento è NUOVO, se il documento master non è sul database, tantomeno lo sarà la collection figlia, ecco dunque che la scrittura corretta di verifica è
If (PRENOTAZIONESERVIZI.loaded = false and inserted = false)
In questo metodo, aggiungo all’inizio una variabile: (la userò’ come progressivo di somma).
Currency totServizi = 0.
In fondo al metodo, dovremo fare il calcolo, per ora aggiungo un commento:
//CALCOLO DELLA SOMMA DELLE RIGHE DELLA COLLECTION.
Userò il progressivo di somma e più sotto valorizzo la proprietà del documento,
Totale Servizi = totServizi.
Abbiamo ancora molto da implementare in questo metodo, ma potremmo cominciare a richiamarlo nel metodo calcolaTotale(). Doppio clic sul metodo calcolaTotale() e aggiungiamo il richiamo a calcolaTotaleServizi(); una volta che abbiamo il totale servizi possiamo calcolare il totale generale Totale Prenotazione = Totale Soggiorno + Totale Servizi.
Una regola generale, ed anche semplice ci suggerisce che, prima di utilizzare nel codice i dati di una collection, meglio chiedersi se la collection è stata caricata, ed in caso negativo caricarla.
E’ possibile, conoscere in esecuzione, se una determinata collection è stata caricata dal database oppure non è ancora stata caricata tramite la proprietà Loaded, e conoscere se la collection è stata Modificata in esecuzione con la proprietà Modified: basta che un documento presente nella collection sia in stato Modified che la collection viene segnata come modified.
Ricordo che la proprietà Loaded di una collection potrebbe trovarsi in modalità false poiché il caricamento di un documento non implica automaticamente il caricamento della o delle collection figlie.
Facciamo un esempio di utilizzo della proprietà Loaded: nel documento Prenotazione vorremmo impostare il Totale Servizi, dato dalla somma delle righe dei servizi, o meglio dalla somma di una proprietà contenuta nella collection PrenotazioniServizi. Se controlliamo, Il documento contiene già un metodo, creato insieme, denominato calcolaTotale; useremo questo metodo ma intanto aggiungiamo un nuovo metodo chiamato calcolaTotaleServizi() che esegue solamente la somma dei servizi.
Public void calcolaTotaleServizi() {
}
Non sappiamo ancora esattamente quale codice scrivere per calcolare la somma degli elementi di una collection, ma una cosa è certa: per fare la somma degli elementi, devono essere caricati in memoria, e grazie allo stato collection possiamo scoprirlo.
If (PRENOTAZIONESERVIZI.loaded = false).
Questa istruzione indica se la collection è stata caricata dal database oppure non è mai stata caricata.
Nel blocco dell’istruzione inserisco un commento:
//CARICAMENTO RITARDATO COLLECTION per ricordarmi che dovrò aggiungere del codice.
L’istruzione condizionale che abbiamo aggiunto, è quasi corretta, dico quasi perché esiste un caso in cui la collection non è stata caricata dal database e neanche deve essere caricata: cioè quando il documento è NUOVO, se il documento master non è sul database, tantomeno lo sarà la collection figlia, ecco dunque che la scrittura corretta di verifica è
If (PRENOTAZIONESERVIZI.loaded = false and inserted = false)
In questo metodo, aggiungo all’inizio una variabile: (la userò’ come progressivo di somma).
Currency totServizi = 0.
In fondo al metodo, dovremo fare il calcolo, per ora aggiungo un commento:
//CALCOLO DELLA SOMMA DELLE RIGHE DELLA COLLECTION.
Userò il progressivo di somma e più sotto valorizzo la proprietà del documento,
Totale Servizi = totServizi.
Abbiamo ancora molto da implementare in questo metodo, ma potremmo cominciare a richiamarlo nel metodo calcolaTotale(). Doppio clic sul metodo calcolaTotale() e aggiungiamo il richiamo a calcolaTotaleServizi(); una volta che abbiamo il totale servizi possiamo calcolare il totale generale Totale Prenotazione = Totale Soggiorno + Totale Servizi.
Una regola generale, ed anche semplice ci suggerisce che, prima di utilizzare nel codice i dati di una collection, meglio chiedersi se la collection è stata caricata, ed in caso negativo caricarla.
Ultima modifica: 19/03/2021 / Validità: da 20.5.8000