Evento onValidate del documento per gestire automatismi sui campi

Su Instant Developer Cloud se mi occorre eseguire dei calcoli su un campo che dipende dal valore di altri campi posso utilizzare l’evento di documento onValidate verificando se una certa proprietà è cambiata (su Instant Developer Foundation per fare questa operazione utilizzo l’evento onEndTransaction del documento e il metodo wasModified).

Supponiamo si avere il documento RigaOrdine che ha i seguenti campi:

  • qta - quantità ordinata
  • prezzo - prezzo del prodotto
  • importo - importo della riga

Se devo calcolare il campo importo in base alla variazione di uno degli altri dovrò utilizzare questo codice:

App.NwindBE.Order.prototype.onValidate = function(options)
{
  if (options.reason == App.Document.validationReasons.save ||
      options.property == App.NWBE.RigaOrdine.qta ||
      options.property == App.NWBE.RigaOrdine.prezzo ||) {
    // Calcola l'importo di riga
    this.importo = this.qta * this.prezzo;
  }
};

Controllo se è una validazione di salvataggio e quindi comunque rifaccio il calcolo oppure lo rifaccio se una della due proprietà è cambiata.
Nel campo options.property trovo il nome della proprietà modificata che ha scatenato la validazione. Nel caso di validazione per salvataggio options.property vale undefined.

Nota
Nei codice i confronti negli if andrebbero usati tre simboli di uguale (===) ma se li metto il formattatore del codice (qui nella Community) considera quello che viene dopo come un commento.

3 Mi Piace

Mi sto chiedendo se sia corretto usare l’onValidate per eseguire calcoli.

Su Foundation di norma si usa l’onEndTransaction (anche perché la validazione può essere disattivata in fase di salvataggio) oppure il beforeSave se non si ha necessità di mostrare il dato calcolato all’utente mentre si salva.

A mio avviso su Cloud sarebbe più corretto usare onChange delle proprietà ma diventa più oneroso da manutenere e, come ho già sperimentato, se non si sta attenti si rischia di creare loop di aggiornamento tra campi (un po’ come quando si usa l’evento onUpdatingRow del pannello Foundation).
Inoltre ho notato che onChange della proprietà non sembra scattare sempre ma solo quando si fa effettivamente da codice proprietà = valore.

Comunque grazie @paolo.giannelli per gli spunti interessanti, sempre sul pezzo!

1 Mi Piace

@d.termini anche l’evento di Foundation onEndTransaction se sono in una procedura batch non viene richiamato ma devo utilizzare una beginTansaction ed una endTransaction di documento per far si che scatti. Da video scatta comunque anche se ho disabilitato la validazione al salvataggio.

@d.pierangeli @m.sirri voi che ne dite?
In quale evento dei documenti di Instant Developer Cloud è meglio mettere automatismi di calcolo?

1 Mi Piace