//-------------------------------------------------------------------
 public CDroitUtilisateurServeur(int nIdSession)
     : base(nIdSession)
 {
     if (!CSc2iDataServer.ExitsConnexion(c_droitsDataSource))
     {
         InitGestionDroits();
     }
 }
Example #2
0
        ///////////////////////////////////////////
        public static CResultAErreur Init(CDefinitionConnexionDataSource defConnexionParDefaut)
        {
            if (m_instance != null)
            {
                m_instance.Dispose();
                m_instance = null;
            }
            CResultAErreur result = CResultAErreur.True;

            m_instance = new CSc2iDataServer(defConnexionParDefaut);
            return(result);
        }
 //-------------------------------------------------------------------
 /// <summary>
 /// Initialise la gestion de droits.
 /// </summary>
 public static void InitGestionDroits()
 {
     if (!CSc2iDataServer.ExitsConnexion(c_droitsDataSource))
     {
         CSc2iDataServer.AddDefinitionConnexion(
             new CDefinitionConnexionDataSource(
                 c_droitsDataSource,
                 typeof(CGestionnaireDroitsUtilisateurs),
                 ""));
     }
     CSc2iDataServer.SetIdConnexionForClasse(typeof(CDroitUtilisateurServeur), c_droitsDataSource);
 }
        /// ///////////////////////////////////////////////////////

        /*public override DataTable Read ( CFiltreData filtre, int nStart, int nEnd )
         * {
         *      IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion (IdSession, GetType());
         *      string str
         *      IDataAdapter adapter = connexion.GetSimpleReadAdapter( strReq, filtre );
         *      DataSet ds = new DataSet();
         *      adapter.TableMappings.Add("Table",GetNomTable());
         *      adapter.FillSchema( ds, SchemaType.Mapped );
         *  adapter.Fill(ds);
         *      DataTable tbl = ds.Tables[GetNomTable()];
         *      foreach ( string strChampBlob in lstBlobs )
         *              tbl.Columns.Add ( strChampBlob, typeof(CDonneeBinaireInRow)).DefaultValue = DBNull.Value;
         *
         *      nEnd = Math.Min ( nEnd, tbl.Rows.Count );
         *      if ( nStart >= 0 && nEnd >= 0 )
         *      {
         *              DataTable tblNew = tbl.Clone();
         *
         *              for ( int n = nStart; n < nEnd; n++ )
         *                      tblNew.ImportRow ( tbl.Rows[n] );
         *              tbl = tblNew;
         *      }
         *      return tbl;
         * }*/

        //////////////////////////////////////////////////
        public override CDataTableFastSerialize FillSchema()
        {
            DataTable tbl = (DataTable)m_tableSchema[GetNomTable()];

            if (tbl != null)
            {
                return(tbl.Clone());
            }
            IDataAdapter adapter = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, GetType()).GetTableAdapter(GetNomTableInDb());

            adapter.TableMappings.Add("Table", GetNomTable());
            DataSet ds = new DataSet();

            adapter.FillSchema(ds, SchemaType.Mapped);
            CUtilDataAdapter.DisposeAdapter(adapter);
            DataTable table = ds.Tables[GetNomTable()];

            if (table == null)
            {
                table = ds.Tables[GetNomTableInDb()];
                if (table != null)
                {
                    table.TableName = GetNomTable();
                }
            }
            CStructureTable structure = CStructureTable.GetStructure(GetTypeObjets());

            foreach (CInfoChampTable info in structure.Champs)
            {
                if (info.TypeDonnee == typeof(CDonneeBinaireInRow) && table.Columns[info.NomChamp] != null)
                {
                    table.Columns[info.NomChamp].DataType = typeof(CDonneeBinaireInRow);
                }
            }
            tbl = ds.Tables[GetNomTable()];
            FaitLesCorrectionsSurLeSchema(tbl);
            m_tableSchema[GetNomTable()] = tbl.Clone();
            return(tbl);
        }
Example #5
0
 //---------------------------------
 public void OnCloseSession()
 {
     CSc2iDataServer.OnCloseSession(IdSession);
     Dispose();
 }
