//////////////////////////////////////////////////////////////////////// public CResultAErreurType <List <CModifSynchronisation> > GetModifsFromVersion( int nIdSyncStart, int nIdSyncEnd, CFiltresSynchronisation filtres) { bool bTmp = false; CResultAErreur res = FillWithModifsFromVersion( nIdSyncStart, nIdSyncEnd, ref bTmp, filtres, false, true); CResultAErreurType <List <CModifSynchronisation> > result = new CResultAErreurType <List <CModifSynchronisation> >(); if (!res) { result.EmpileErreur(res.Erreur); result.Result = false; } else { result.DataType = res.Data as List <CModifSynchronisation>; } return(result); }
//////////////////////////////////////////////////////////////////////// /// <summary> /// Remplit le contexte avec toutes les données modifiées depuis l'Id de synchro demandée /// </summary> /// <param name="nIdSynchroDebut"></param> /// <param name="nIdSynchroFin"></param> /// <param name="bHasData"></param> /// <param name="filtres"></param> /// <param name="bOnlyTablesIndiqueesDansFiltresSynchro"></param> /// <returns></returns> public CResultAErreur FillWithModifsFromVersion ( int nIdSynchroDebut, int nIdSynchroFin, ref bool bHasData, CFiltresSynchronisation filtres, bool bOnlyTablesIndiqueesDansFiltresSynchro) { return(FillWithModifsFromVersion( nIdSynchroDebut, nIdSynchroFin, ref bHasData, filtres, bOnlyTablesIndiqueesDansFiltresSynchro, false)); }
/// ///////////////////////////////////////////////////////// public static CResultAErreur PutMainIntoSecondary(int nIdSession, string strConnexionSecondaire, CFiltresSynchronisation filtres, string strCodeGroupeSynchronisation) { CResultAErreur result = CResultAErreur.True; ISynchroniseurBdd synchroniseur = GetSynchroniseur(nIdSession); try { result = synchroniseur.PutMainIntoSecondary(strConnexionSecondaire, filtres, strCodeGroupeSynchronisation); } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
//------------------------------------------------------------------------------------------- private static CFiltreData GetFiltreSynchro(int nIdSession, int nIdSynchroDebut, int nIdSynchroFin, CFiltresSynchronisation filtres, DataTable table) { CFiltreData filtreSynchro = null; if (filtres != null) { filtreSynchro = filtres.GetFiltreForTable(nIdSession, table.TableName); } if (filtreSynchro == null) { filtreSynchro = new CFiltreData(); } int nNumParametreIdSync = filtreSynchro.Parametres.Count + 1; string strFiltre = filtreSynchro.Filtre; filtreSynchro.Filtre = "(" + CSc2iDataConst.c_champIdSynchro + ">=@" + nNumParametreIdSync.ToString() + " and " + CSc2iDataConst.c_champIdSynchro + "<=@" + (nNumParametreIdSync + 1).ToString(); if (nIdSynchroDebut == -1) //C'est la première synchro, intègre les éléments modifiés avant prise en charge //des synchros { if (filtreSynchro is CFiltreDataAvance) { filtreSynchro.Filtre += " or hasno(" + CSc2iDataConst.c_champIdSynchro + ")"; } else { filtreSynchro.Filtre += " or " + CSc2iDataConst.c_champIdSynchro + " is null"; } } filtreSynchro.Filtre += ")"; if (strFiltre != "") { filtreSynchro.Filtre += " and (" + strFiltre + ")"; } filtreSynchro.Parametres.Add(nIdSynchroDebut); filtreSynchro.Parametres.Add(nIdSynchroFin); return(filtreSynchro); }
protected CResultAErreur FillWithModifsFromVersion( int nIdSynchroDebut, int nIdSynchroFin, ref bool bHasData, CFiltresSynchronisation filtres, bool bOnlyTablesIndiqueesDansFiltresSynchro, bool bNePasLireLesDonnées) { m_nIdSynchro = nIdSynchroDebut; CResultAErreur result = CResultAErreur.True; Clear(); //Crée la structure string[] strTables = m_mappeurTablesToClass.GetListeTables(); if (bOnlyTablesIndiqueesDansFiltresSynchro) { strTables = filtres.TablesDefinies; } foreach (string strTable in strTables) { try { GetTableSafe(strTable); } catch { //La table n'existe pas, elle n'est probablement pas dans la structure secondaire } } //va chercher les informations dans la base pour chaque table ArrayList lst = GetTablesOrderInsert(); int nTable = 0; bool bOldEnforce = EnforceConstraints; EnforceConstraints = false; List <CModifSynchronisation> lstModifs = new List <CModifSynchronisation>(); foreach (DataTable table in lst) { if (m_mappeurTablesToClass.IsSynchronisable(table.TableName)) { IObjetServeur loader = GetTableLoader(table.TableName); CFiltreData filtreSynchro = GetFiltreSynchro(IdSession, nIdSynchroDebut, nIdSynchroFin, filtres, table); if (bNePasLireLesDonnées) { int nCount = loader.CountRecords(table.TableName, filtreSynchro); if (nCount > 0) { CModifSynchronisation modif = new CModifSynchronisation( table.TableName, nCount, filtreSynchro, nIdSynchroDebut, nIdSynchroFin); lstModifs.Add(modif); } } else { nTable++; result = IntegreModif( ref bHasData, table, loader, filtreSynchro, nIdSynchroDebut, nIdSynchroFin); if (!result) { return(result); } } } } if (!bNePasLireLesDonnées) { //Intègre la table des synclog CListeObjetDonneeGenerique <CEntreeLogSynchronisation> lstLogs = new CListeObjetDonneeGenerique <CEntreeLogSynchronisation>(this); if (nIdSynchroDebut >= 0) { lstLogs.Filtre = new CFiltreData(CSc2iDataConst.c_champIdSynchro + ">=@1 and " + CSc2iDataConst.c_champIdSynchro + "<=@2", nIdSynchroDebut, nIdSynchroFin); } else { lstLogs.Filtre = new CFiltreData(CSc2iDataConst.c_champIdSynchro + ">=@1", nIdSynchroFin); } lstLogs.AssureLectureFaite(); } EnforceConstraints = bOldEnforce; Hashtable tableRowAdd = new Hashtable(); //Liste des éléments ajoutés ArrayList listRowToDelete = new ArrayList(); //Les éléments sont supprimés s'ils ont été ajoutés et supprimés ensuite /*//Charge les logs de données ajoutées et supprimées * CListeObjetsDonnees lstEntrees = new CListeObjetsDonnees ( this, typeof(CEntreeLogSynchronisation)); * lstEntrees.Filtre = new CFiltreData ( CSc2iDataConst.c_champIdSynchro+">=@1 and "+ * CSc2iDataConst.c_champIdSynchro+"<=@2", nIdSynchroDebut, nIdSynchroFin); * if ( bOnlyTablesIndiqueesDansFiltresSynchro ) * { * StringBuilder bl = new StringBuilder(); * foreach ( string strTable in strTables ) * bl.Append("'"+strTable+"',"); * bl.Remove ( bl.Length-1, 1); * lstEntrees.Filtre = CFiltreData.GetAndFiltre ( lstEntrees.Filtre, * new CFiltreData ( CEntreeLogSynchronisation.c_champTable+" in ("+ * bl.ToString()+")")); * } * foreach ( CEntreeLogSynchronisation entree in lstEntrees ) * { * if ( entree.TypeModif == CEntreeLogSynchronisation.TypeModifLogSynchro.tAdd ) * { * DataTable table = GetTableSafe ( entree.TableConcernee ); * CObjetDonneeAIdNumerique obj = (CObjetDonneeAIdNumerique)GetNewObjetForTable ( table ); * obj.Id = entree.IdElement; * tableRowAdd[entree.TableConcernee+"_"+entree.IdElement] = entree.Row; * bHasData = true; * } * else * { * if ( tableRowAdd[entree.TableConcernee+"_"+entree.IdElement] != null ) * { * listRowToDelete.Add ( entree.Row ); * listRowToDelete.Add ( tableRowAdd[entree.TableConcernee+"_"+entree.IdElement] ); * bHasData = true; * } * } * } * * foreach ( DataRow row in listRowToDelete ) * { * row.Delete(); * }*/ if (bNePasLireLesDonnées) { result.Data = lstModifs; } return(result); }