/// ////////////////////////////////////////// public CResultAErreur Delete(CContexteDonneesSynchro donneesSources) { CResultAErreur result = CResultAErreur.True; ArrayList lst = donneesSources.GetTablesOrderDelete(); DataTable tableEntreesLog = donneesSources.GetTableSafe(CEntreeLogSynchronisation.c_nomTable); foreach (DataTable table in lst) { if (m_mappeurTablesToClass.IsSynchronisable(table.TableName)) { DataTable tableDest = Tables[table.TableName]; if (tableDest != null) { DataView view = new DataView(tableEntreesLog); string strFiltre = CEntreeLogSynchronisation.c_champTable + "='" + table.TableName + "'"; view.RowFilter = strFiltre; foreach (DataRowView row in view) { CEntreeLogSynchronisation entree = new CEntreeLogSynchronisation(row.Row); if (entree.TypeModif == CEntreeLogSynchronisation.TypeModifLogSynchro.tDelete) { DataRow rowDest = tableDest.Rows.Find(entree.IdElement); if (rowDest != null) { rowDest.Delete(); } } } } } } return(result); }
/// //////////////////////////////////////////////////////////////////////////////////// public CResultAErreur WriteChanges(CContexteDonneesSynchro donneesSources) { CResultAErreur result = base.SaveAll(true); if (!result) { return(result); } return(result); }
/// ////////////////////////////////////////// public CResultAErreur Update(CContexteDonneesSynchro donneesSources) { CResultAErreur result = CResultAErreur.True; //Met à jour les tables; foreach (DataTable tableSecondaire in donneesSources.Tables) { if (m_mappeurTablesToClass.IsSynchronisable(tableSecondaire.TableName)) { DataTable tableDest = Tables[tableSecondaire.TableName]; if (tableDest != null) { string strPrimKey = tableDest.PrimaryKey[0].ColumnName; foreach (DataRow rowSource in GetListeRowsOrdreUpdate(tableSecondaire)) { object obj = rowSource[CSc2iDataConst.c_champIdSynchro]; if (m_tableAjouts[tableSecondaire.TableName + "_" + rowSource[strPrimKey].ToString()] == null) //Ce n'est pas un élément ajouté { if (obj is int && ((int)obj) >= donneesSources.IdSynchro) { DataRow rowToUpdate = tableDest.Rows.Find(rowSource[strPrimKey]); if (rowToUpdate != null) { DataRow rowDest = rowToUpdate; object syncSource, syncDest; syncSource = rowSource[CSc2iDataConst.c_champIdSynchro]; syncDest = rowDest[CSc2iDataConst.c_champIdSynchro]; if (syncSource == null || syncDest == null || (int)syncSource != (int)syncDest) { CopyRow(rowSource, rowDest, false); } } else { //L'élément n'existe pas, il faut le créer !!!! DataRow newRow = CopieToNew(rowSource, tableDest); m_mapOldRowToNewRow[rowSource] = newRow; m_tableAjouts[tableDest.TableName + "_" + newRow[tableDest.PrimaryKey[0]]] = ""; } } } } } } } return(result); }
/////////////////////////////////////////////////////////////////////////////// public CResultAErreur AjouteNouveaux(CContexteDonneesSynchro donneesSources) { CResultAErreur result = CResultAErreur.True; ArrayList lst = donneesSources.GetTablesOrderInsert(); DataTable tableEntreesLog = donneesSources.GetTableSafe(CEntreeLogSynchronisation.c_nomTable); foreach (DataTable tableSource in lst) { if (m_mappeurTablesToClass.IsSynchronisable(tableSource.TableName) && tableSource.Rows.Count > 0) { string strPrimKey = tableSource.PrimaryKey[0].ColumnName; DataTable tableDest = GetTableSafe(tableSource.TableName); if (tableDest != null) { bool bIsDestEmpty = tableDest.Rows.Count == 0; //Commence par ajouter les éléments à updater qui ne sont pas là //Normallement, il ne devrait pas y en avoir, mais sait-on jamais int nRow = 0; ICollection listeRows = GetListeRowsOrdreUpdate(tableSource); foreach (DataRow rowSource in listeRows) { nRow++; object obj = rowSource[CSc2iDataConst.c_champIdSynchro]; if (m_tableAjouts[tableSource.TableName + "_" + rowSource[strPrimKey].ToString()] == null) //Ce n'est pas un élément ajouté { if (obj == DBNull.Value || obj is int && ((int)obj) >= donneesSources.IdSynchro) { bool bShouldCreate = bIsDestEmpty; if (!bShouldCreate) { DataRow rowToUpdate = tableDest.Rows.Find(rowSource[strPrimKey]); bShouldCreate = rowToUpdate != null; } if (bShouldCreate) { //L'élément n'existe pas, il faut le créer !!!! DataRow newRow = CopieToNew(rowSource, tableDest); m_mapOldRowToNewRow[rowSource] = newRow; m_tableAjouts[tableDest.TableName + "_" + newRow[tableDest.PrimaryKey[0]]] = ""; } } } } /*string strPrim = tableDest.PrimaryKey[0].ColumnName; * DataView view = new DataView ( tableEntreesLog ); * string strFiltre = CEntreeLogSynchronisation.c_champTable+"='"+table.TableName+"'"; * view.RowFilter = strFiltre; * foreach ( DataRowView row in view ) * { * CEntreeLogSynchronisation entree = new CEntreeLogSynchronisation(row.Row); * if ( entree.TypeModif == CEntreeLogSynchronisation.TypeModifLogSynchro.tAdd ) * { * //Vérifie que l'objet n'éxiste pas déjà * if ( tableDest.Select(strPrim+"="+entree.IdElement).Length== 0 ) * { * CObjetDonneeAIdNumeriqueAuto obj = entree.GetObjet(); * DataRow newRow = CopieToNew ( obj.Row, tableDest ); * m_mapOldRowToNewRow[obj.Row] = newRow; * m_tableAjouts[table.TableName+"_"+obj.Id] = ""; * } * } * }*/ } } } return(result); }