Пример #1
0
        /// //////////////////////////////////////////
        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);
        }
Пример #2
0
        /// ////////////////////////////////////////////////////////////////////////////////////
        public CResultAErreur WriteChanges(CContexteDonneesSynchro donneesSources)
        {
            CResultAErreur result = base.SaveAll(true);

            if (!result)
            {
                return(result);
            }

            return(result);
        }
Пример #3
0
        /// //////////////////////////////////////////
        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);
        }
Пример #4
0
        ///////////////////////////////////////////////////////////////////////////////
        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);
        }