Instant Developer

Tips&Tricks Instant Developer Foundation: sincronizzare modifiche esterne

| 2 Settembre 2014 | Giuseppe Lanzi
aereo Instant Developer

Per salutarvi dopo la pausa estiva voglio riaprire il blog scegliendo l’argomento dei Tips&Tricks per il quale avete mostrato più interesse: come sincronizzare modifiche al database effettuate da software esterni.

Come sapete, il servizio di sincronizzazione della Document Orientation usa due modalità diverse a seconda delle condizioni: completa o parziale. Quando l’utente sincronizza per la prima volta (o non lo fa da troppo tempo) viene usata la sincronizzazione completa, in cui tutti i documenti vengono letti dalle relative tabelle del database e inviati al device. Quando l’utente deve ricevere soltanto le ultime variazioni viene usata la sincronizzazione parziale, dove i dati sono letti dalla tabella ZZ_SyncIl framework scrive le variazioni nella ZZ_Sync tutte le volte che viene modificato un documento che ha il flag Sincronizzazione abilitato.

Il problema nasce se ci sono altri software che modificano la stessa base dati perché in questo caso nessuno si occupa di scrivere le variazioni, che quindi non verranno inviate al dispositivo durante la prossima sincronizzazione parziale. Per risolvere dobbiamo trovare il modo di aggiornare correttamente la ZZ_Sync.

Per farlo non è consigliabile aggiornare direttamente il database, perché è complicato e dovremmo conoscere la sintassi giusta. L’approccio migliore consiste nell’usare lo stesso framework, simulando un salvataggio. In questo progetto di esempio abbiamo ottenuto il risultato desiderato per la classe Product usando:

  1. la proprietà di classe  Product.LastExternalChange.
  2. la procedura HandleExternalChanges.
  3. l’evento Product.BeforeSave.

La proprietà LastExternalChange rappresenta la risposta alla domanda “quand’è che l’applicazione esterna ha modificato il prodotto nel database?”. Questo è l’unico vero requisito che deve essere soddisfatto, senza rispondere a questa domanda non si può sapere quali prodotti devono essere gestiti. Nel nostro caso è valorizzata dalla procedura SimulateExternalChange con un update sulla tabella. Potete verificarlo subito, avviate le applicazioni del progetto e sincronizzate l’app mobile, poi usate il bottone SimulateExternalChange dell’applicazione web e sincronizzate nuovamente, vedrete che quest’ultima modifica viene ignorata.

Instant Developer

Nella procedura HandleExternalChanges prendiamo tutti i prodotti modificati dall’applicazione esterna, ne mettiamo a true la proprietà inserted e impostiamo un tag skipupdating con valore -1. Dopodiché salviamo il prodotto.

Instant Developer

Nell’evento Product.BeforeSave, se il tag skipupdating vale -1, simuliamo il salvataggio impostando a true il parametro skip.

ProductBeforeSave2 Instant Developer

Grazie a inserted = true il prodotto è considerato come da inserire sul database e grazie a skip = true  il salvataggio non viene davvero eseguito. In questo caso particolare il framework scriverà comunque nella ZZ_Sync una nuova variazione contenente tutte le proprietà del documento, anche quelle modificate dall’applicazione esterna. Usate il comando HandleExternalChanges dell’applicazione web e poi sincronizzate nuovamente l’app mobile per vedere il risultato.

Beh, a questo punto buona sincronizzazione 🙂

Giuseppe Lanzi
Technical Support Manager
Mi occupo di assistenza e consulenza tecnica, dei corsi di formazione e dei sistemi rivolti ai clienti. Amo la tecnologia e ogni tipo di nuovo gadget, mi interesso di fotografia e prendo al volo ogni occasione di scoprire un nuovo gioco.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.


Potrebbe Interessarti

Instant Developer Foundation 22.5 e Fluid: il futuro comincia da qui

La versione 22.5 di Instant Developer Foundation rappresenta un passo tangibile verso il futuro di Instant Developer. Il nuovo motore grafico Fluid è infatti il...

Leggi Tutto

Webinar: Le novità di Instant Developer Cloud 22.5

Nel webinar sulle novità della release 22.5 di Instant Developer Cloud , Giuseppe Lanzi, responsabile dei reparti Customer Care e Systems e Paolo Giannelli, responsabile...

Leggi Tutto

Instant Developer Cloud 22.5: esperienze migliori per te e il tuo software

Instant Developer Cloud 22.5 è una versione progettata per una migliore esperienza di utilizzo da parte degli sviluppatori e di fruizione delle applicazioni per gli...

Leggi Tutto

Rimani Aggiornato

Iscriviti alla nostra newsletter per ricevere aggiornamenti su novità, eventi, release, webinar e tante altre notizie sui prodotti Instant Developer.