English
Instant Developer Foundation Documentazione
Aiutaci anche tu a migliorare la Documentazione: vai in fondo alla pagina, esprimi la tua valutazione sull'articolo e aggiungi il tuo feedback.
  • Tutorial applicazioni web
  • Metodi ed eventi documentali

Eventi di modifica dati

link
<< Video precedente
Apri in una finestra a tutto schermo.
Video successivo >>

Trascrizione

Il titolo di questo tutorial recita Eventi di modifica dati e devo subito chiarire che stiamo parlando di una modifica in memoria: non mi sto riferendo a una modifica che avviene sul database; gli eventi che vedremo saranno sottoscrivibili e saranno emessi a seguito di una modifica in memoria.

Aggiungo qualcosa in più: la modifica di cui stiamo parlando da chi è effettuata? dall’utente? via codice?

Vi sto dicendo questo perché è molto importante sapere se la modifica è avvenuta lato client o lato server.

Nei tutorial precedenti avevano spiegato come venivano inviati i dati tra client e server e viceversa: con l’utilizzo di messaggi; soprattutto avevamo segnalato l’esistenza di una coda di messaggi tra client e server: nel caso il messaggio fosse reputato urgente allora in quel caso tutte le modifiche venivano inviate.

Ec eccoci al punto: i pannelli documentali, durante l’invio del dati tra client e server, instaurano quella che è denominata transazione documentale e precisamente:

  • Client ha la necessità di inviare valori di proprietà al server.
  • Client chiede al server di “Aprire una transazione documentale”.
  • Server si mette in ascolto ed apre una transazione documentale.
  • Client invia i valori delle proprietà.
  • Server riceve i valori delle proprietà e cambia le rispettive proprietà nel documento.
  • Server chiude la transazione documentale.

Quando parlo di eventi di modifica dei dati, intendo questi, cioè eventi che scattano nel flusso di transazione documentale precisamente quando la transazione viene aperta e quando viene chiusa: Evento OnBeginTransaction e OnEndTransaction.

E’ presente un terzo evento denominato OnValidate che anch’esso scatta alla modifica dei dati ed ha come compito quello di segnalare eventuali errori commessi; la differenza sostanziale sta proprio in questo gli eventi OnBeginTransaction e OnEndTransaction ci consentono di capire quale proprietà è stata modificata a differenza dell’evento OnValidate dove sappiamo solo che il documento ‘da qualche parte’ è stato modificato e quindi da ricontrollare Facciamo un esempio, il documento Prenotazione contiene 3 campi Arrivo, Partenza e Giorni: vorremmo poter ricalcolare i giorni ogni qualvolta vengano a modificarsi i valori Arrivo o Partenza; in primis creiamo un metodo che calcoli i giorni sulla base delle proprietà Arrivo e Partenze. Albero di progetto => documento Prenotazione => Aggiungi Procedura.

Public void setGiorni() {
Int myGiorni = 0;
If (not(isnull(Arrivo)) and not isnull(Partenza) {
If (Partenza >= Arrivo) {
myGiorni = Partenza – Arrivo;
}
}
Giorni = myGiorni;
}

Riguardiamo lo schema della transazione documentale, quando riusciamo a capire se sono avvenute modifiche alle proprietà ? Nella fase di apertura della transazione ? Ma no il client non ha ancora spedito i dati come facciamo a sapere se sono cambiati: la fase corretta è quando la transazione viene chiusa, in quel momento possiamo sapere cosa è stato cambiato.

Aggiungiamo al documento Prenotazione l’evento, tasto destro Eventi => Altri Eventi => Aggiungi OnEndTransaction.

Foundation mette a disposizione una funzione, che possiamo usare in questo evento per sapere cosa è cambiato, la funzione boolean wasModified(PROPRIETA).

Quindi chiediamoci:

If (wasModified(Arrivo) or wasModified(Prezzo) {
setGiorni()
}

In teoria quando cambiano i Giorni dovremmo anche ricalcolare l’intero Totale, non sappiamo ancora come fare però’ cominciamo a implementare la struttura del metodo e poi vedremo.

Tasto destro Aggiungi Procedura

Public void calcolaTotale() {
}

Dunque nell’evento EndTransaction, facciamo il setGiorni e poi aggiungiamo calcolaTotale(). All’applicazione aggiungiamo anche una nuova videata Prenotazioni: vi ricordo che con quello che abbiamo gestito sul documento, nessun codice sarà da scrivere in videata pannello poiché la modifica di Arrivo o Partenza causerà la transizione documentale e quindi la porzione di codice che abbiamo scritto.

Ora io sistemo rapidamente la videata Prenotazione ed aggiungo la videata al menu Principale; mettete in pausa e fatelo anche voi; ci troviamo qui al termine.

Ecco sistemata la videata, inclusa nel menu principale, voglio provare ad eseguire, richiamo le prenotazioni, provo ad effettuare un inserimento impostando le date ed ecco che il calcolo del giorno. Sembra non andare; come mai? Solito tranello; la transazione scatta quando viene ricevuta dal server, il messaggio di cambio è urgente? o meglio il campo di pannello Arrivo e Partenza sono impostati come Attivi?

Ho voluto proporvelo, perché questo è l’errore classico che spesso fa dire non funzione ed invece è tutto corretto, mancavano solo 2 flag.

Ultima modifica: 19/03/2021 / Validità: da 20.5.8000

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum

Vedi anche

    Scarica il progetto di esempio You Bb Project.zip