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. I campi obbligatori sono contrassegnati *


Potrebbe interessarti

Instant Developer Foundation e Cloud 24.5: la prima volta insieme

Il rilascio delle versioni 24.5 di Instant Developer Foundation e Instant Developer Cloud rappresenta una grande novità: è la prima occasione in cui le due...

Leggi Tutto

Integrazione di librerie JavaScript per generare barcode

Scegliere il modo giusto per generare barcode non è semplice e la decisione che prendi può fare la differenza in termini di costi e praticità.Potresti...

Leggi Tutto

Web API: il modo semplice per condividere database con Instant Developer Foundation

Utilizzare le Web API per condividere i propri database con altre applicazioni può essere a volte molto complicato. Ma, allo stesso tempo, le Web API...

Leggi Tutto

Rimani Aggiornato

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

    Presa visione dell'informativa (disponibile qui) resa da Pro Gamma SpA, acconsento al trattamento dei miei dati personali per l'invio di newsletter.*