Example #6
0
        virtual public CResultAErreur CreationOuUpdateTableFromType(Type tp, ArrayList strChampsAutorisesANull)
        {
            CResultAErreur result = CResultAErreur.True;



            CStructureTable structure = CStructureTable.GetStructure(tp);

            object objServeur = null;

            try
            {
                objServeur = CContexteDonnee.GetTableLoader(structure.NomTable, null, Connection.IdSession);
            }
            catch
            {
            }
            if (objServeur == null)
            {
                return(result);
            }
            //Vérifie que le type est bien lié à cette connexion
            IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(
                Connection.IdSession,
                objServeur.GetType());

            if (connexion == null || connexion.ConnexionString != Connection.ConnexionString)
            {
                return(result);
            }

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

            //S'assure que toutes les tables parentes existent
            foreach (CInfoRelation relation in structure.RelationsParentes)
            {
                if (relation.TableParente != structure.NomTable && relation.IsInDb)
                {
                    string strNomTableParenteInDb = CContexteDonnee.GetNomTableInDbForNomTable(relation.TableParente);
                    if (!TableExists(strNomTableParenteInDb))
                    {
                        result = CreationOuUpdateTableFromType(CContexteDonnee.GetTypeForTable(relation.TableParente));
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
            }

            if (TableExists(structure.NomTableInDb))
            {
                result = UpdateTable(structure, strChampsAutorisesANull);
            }
            else
            {
                result = CreateTable(structure);
            }

            return(result);
        }
        /// //////////////////////////////////////////////////////////////////
        //le result du dataset contient le dataset à appliquer à la base secondaire
        public CResultAErreur PutSecondaryIntoMain(CContexteDonneesSynchroSecondaire dsSecondaire)
        {
            CResultAErreur result = CResultAErreur.True;

            //Répercute les modifs de la base secondaire sur la base primaire
            using (CContexteDonneesSynchroMain donneesMain = new CContexteDonneesSynchroMain(IdSession, true))
            {
                IDatabaseConnexionSynchronisable connexionMain;
                connexionMain = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, m_strIdConnexion);

                int nIdSyncMain = connexionMain.IdSyncSession;



                result = donneesMain.ChargeDonneesAMettreAJour(dsSecondaire);

                if (result)
                {
                    result = donneesMain.AjouteNouveaux(dsSecondaire);
                }
                if (result)
                {
                    result = donneesMain.Update(dsSecondaire);
                }
                if (result)
                {
                    result = donneesMain.Delete(dsSecondaire);
                }



                try
                {
                    connexionMain.BeginTrans();
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                    result.EmpileErreur(I.T("Error while data synchronization|208"));
                    return(result);
                }

                if (result)
                {
                    result = donneesMain.WriteChanges(dsSecondaire);
                }

                //Augmente d'un le numéro de version de la base principale

                if (result)
                {
                    while (connexionMain.IdSyncSession < nIdSyncMain + 2)
                    {
                        connexionMain.IncrementeSyncSession();
                    }

                    result = connexionMain.CommitTrans();

                    result.Data = dsSecondaire;
                }
                else
                {
                    connexionMain.RollbackTrans();
                }
            }
            return(result);
        }
        /// //////////////////////////////////////////////////////////////////
        public int IncrementeIdSynchroMain()
        {
            IDatabaseConnexionSynchronisable connexion = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, m_strIdConnexion);

            connexion.IncrementeSyncSession();
            return(connexion.IdSyncSession);
        }
        ///--------------------------------------
        public void UnlockSyncSessionLocale()
        {
            IDatabaseConnexionSynchronisable connexion = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");

            connexion.UnlockSyncSessionLocal(  );
        }
        /// //////////////////////////////////////////////////////////////////
        public void LockSyncSessionLocalTo(int nIdLockSyncSession)
        {
            IDatabaseConnexionSynchronisable connexion = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");

            connexion.LockSyncSessionLocalTo(nIdLockSyncSession);
        }
        /// //////////////////////////////////////////////////////////////////
        public CResultAErreur PutMainIntoSecondary(CContexteDonneesSynchro ctxMain)
        {
            CResultAErreur result = CResultAErreur.True;
            IDatabaseConnexionSynchronisable connexionSecondaire = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, m_strIdConnexion);

            //Toutes les modifs apportées sur la base secondaire doivent porter l'id de synchro
            //Initial de la base secondaire, sinon les modifs font du
            //ping pong entre secondaire et main,
            //Ces modifs ne doivent surtout pas apparaitre
            //lors d'une synchro de sec->main !
            connexionSecondaire.LockSyncSessionLocalTo(connexionSecondaire.LastSyncIdPutInBasePrincipale);

            //Répercute les modifs de la base secondaire sur la base primaire
            using (CContexteDonneesSynchroSecondaire donneeSec = new CContexteDonneesSynchroSecondaire(IdSession, true))
            {
                result = donneeSec.ChargeDonneesAMettreAJour(ctxMain);

                donneeSec.EnforceConstraints = false;
                if (result)
                {
                    result = donneeSec.AjouteNouveaux(ctxMain);
                }
                if (result)
                {
                    result = donneeSec.Update(ctxMain);
                }
                if (result)
                {
                    result = donneeSec.Delete(ctxMain);
                }
                donneeSec.EnforceConstraints = true;
                try
                {
                    connexionSecondaire.BeginTrans();
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                    result.EmpileErreur(I.T("Error while data synchronization|208"));
                    return(result);
                }

                if (result)
                {
                    result = donneeSec.WriteChanges(ctxMain);
                }


                if (result)
                {
                    if (connexionSecondaire.LastSyncIdPutInBasePrincipale == -1)
                    {
                        connexionSecondaire.LastSyncIdPutInBasePrincipale = connexionSecondaire.IdSyncSession;
                    }

                    connexionSecondaire.UnlockSyncSessionLocal();
                    while (connexionSecondaire.IdSyncSession < ctxMain.IdSynchro)
                    {
                        connexionSecondaire.IncrementeSyncSession();
                    }

                    connexionSecondaire.LastSyncIdVueDeBasePrincipale = ctxMain.IdSynchro == -1?0:ctxMain.IdSynchro;

                    connexionSecondaire.CommitTrans();
                }

                if (!result)
                {
                    connexionSecondaire.RollbackTrans();
                }
            }
            return(result);
        }
        /// //////////////////////////////////////////////////////////////////
        /// le data du result contient le dataset à appliquer à la base distante
        public CResultAErreur GetModifsInMain(
            int nIdSyncSessionFrom,
            int nIdSyncSessionSecondaireCourant,
            string strCodeGroupeSynchronisation)
        {
            CResultAErreur                   result        = CResultAErreur.True;
            CFiltresSynchronisation          filtres       = GetFiltres(strCodeGroupeSynchronisation);
            IDatabaseConnexionSynchronisable connexionMain = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, m_strIdConnexion);
            int nIdSyncMain = connexionMain.IdSyncSession;

            while (connexionMain.IdSyncSession <= nIdSyncSessionSecondaireCourant)
            {
                connexionMain.IncrementeSyncSession();
            }

            CContexteDonneesSynchro ctxMain = new CContexteDonneesSynchro(IdSession, true);
            bool bHasChange = false;

            ctxMain.FillWithModifsFromVersion(nIdSyncSessionFrom == -1?-1:nIdSyncSessionFrom + 1, nIdSyncMain, ref bHasChange, filtres, false);
            if (bHasChange)
            {
                DataSet dsRetour = new DataSet();
                foreach (DataTable table in ctxMain.Tables)
                {
                    if (table.Rows.Count != 0)
                    {
                        DataTable tableCopie = CUtilDataSet.AddTableCopie(table, dsRetour);
                        ArrayList lst        = new ArrayList();
                        foreach (DataColumn col in tableCopie.Columns)
                        {
                            if (col.DataType == typeof(CDonneeBinaireInRow))
                            {
                                lst.Add(col);
                            }
                        }
                        foreach (DataColumn col in lst)
                        {
                            tableCopie.Columns.Remove(col);
                        }

                        foreach (DataRow row in table.Rows)
                        {
                            tableCopie.ImportRow(row);
                        }
                    }
                }
                dsRetour.ExtendedProperties[c_cleIdSynchro] = nIdSyncMain;
                result.Data = dsRetour;
            }
            return(result);
        }