It is currently 8 June 2025, 17:38 Advanced search

Gestione della Sincronizzazione DO

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Gestione della Sincronizzazione DO

Postby Falken » 13 March 2013, 16:56

Salve,
a breve dovrei sviluppare un'applicazione per la raccolta ordini di un'azienda, e si è pensato di utilizzare la sincronizzazione dei DO.
L'applicazione deve funzionare offline, permettendo ai vari agenti di inserire nuovi ordini di vendita e di inviarli, in un secondo momento, ad un server centrale collegato a sua volta ad un gestionale.
Ad ogni client dovranno essere inviate, le sole anagrafiche, assegnate all'agente che utilizza il programma.

Leggendo il manuale di inde, non mi sono chiari alcuni punti:
    1) Il legame tra Username e Domain va gestito manualmente nell'On Synchronize, è corretto?
    Per esempio in base al nome utente e password passati dalla richiesta di sync dovrei risalire all'agente e di conseguenza assegnare al Domain il codice agente?
    3) In che modo il server recupera le variazioni da inviare al client? Con la gestione del dominio è possibile "filtare" i dati da inviare?
    4) Se in fase di startup dell'applicazione (db vuoto) volessi syncronizzare eclusivamente una tabella, cosa dovrei fare?
    5) Oltre alla differenza del Parametro Reason dell On validate cosa cambia nella gestione del sync tra Server e Client?
    Pongo questa domanda poichè nel mio caso, il client non dovrebbe ricevere aggiornamenti riguardo gli Ordini di Vendita (un client non può visualizzare gli ordini fatti da un altro agente), al massimo segnalazioni di variazioni per gli ordini inviati in precedenza; al contrario del server che acquisisce tutti gli ordini dai vari client.
User avatar
Falken
 
Posts: 360
Joined: 4 February 2011, 12:20

Re: Gestione della Sincronizzazione DO

Postby m.dieugenio » 14 March 2013, 7:05

Io ho realizzato un'applicazione simile e dopo molte "peripezie" posso dire che se, nello stesso progetto, ci sono queste necessità:
- sincronizzazione di dati bidirezionale con filtri
- sincronizzazione di dati parziali
- sincronizzazione di dati solamente di alcune tabelle (uni e bidirizionali)

allora ti consiglio di "realizzare tutto manualmente" tramite syncquery ( a meno che non sia cambiato qualcosa nella versione 12).
m.dieugenio
 
Posts: 517
Joined: 17 May 2012, 9:13

Re: Gestione della Sincronizzazione DO

Postby g.lanzi » 14 March 2013, 9:02

La sincronizzazione può essere un problema da non prendere sotto gamba. Solitamente ci si trova si deve implementare:
- un sistema di applicazioni con dati distribuiti (db server e sqlite nel dispositivo
- un meccanismo di sincronizzazione bidirezionale (i dati possono essere modificati ovunque)
- un meccanismo di sincronizzazione partializzabile
- un meccanismo che permetta di portare sul dispositivo solamente i dati che l'utente loggato deve poter visualizzare, filtrandoli all'origine

L'implementazione di questo tipo di infrastruttura non è banale, ed è per questo che suggeriamo l'utilizzo del framework di sincronizzazione per ottenere il risultato desiderato. Bisogna solo sapere come pilotare il framework nelle circostanze specifiche in cui si deve operare.

Per rispondere alle tue domande:
1) sì, il dominio viene impostato manualmente via codice, e praticamente identifica l'insieme dei dati che devono essere portati al dispositivo. Per filtrare i dati occorre utilizzarlo.
2) Quando un client chiede la sincronizzazione al server scatta l'evento di OnSyncrhonize, dove il programmatore può decidere se svolgere operazioni particolari in base all'utente loggato o in base al momento di ultima sincronizzazione (se è troppo vecchia può convenire risincronizzare tutta una classe con SyncService.resyncClass). Ogni classe con il servizio attivato si sincronizza, e se è necessario il sistema effettua automaticamente la sincronizzazione completa.
3) In una sincronizzazione completa (scatenata dal server se è molto che non ci sincronizza o dall'utente con la resyncClass) scatta l'evento classe.onResyncClient. In questo evento (da gestire lato server) è possibile filtrare i dati per il dominio corrente, facendo in modo che sul dispositivo finisca solo un sottoinsieme di quelli presenti sul database centrale.
In una sincronizazione parziale il server usa la ZZ_Sync per sapere quali modifiche sono state apportate, e a quali documenti, dall'ultima sincronizzazione del client.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby g.lanzi » 14 March 2013, 9:07

...continuo la risposta

4) In fase di startup, la prima volta il sistema lato client si occupa di creare tutto il database. Di default tutte le classi con il servizio attivo vengono sincronizzate completamente, ma eventualmente è possibile usare gli eventi sopra detti per fare in modo che i dati vengano scaricati nell'ordine desiderato.
5) Questo si risolve usando il dominio, e facendo in modo che sul dispositivo finiscano solamente i documenti e le modifiche appartenenti al dominio dell'utente corrente.

