109 lines
4.1 KiB
C#
109 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using SteamWare;
|
|
|
|
namespace C2P.WebUserControls
|
|
{
|
|
public partial class mod_SyncVoc : System.Web.UI.UserControl
|
|
{
|
|
/// <summary>
|
|
/// wrapper classe WS remota
|
|
/// </summary>
|
|
protected RemoteWS.WS_dataSoapClient clientWS = new RemoteWS.WS_dataSoapClient();
|
|
/// <summary>
|
|
/// dati remoti
|
|
/// </summary>
|
|
protected List<string> remoteData;
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsPostBack)
|
|
{
|
|
reloadData();
|
|
}
|
|
}
|
|
|
|
private void reloadData()
|
|
{
|
|
DataWrap.DW.resetVocabolario();
|
|
// carico dati locali...
|
|
lblNumLoc.Text = string.Format("{0} record", DataWrap.DW.dictVocabolario.Count);
|
|
|
|
// carico dati remoti
|
|
remoteData = clientWS.Vocabolario();
|
|
lblNumRem.Text = string.Format("{0} record", remoteData.Count);
|
|
}
|
|
/// <summary>
|
|
/// (Ri)carico dati vocabolario remoto
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
protected void btnSync_Click(object sender, EventArgs e)
|
|
{
|
|
reloadData();
|
|
// inizio processo...
|
|
DateTime inizio = DateTime.Now;
|
|
// ciclo sui risultati...
|
|
string[] termine;
|
|
int updLoc = 0;
|
|
int insRem = 0;
|
|
// step 1: update da remoto a locale
|
|
foreach (string risultato in remoteData)
|
|
{
|
|
// cerco termini splittando
|
|
try
|
|
{
|
|
termine = risultato.Split('#');
|
|
// in primis cerco SE ESISTA la chiave in locale...
|
|
if (DataWrap.DW.dictVocabolario.ContainsKey(termine[0] + "#" + termine[1]))
|
|
{
|
|
// verifico se il termine sia cambiato...
|
|
if (DataWrap.DW.dictVocabolario[termine[0] + "#" + termine[1]] != termine[2] || DataWrap.DW.dictVocabolario[termine[0] + "#" + termine[1]] == null)
|
|
{
|
|
// faccio upsert
|
|
selDataVoc.mgr.upsertLemma(termine[0], termine[1], termine[2]);
|
|
updLoc++;
|
|
}
|
|
}
|
|
else // non c'è faccio upsert ed inserisco comunque!
|
|
{
|
|
// faccio upsert
|
|
selDataVoc.mgr.upsertLemma(termine[0], termine[1], termine[2]);
|
|
updLoc++;
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
if (memLayer.ML.confReadInt("_logLevel") > 6)
|
|
{
|
|
logger.lg.scriviLog(string.Format("Errore merge vocabolario:{0}{1}", Environment.NewLine, exc));
|
|
}
|
|
}
|
|
}
|
|
// step 2: caricamento termini NUOVI locali in db remoto...
|
|
string trovato = "";
|
|
foreach (string key in DataWrap.DW.dictVocabolario.Keys)
|
|
{
|
|
// cerco la chiave nell'elenco...
|
|
trovato = remoteData.Find(x => x.StartsWith(key));
|
|
// se non la trovo chiamo metodo di upsert!
|
|
if (trovato == "" || trovato == null)
|
|
{
|
|
termine = key.Split('#');
|
|
clientWS.updateLemma(termine[0], termine[1], DataWrap.DW.dictVocabolario[key]);
|
|
insRem++;
|
|
}
|
|
}
|
|
// mostro esito!
|
|
lblUpdLoc.Text = string.Format("{0} termini aggiornati in locale", updLoc);
|
|
lblInsRem.Text = string.Format("{0} termini nuovi caricati in remoto", insRem);
|
|
lblRes.Text = string.Format("Sync effettuato: {0} ms", DateTime.Now.Subtract(inizio).TotalMilliseconds);
|
|
// ricarico dati locali e remoti
|
|
reloadData();
|
|
}
|
|
}
|
|
} |