Il primo approccio alla sincronizzazione può essere molto facilitato dal rapporto con il servizio di assistenza. Se è possibile vale la pena vedere insieme la cosa.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby poidomani » 14 March 2013, 9:13

c'è mica un esempio a cui ispirarsi?
Ing. Giovanni Poidomani - freelance
saper ascoltare significa possedere, oltre al proprio, il cervello degli altri. (Leonardo da Vinci)
poidomani
 
Posts: 3310
Joined: 4 November 2010, 15:07
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby g.lanzi » 14 March 2013, 10:23

Mi piacerebbe riuscira a fare un bell'esempio, attualmente non è disponibile un progetto completo.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby m.dieugenio » 14 March 2013, 10:44

Esistono però tre problematiche che non si riescono a gestire, perlomeno da quello che potuto capire io con l'aiuto del servizio di assistenza.
1. Non è possibile sincronizzare (con il metodo Syncronize) solamente alcune delle tabelle definite con syncro bidirezionale
2. Non è possibile lato client sapere (se non con gestione manuale) se un record è stato sincronizzato
3. Non è possibile far decidere (lato client) se e quando un determinato record debba essere sincronizzato

Ecco perchè purtroppo in molti casi è necessario seguire strade diverse.

Il problema più rilevante, per le mie applicazioni, è sicuramente quello del punto 3
m.dieugenio
 
Posts: 517
Joined: 17 May 2012, 9:13

Re: Gestione della Sincronizzazione DO

Postby g.lanzi » 14 March 2013, 10:59

Per quanto riguarda gli esempi vorrei aggiungere che attualmente sono disponibili:
- il capitolo 5 della guida all'uso mobile di In.de http://doc.instantdeveloper.com/inde-mobile-users-guide.pdf
- alcuni progetti dell'application allery (iSpesa, bilancio familiare e newscloud) che sincronizzano i dati con il server
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby g.lanzi » 14 March 2013, 11:29

Per quanto riguarda le problematiche da gestire, mi vengono in mente due potenziali soluzioni.

1) allo stato attuale si potrebbe utilizzare l'evento OnSyncFilter per aggiungere una clausola alla where clause che carica le modifiche da mandare al client. http://doc.instantdeveloper.com/?ARTID=9F2C5B04-6FDE-478C-B98C-7F5BB65AF82F
Si potrebbe creare una stringa per saltare tutte le righe che nel camo DNA contengono il classname dei documenti da saltare.
Potrebbe essere interessante un metodo che permetta di sincronizzare una classe, qualcosa tipo Class.Synchronize.
2) Non è possibile sapere se un record deve essere sincronizzato senza interrogare il server, potrebbero esserci delle modifiche che il server deve ancor mandare. Se invece si vuole sapere se il client ha delle modifiche da mandare al server, allora è possibile aggiungere al documento una proprietà aggiuntiva che viene popolata con now() nell'AfterSave. Se è maggiore di SyncService.LastSynchronization() allora le modifiche devono ancora essere mandate al server.

Il terzo punto non so se sono riuscito a capirlo del tutto. Potresti spiegarmi meglio la tua esigenza?
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3504
Joined: 29 September 2010, 10:24
Location: Bologna

Re: Gestione della Sincronizzazione DO

Postby m.dieugenio » 14 March 2013, 11:41

Intanto grazie per la risposta, proverò nel breve il punto 1...quello che cercavo io era esattamente il Class.Syncronize.

Per quanto riguarda il punto 3 la necessità sarebbe quella di poter dire se un record deve essere sincronizzato con il server, nelle mie casistiche si tratta esclusivamente di nuovi inserimenti lato client. Provo a spiegarmi con un esempio
Un client inserisce un nuovo ordine
questo ordine non è detto che debba essere inviato al server alla prima sincronizzazione per tutta una serie di motivi, ma comunque deve restare memorizzato sul dispositivo.
Successivamente il client dovrebbe poter dire...OK ora l'ordine può essere sincronizzato. Nel caso specifico io ho un flag sulla TEstata dell'Ordine che mi segnala se lo stesso deve essere sincronizzato (o meglio inviato); tuttavia quando sincronizzo non riesco ad escluderli.
m.dieugenio
 
Posts: 517
Joined: 17 May 2012, 9:13

Next

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: No registered users and 29 guests

cron