Exemple #1
0
        //Récuperation du type de connection

        public static void Autoexec()
        {
            CSc2iDataServer.AddDefinitionConnexion(
                new CDefinitionConnexionDataSource(
                    c_spvConnection,
                    typeof(COracleDatabaseConnexion),
                    CSpvServeurRegistre.DatabaseConnexionString,
                    CSpvServeurRegistre.PrefixeTablesSPV));
            CSc2iDataServer.SetIdConnexionForAssembly("spv.data.serveur", c_spvConnection);
            COracleDatabaseConnexion cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(0, c_spvConnection) as COracleDatabaseConnexion;

            ((COracleDatabaseConnexion)cnx).NomTableSpaceIndex = CSpvServeurRegistre.NomTableSpaceIndexOracle;
            cnx.RunStatement("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE");
        }
Exemple #2
0
        private CResultAErreur VideTable(int nIdTypeDonnee, DataTable table)
        {
            ArrayList lstRows = new ArrayList(table.Rows);
            CDonneeNotificationModificationContexteDonnee donnee = new CDonneeNotificationModificationContexteDonnee(IdSession);

            foreach (DataRow row in lstRows)
            {
                donnee.AddModifiedRecord(table.TableName, true, new object[] { row[table.PrimaryKey[0]] });
            }
            CResultAErreur result = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "").RunStatement(
                "delete from " +
                CDonneeCumulee.c_nomTable + " where " +
                CTypeDonneeCumulee.c_champId + "=" + nIdTypeDonnee.ToString());

            if (!result)
            {
                return(result);
            }
            table.Rows.Clear();
            CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { donnee });
            return(result);
        }
Exemple #3
0
        //------------------------------------------------------------------------
        private static bool IsTransactionTerminee(int nIdSession)
        {
            //S'assure que la transaction est terminée pour cette session
            CSessionClient     session = CSessionClient.GetSessionForIdSession(nIdSession);
            IDatabaseConnexion cnx     = null;

            if (session != null && session.IsConnected)
            {
                try
                {
                    cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(nIdSession, typeof(CEtapeWorkflow));
                }
                catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                {
                    cnx = null;
                }
            }
            else
            {
                cnx = null;
            }
            return(cnx == null || !cnx.IsInTrans());
        }
        /// //////////////////////////////////////////////////////
        private CResultAErreur OnCommitTrans()
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                ArrayList lstToDelete    = null;
                ArrayList lstToValidate  = null;
                ArrayList lstNotToDelete = null;
                GetListesPourValidation(ref lstToDelete, ref lstToValidate, ref lstNotToDelete);
                foreach (CReferenceDocument refDoc in lstToDelete)
                {
                    DeleteDocument(refDoc);
                }
                foreach (CReferenceDocument refDoc in lstToValidate)
                {
                    ValideDocument(refDoc);
                }
                lstToDelete.Clear();
                lstToValidate.Clear();
                lstNotToDelete.Clear();
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                result.EmpileErreur(I.T("Error while deleting/validating of EDM Documents|30001"));
            }
            finally
            {
                IDatabaseConnexion con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, GetType());
                if (con != null)
                {
                    con.OnCommitTrans -= m_commitEventHandlerNote;
                }
            }
            return(result);
        }
        //--------------------------------------------------------------------
        static void CTimosServeur_OnMajStructureBaseEvent(object sender, EventArgs e)
        {
            // Mise à jour de la base
            C2iDataBaseUpdateOperationTable opTableCamusatData =
                new C2iDataBaseUpdateOperationTable(typeof(CCamusatQowisioData));
            C2iDataBaseUpdateOperationTable opTableCamusatAlarm =
                new C2iDataBaseUpdateOperationTable(typeof(CCamusatQowisioAlarm));

            IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(0, "");

            if (connexion != null)
            {
                CResultAErreur result = CResultAErreur.True;
                try
                {
                    connexion.BeginTrans();
                    result = opTableCamusatData.ExecuterOperation(connexion, null);
                    if (result)
                    {
                        result = opTableCamusatAlarm.ExecuterOperation(connexion, null);
                    }
                    if (!result)
                    {
                        connexion.RollbackTrans();
                    }
                    else
                    {
                        connexion.CommitTrans();
                    }
                }
                catch (Exception ex)
                {
                    result.EmpileErreur(ex.Message);
                }
            }
            m_bTraitementEnCours = false;
        }
Exemple #6
0
        public CResultAErreur Execute(int nIdSession, System.Collections.Hashtable valeursParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            using (CContexteDonnee contexte = new CContexteDonnee(nIdSession, true, false))
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(nIdSession);
                session.BeginTrans();
                try
                {
                    CHandlerEvenementServeur.SuspendGestionnaire(true);
                    IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(nIdSession, typeof(CVersionDonneesObjetServeur));
                    //Supprime les versions
                    string strRequete = "delete from " + CVersionDonneesObjetOperation.c_nomTable;
                    result = connexion.RunStatement(strRequete);
                    if (!result)
                    {
                        return(result);
                    }

                    strRequete = "delete from " + CVersionDonneesObjet.c_nomTable;
                    result     = connexion.RunStatement(strRequete);
                    if (!result)
                    {
                        return(result);
                    }

                    foreach (CInfoRelation info in CContexteDonnee.GetListeRelationsTable(CVersionDonnees.c_nomTable))
                    {
                        if (info.TableParente == CVersionDonnees.c_nomTable)
                        {
                            strRequete = "update " + info.TableFille + " set " +
                                         info.ChampsFille[0] + "=null where " +
                                         info.ChampsFille[0] + " is not null";
                            result = connexion.RunStatement(strRequete);
                            if (!result)
                            {
                                return(result);
                            }
                        }
                    }
                    strRequete = "delete from " + CVersionDonnees.c_nomTable;
                    result     = connexion.RunStatement(strRequete);
                    if (!result)
                    {
                        return(result);
                    }

                    contexte.SetVersionDeTravail(-1, false);
                    //Charge toutes les tables
                    List <Type> typesAChamps = new List <Type>();
                    foreach (Type tp in CContexteDonnee.GetAllTypes())
                    {
                        contexte.GetTableSafe(CContexteDonnee.GetNomTableForType(tp));
                        if (typeof(IObjetDonneeAChamps).IsAssignableFrom(tp))
                        {
                            typesAChamps.Add(tp);
                        }
                    }

                    /*Problème sur les champs custom : parfois (c'est rare, mais ça arrive
                     * les valeurs de champs ne sont pas supprimées alors que l'entité est bien
                     * supprimée. On ne sait pas pourquoi, mais les lignes suivantes
                     * règlent le problème*/
                    foreach (Type tp in typesAChamps)
                    {
                        string strNomTable      = CContexteDonnee.GetNomTableForType(tp);
                        IObjetDonneeAChamps elt = (IObjetDonneeAChamps)Activator.CreateInstance(tp, new object[] { contexte });
                        string strTableValeurs  = elt.GetNomTableRelationToChamps();
                        strRequete = "Update " + strTableValeurs + " set " +
                                     CSc2iDataConst.c_champIsDeleted + "=1 where " +
                                     elt.GetChampId() + " in (select " + elt.GetChampId() + " from " +
                                     strNomTable + " where " + CSc2iDataConst.c_champIsDeleted + "=1)";
                        result = connexion.RunStatement(strRequete);
                        if (!result)
                        {
                            return(result);
                        }
                    }

                    ArrayList lstTables = CContexteDonnee.GetTableOrderDelete(contexte);

                    DataTable tableChampsCustomEnDernier = null;
                    foreach (DataTable table in lstTables)
                    {
                        /* J'ai un problème avec la table Champs Custom
                         * La requête suivante ne passe pas même directement dans SQL Server
                         * DELETE FROM CUSTOM_FIELD WHERE (SC2I_VERSION IS NOT NULL) OR (SC2I_DELETED = 1)
                         * Si je ne traite pas cette table, la purge se passe bien
                         *  */
                        if (table.TableName == CChampCustom.c_nomTable)
                        {
                            tableChampsCustomEnDernier = table;
                            continue;
                        }
                        if (table.Columns.Contains(CSc2iDataConst.c_champIdVersion))
                        {
                            strRequete = "delete from " + table.TableName + " where " +
                                         CSc2iDataConst.c_champIdVersion + " is not null or " +
                                         CSc2iDataConst.c_champIsDeleted + "=1";
                            result = connexion.RunStatement(strRequete);
                            if (!result)
                            {
                                return(result);
                            }
                        }
                    }

                    //if (tableChampsCustomEnDernier != null)
                    //{
                    //    if (tableChampsCustomEnDernier.Columns.Contains(CSc2iDataConst.c_champIdVersion))
                    //    {
                    //        strRequete = "delete from " + tableChampsCustomEnDernier.TableName + " where " +
                    //           CSc2iDataConst.c_champIdVersion + " is not null or " +
                    //           CSc2iDataConst.c_champIsDeleted + "=1";
                    //        result = connexion.RunStatement(strRequete);
                    //        if (!result)
                    //            return result;
                    //    }
                    //}
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                }
                finally
                {
                    CHandlerEvenementServeur.SuspendGestionnaire(false);
                    if (!result)
                    {
                        session.RollbackTrans();
                    }
                    else
                    {
                        result = session.CommitTrans();
                    }
                }
            }


            return(result);
        }
        private IDatabaseConnexionSynchronisable GetDbSynchronisable()
        {
            IDatabaseConnexionSynchronisable db = (IDatabaseConnexionSynchronisable)CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "") as IDatabaseConnexionSynchronisable;

            return(db);
        }
Exemple #8
0
        /// //////////////////////////////////////////////////
        ///Démarre une étape.
        ///Attention, un étape ne peut démarrer que si elle n'est pas déjà démarrée
        public void RunEtape(int nIdSessionMain, int nIdEtape)
        {
            CResultAErreur result  = CResultAErreur.True;
            CDbKey         keyUser = null;
            //Attend la fin des transactions en cours pour la session principale
            IDatabaseConnexion cnx = null;

            do
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession);
                if (session != null && session.IsConnected)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYTODO
                    if (info != null)
                    {
                        keyUser = info.KeyUtilisateur;
                    }
                    try
                    {
                        cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeof(CEtapeWorkflow));
                    }
                    catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                    {
                        cnx = null;
                    }
                    System.Threading.Thread.Sleep(50);
                }
                else
                {
                    cnx = null;
                }
            }while (cnx != null && cnx.IsInTrans());
            lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps !
            {
                List <CDonneeNotificationWorkflow> lstNotifications = new List <CDonneeNotificationWorkflow>();

                CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess();

                using (CSessionClient sousSession = CSessionClient.CreateInstance())
                {
                    try
                    {
                        Console.WriteLine("Thread : " + System.Diagnostics.Process.GetCurrentProcess().Threads.Count);
                        sousSession.OpenSession(auth, "Workflow step " + nIdEtape, ETypeApplicationCliente.Process);
                        //TESTDBKEYTODO
                        if (keyUser != null)
                        {
                            sousSession.ChangeUtilisateur(keyUser);
                        }
                        using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true))
                        {
                            CEtapeWorkflow etape   = new CEtapeWorkflow(ctx);
                            int            nWaiter = 10;
                            while (!etape.ReadIfExists(nIdEtape) && nWaiter > 0)
                            {
                                //On ne trouve pas l'étape, c'est peut être que l'écriture en base n'est pas completement terminée
                                //On va retenter toutes les 2 secondes pendant 20 secondes, si elle n'existe jamais,
                                //c'est qu'il y a eu suppression (ou au moins non commit).
                                nWaiter--;
                                Thread.Sleep(2000);
                            }
                            if (etape.ReadIfExists(nIdEtape))
                            {
                                result         = etape.InternalSetInfosDemarrageInCurrentContext();
                                etape.EtatCode = (int)EEtatEtapeWorkflow.Démarrée;
                                result         = ctx.SaveAll(true);
                                if (result)
                                {
                                    result = etape.InternalRunAndSaveifOk();
                                }
                                if (result && etape.CodeAffectations.Length > 0 && etape.DateFin == null)
                                {
                                    CDonneeNotificationWorkflow donneeWorkflow = new CDonneeNotificationWorkflow(
                                        nIdSessionMain,
                                        etape.Id,
                                        etape.Libelle,
                                        etape.CodeAffectations,
                                        etape.TypeEtape.ExecutionAutomatique);
                                    lstNotifications.Add(donneeWorkflow);
                                    // Déclenche l'evenement spécifique au démarrage de l'étape
                                    result = etape.EnregistreEvenement(CEtapeWorkflow.c_codeEvenementOnRunStep, true);
                                }
                                if (!result)
                                {
                                    NoteErreurSurEtape(etape, result.Erreur.ToString());
                                    return;
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    finally
                    {
                        sousSession.CloseSession();
                    }
                }
                if (lstNotifications != null)
                {
                    CEnvoyeurNotification.EnvoieNotifications(lstNotifications.ToArray());
                }
            }
        }
        /// ////////////////////////////////
        public CResultAErreur ExecuteRequete(C2iRequeteAvancee requete)
        {
            CResultAErreur result   = CResultAErreur.True;
            string         strTable = requete.TableInterrogee;
            //S'il y a un filtre sur la requête avancée,
            //On prépare d'abord la sous requête de sélection des ids qui nous
            //Interessent

            Type typeReference = CContexteDonnee.GetTypeForTable(strTable);

            if (typeReference == null)
            {
                result.EmpileErreur(I.T("Impossible to define the associated type with @1|121", strTable));
                return(result);
            }

            IDatabaseConnexion con;

            if (typeReference == null)
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");
            }
            else
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeReference);
            }


            CFiltreData filtre = requete.FiltreAAppliquer;
            CArbreTable arbre  = null;
            bool        bHasVersionSurTablePrincipale = false;
            Type        tpObjet = CContexteDonnee.GetTypeForTable(requete.TableInterrogee);

            if (tpObjet != null && !typeof(IObjetSansVersion).IsAssignableFrom(tpObjet) &&
                typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpObjet))
            {
                bHasVersionSurTablePrincipale = true;
            }
            if (bHasVersionSurTablePrincipale)
            {
                CFiltreDataAvance filtreVersion = new CFiltreDataAvance(strTable, "");
                //Lecture dans le référentiel
                if (requete.IdVersionDeTravail == null && (filtre == null || !filtre.IgnorerVersionDeContexte))
                {
                    filtreVersion.Filtre = "HasNo(" + CSc2iDataConst.c_champIdVersion + ")";
                }
                //Ignorer les suppressions
                if (filtre != null && !filtre.IntegrerLesElementsSupprimes)
                {
                    if (filtreVersion.Filtre != "")
                    {
                        filtreVersion.Filtre += " and ";
                    }
                    filtreVersion.Filtre += CSc2iDataConst.c_champIsDeleted + "=0";
                }


                //Lecture dans une version
                if (requete.IdVersionDeTravail != null && (filtre == null || !filtre.IgnorerVersionDeContexte) && requete.IdVersionDeTravail >= 0)
                {
                    if (filtre == null)
                    {
                        filtre = new CFiltreData();
                    }
                    filtre.IdsDeVersionsALire = CVersionDonnees.GetVersionsToRead(IdSession, (int)requete.IdVersionDeTravail);
                }

                if (filtreVersion.Filtre != "")
                {
                    filtre = CFiltreData.GetAndFiltre(filtre, filtreVersion);
                }
            }
            if (filtre != null && filtre is CFiltreDataAvance)
            {
                result = ((CFiltreDataAvance)filtre).GetArbreTables();
                if (!result)
                {
                    return(result);
                }
                arbre = (CArbreTable)result.Data;
            }

            result = requete.CalculeArbre(arbre);
            if (!result)
            {
                return(result);
            }
            arbre = (CArbreTable)result.Data;

            int nOldTimeOut = con.CommandTimeOut;

            con.CommandTimeOut = 60 * 2;
            result             = con.ExecuteRequeteComplexe(requete.Champs, arbre, filtre);
            con.CommandTimeOut = nOldTimeOut;
            return(result);
        }
Exemple #10
0
        public static CResultAErreur Init(
            string strEventJournalName,
            string strEventJournalTexte,
            IIndicateurProgression indicateurProgress)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                int nValeurIndicateur = 0;
                C2iEventLog.Init(strEventJournalName, strEventJournalTexte, NiveauBavardage.VraiPiplette);
                CConteneurIndicateurProgression indicateur = CConteneurIndicateurProgression.GetConteneur(indicateurProgress);
                if (indicateur != null)
                {
                    indicateur.PushSegment(0, 13);
                }


                CTraducteur.ReadFichier("");

                #region Configuration du remoting

                indicateur.SetValue(nValeurIndicateur++);

                AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

                C2iSponsor.EnableSecurite();
                #endregion

                #region Configuration de l'allocateur d'objets
                Dictionary <string, MarshalByRefObject> dicLocalSingleton = new Dictionary <string, MarshalByRefObject>();
                dicLocalSingleton["sc2i.multitiers.client.IGestionnaireSessions"] = new CGestionnaireSessionSagexProSolo();
                C2iFactory.InitEnLocal(new C2iObjetServeurFactory(), dicLocalSingleton);

                indicateur.SetValue(nValeurIndicateur++);

                CSessionClient session = CSessionClient.CreateInstance();
                result = session.OpenSession(new CAuthentificationSessionServer(), "SagexProSolo", ETypeApplicationCliente.Service);
                if (!result)
                {
                    result.EmpileErreur(I.T("Opening session error|30010"));
                    return(result);
                }


                CSc2iDataServer.AddDefinitionConnexion(
                    new CDefinitionConnexionDataSource(
                        c_droitsDataSource,
                        typeof(CGestionnaireDroitsUtilisateurs),
                        ""));

                CSc2iDataServer.SetIdConnexionForClasse(typeof(CDroitUtilisateurServeur), c_droitsDataSource);
                #endregion

                #region Configuration de la base de données
                indicateur.SetValue(nValeurIndicateur++);

                Type typeConnexion = typeof(CAccess97DatabaseConnexion);

                //Récuperation du type de connection

                CSc2iDataServer.Init(
                    new CDefinitionConnexionDataSource(
                        c_mainDataSource,
                        typeConnexion,
                        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Documents and Settings\\GENERIC\\Mes documents\\BASEVIDE2000.MDB\"",
                        ""));
                #endregion

                #region Ajout des références DLL
                indicateur.SetValue(nValeurIndicateur++);
                AppDomain.CurrentDomain.Load("sc2i.data.client");
                AppDomain.CurrentDomain.Load("sc2i.data.serveur");
                AppDomain.CurrentDomain.Load("sc2i.data.dynamic");
                AppDomain.CurrentDomain.Load("sc2i.data.dynamic.loader");
                AppDomain.CurrentDomain.Load("sc2i.process");
                AppDomain.CurrentDomain.Load("sc2i.process.serveur");
                AppDomain.CurrentDomain.Load("sc2i.expression");
                AppDomain.CurrentDomain.Load("sc2i.Formulaire");
                AppDomain.CurrentDomain.Load("futurocom.vectordb.data");
                AppDomain.CurrentDomain.Load("futurocom.vectordb.data.server");
                AppDomain.CurrentDomain.Load("futurocomapp.data");
                AppDomain.CurrentDomain.Load("futurocomapp.data.server");
                AppDomain.CurrentDomain.Load("sagexpro.data");
                AppDomain.CurrentDomain.Load("sagexpro.data.serveur");


                foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
                {
                    CContexteDonnee.AddAssembly(ass);
                }
                #endregion

                #region Teste la connexion
                indicateur.SetValue(nValeurIndicateur++);
                IDatabaseConnexion cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, c_mainDataSource);

                //Attend la connexion pendant au max 5 minutes pour que ça démarre
                DateTime dtStartAttente = DateTime.Now;
                TimeSpan delaiAttente   = DateTime.Now - dtStartAttente;
                result = cnx.IsConnexionValide();
                while (!result && delaiAttente.TotalSeconds < 5 * 60)
                {
                    C2iEventLog.WriteErreur(result.MessageErreur);
                    delaiAttente = DateTime.Now - dtStartAttente;
                    C2iEventLog.WriteErreur(I.T("Connection not availiable(@1)|30014", delaiAttente.TotalSeconds.ToString() + " s)") +
                                            Environment.NewLine);
                    string messageErreur = I.T("The connection with the database could not have been established. Verify the connection string and check if the database has been started|30015");
                    C2iEventLog.WriteErreur(messageErreur);

                    result.EmpileErreur(messageErreur);
                    return(result);
                }

                if (typeof(CSqlDatabaseConnexion).IsAssignableFrom(typeConnexion))
                {
                    cnx.RunStatement("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
                }

                #endregion


                //Initialisation des classes autoexecutables
                CAutoexecuteurClasses.RunAutoexecs();

                //Initialisation du serveur de documents GED
                //Initialise les restrictions standards

                #region Vérifie que les champs des tables font bien moins de 25 cars
                indicateur.SetValue(nValeurIndicateur++);

                DateTime dt = DateTime.Now;

                foreach (Type tp in CContexteDonnee.GetAllTypes())
                {
                    CStructureTable structure = CStructureTable.GetStructure(tp);
                    if (structure.NomTable.Length > 25)
                    {
                        result.EmpileErreur("Table " + structure.NomTable + " (" + tp.ToString() + ")=" + structure.NomTable.Length + "cars");
                    }
                    if (structure.NomTable.ToUpper() != structure.NomTable)
                    {
                        result.EmpileErreur(I.T("Table name @1 must be uppercase|30018", structure.NomTable));
                    }
                    foreach (CInfoChampTable champ in structure.Champs)
                    {
                        if (champ.NomChamp.Length > 25)
                        {
                            result.EmpileErreur("Table " + structure.NomTable + " (" + tp.ToString() + ")\t champ " + champ.NomChamp + "=" + champ.NomChamp.Length + "cars");
                        }
                        if (champ.NomChamp.ToUpper() != champ.NomChamp)
                        {
                            result.EmpileErreur(I.T("The name of the field '@1' of the field '@2' must be uppercase|30019", champ.NomChamp, structure.NomTable));
                        }
                    }
                }
                TimeSpan sp = DateTime.Now - dt;
                Console.WriteLine(I.T("Table name verification |30020") + sp.TotalMilliseconds);
                if (!result)
                {
                    return(result);
                }
                #endregion

                #region Mise à jour de la structure de la base
                indicateur.SetValue(nValeurIndicateur++);

                CUpdaterDataBase updaterDataBase = CUpdaterDataBase.GetInstance(cnx, new CSagexproStructureBase());

                //S'assure que la gestion des éléments est initialisé dans les licences
                //CLicenceCheckElementNb.GetInstance();

                result = updaterDataBase.UpdateStructureBase(indicateur);
                if (!result)
                {
                    return(result);
                }


                #endregion


                //Restrictions sur applications


                //Initialisation du serveur de documents GED

                //Initialisation de la base d'utilisateurs AD
                //CAdBase.Init(CfuturocomappServeurRegistre.RacineAd,"","");

                //Initialise les fournisseurs de services
                //CSessionClientSurServeur.RegisterFournisseur( new CFournisseurFiltresForSynchronisation() );

                CGestionnaireEvenements.Init();



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

                //CGestionnaireObjetsAttachesASession.OnAttacheObjet += new LinkObjectEventHandler(CGestionnaireObjetsAttachesASession_OnAttacheObjet);
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }
        /// ////////////////////////////////
        public CResultAErreur ExecuteRequete(C2iRequete requete, IElementAVariablesDynamiquesAvecContexteDonnee elementAVariables, bool bStructureOnly)
        {
            CResultAErreur result        = CResultAErreur.True;
            Type           typeReference = requete.TypeReferencePourConnexion;

            if (typeReference != null)
            {
                ///TODO
                ///Problème VersionObjet
                object objServeur = CContexteDonnee.GetTableLoader(CContexteDonnee.GetNomTableForType(typeReference), null, IdSession);
                if (objServeur != null)
                {
                    typeReference = objServeur.GetType();
                }
                else
                {
                    typeReference = null;
                }
            }

            IDatabaseConnexion con;

            if (typeReference == null)
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");
            }
            else
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeReference);
            }


            object[] lstParams   = null;
            string   strRequete  = GetTexteRequeteFinaleSql(requete, elementAVariables, ref lstParams, con);
            int      nOldTimeOut = con.CommandTimeOut;

            con.CommandTimeOut = 60 * 10;

            IDataAdapter adapter = con.GetAdapterForRequete(strRequete, lstParams);
            DataSet      ds      = new DataSet();

            try
            {
                lock (con)
                {
                    if (bStructureOnly)
                    {
                        adapter.FillSchema(ds, SchemaType.Source);
                    }
                    else
                    {
                        adapter.Fill(ds);
                    }
                }
                if (ds.Tables.Count > 0)
                {
                    DataTable table = ds.Tables[0];
                    if (requete.TableauCroise != null)
                    {
                        result = requete.TableauCroise.CreateTableCroisee(table);
                        if (result)
                        {
                            table = (DataTable)result.Data;
                        }
                    }

                    table.TableName = "DONNEES_REQUETE";
                    result.Data     = table;
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                result.EmpileErreur(I.T("Error in the request '@1'|102", strRequete));
            }
            finally
            {
                con.CommandTimeOut = nOldTimeOut;
                CUtilDataAdapter.DisposeAdapter(adapter);
            }
            return(result);
        }
Exemple #12
0
        public CResultAErreur ExecuteScalar(string strStatement)
        {
            IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeof(CSpvSiteServeur));

            return(connexion.ExecuteScalar(strStatement));
        }
Exemple #13
0
        public static void Demasque()
        {
            int c_nAttente     = 500;                   // 500 ms d'attente dans la boucle
            int nNbToursBoucle = 1800000 / c_nAttente;  // Nb de tours de boucle pour 1/2h d'attente

            Thread.Sleep(50000);

            CSessionClient session = CSessionClient.CreateInstance();

            session.OpenSession(new CAuthentificationSessionServer(), "Unmask alarms", ETypeApplicationCliente.Service);


            IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, CSpvServeur.c_spvConnection);
            string             stSQL     = "Begin MaskModified; end;";
            CResultAErreur     result;
            int nErreur1 = 0, nErreur2 = 0;

            while (true)
            {
                // Démasquage
                result = CResultAErreur.True;
                try
                {
                    // Démasquage
                    result += connexion.BeginTrans();
                    if (result)
                    {
                        result += connexion.ExecuteScalar(stSQL);
                    }

                    if (result)
                    {
                        result += connexion.CommitTrans();
                    }
                    else
                    {
                        connexion.RollbackTrans();
                    }
                }
                catch (Exception e)
                {
                    result.EmpileErreur(e.Message);
                }

                if (!result)
                {
                    if (nErreur1 == 0)
                    {
                        C2iEventLog.WriteErreur(I.T("Problem with unmasking alarms automatically|50000"));
                        nErreur1++;
                    }
                }

                // Pour ne pas trop encombrer les événements windows
                if (nErreur1 > 0)
                {
                    nErreur1++;
                }
                else if (nErreur1 > nNbToursBoucle) // Equipvaut à 1/2 heure
                {
                    nErreur1 = 0;
                }

                // Démasquage alarmes filles (traitement déconnecté du précédent)
                try
                {
                    result = connexion.BeginTrans();
                    if (result)
                    {
                        result += connexion.ExecuteScalar("DELETE " + CSpvFinalarm.c_nomTableInDb);
                    }

                    if (result)
                    {
                        result += connexion.CommitTrans();
                    }
                    else
                    {
                        connexion.RollbackTrans();
                    }
                }
                catch (Exception e)
                {
                    result.EmpileErreur(e.Message);
                }

                if (!result)
                {
                    if (nErreur2 == 0)
                    {
                        C2iEventLog.WriteErreur(I.T("Problem with unmasking child alarms automatically|50001"));
                        nErreur2++;
                    }
                }

                // Pour ne pas trop encombrer les événements windows
                if (nErreur2 > 0)
                {
                    nErreur2++;
                }
                else if (nErreur2 > nNbToursBoucle) // Equipvaut à 1/2 heure
                {
                    nErreur2 = 0;
                }

                if (C2iStopApp.AppStopper.WaitOne(c_nAttente, false))
                {
                    break;
                }
            }
        }
        public static void MonitorAlarmes()
        {
            int nCptWatchDogAlSyst = 0;

            Thread.Sleep(50000);
            CSessionClient session = CSessionClient.CreateInstance();

            session.OpenSession(new CAuthentificationSessionServer());

            while (true)
            {
                //Thread.Sleep(200);    // inhibition pour faciliter debug des autres objets
                //continue;
                nCptWatchDogAlSyst++;
                using (CContexteDonnee ctx = new CContexteDonnee(session.IdSession, true, true))
                {
                    CListeObjetsDonnees lst = new CListeObjetsDonnees(ctx, typeof(CSpvMessalrm));
                    if (lst.Count > 0)
                    {
                        List <CEvenementAlarm> lstAlarm = new List <CEvenementAlarm>();

                        StringBuilder bl = new StringBuilder();
                        foreach (CSpvMessalrm message in lst)
                        {
                            try
                            {
                                CEvenementAlarm eventAlarm = message.GetNewEvenementAlarm();
                                if (eventAlarm != null)
                                {
                                    lstAlarm.Add(eventAlarm);
                                }
                            }
                            catch (Exception e)
                            {
                                C2iEventLog.WriteErreur(e.Message);
                            }

                            bl.Append(message.Id);

                            bl.Append(',');
                        }
                        bl.Remove(bl.Length - 1, 1);

                        if (lstAlarm.Count > 0)
                        {
                            CDonneeNotificationAlarmes notif = new CDonneeNotificationAlarmes(session.IdSession, lstAlarm);
                            CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { notif });
                        }

                        SendMailsDelegate sndMail = new SendMailsDelegate(SendMails);
                        sndMail.BeginInvoke(lstAlarm, ctx, null, null);

                        IDatabaseConnexion connexion = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, CSpvServeur.c_spvConnection);
                        connexion.RunStatement("Delete from " + CSpvMessalrm.c_nomTableInDb + " where " +
                                               CSpvMessalrm.c_champMESSALRM_ID + " in (" + bl.ToString() + ")");

                        /* TimeSpan sp = DateTime.Now - dt;
                         * double fTime = sp.TotalMilliseconds;*/
                    }//if (lst.Count > 0)

                    if (nCptWatchDogAlSyst >= 200)  // vérification toutes les 20 secondes
                    {
                        nCptWatchDogAlSyst = 0;
                        IDatabaseConnexion cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(session.IdSession, CSpvServeur.c_spvConnection);
                        cnx.RunStatement("begin WatchDog; end;");
                    }
                }

                if (C2iStopApp.AppStopper.WaitOne(100, false))
                {
                    break;
                }
            }
        }
        //------------------------------------------------------------
        public CResultAErreur PurgeEntites(
            Type typeObjets,
            int[] nIdsElementsTotal,
            CDonneeNotificationModificationContexteDonnee dataModifs)
        {
            CResultAErreur result = TestTypePurgeable(typeObjets);

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


            //travaille par paquets de 100;
            for (int nPaquet = 0; nPaquet < nIdsElementsTotal.Length; nPaquet += 100)
            {
                List <int> lstTmp = new List <int>();
                int        nMin   = Math.Min(nPaquet + 100, nIdsElementsTotal.Length);
                for (int n = nPaquet; n < nMin; n++)
                {
                    lstTmp.Add(nIdsElementsTotal[n]);
                }
                int[] nIdsElements = lstTmp.ToArray();
                if (nIdsElements.Count() == 0)
                {
                    return(result);
                }

                string strNomTable = CContexteDonnee.GetNomTableForType(typeObjets);
                if (strNomTable == null)
                {
                    result.EmpileErreur(I.T("Can not find table for type '@1'|20011"),
                                        DynamicClassAttribute.GetNomConvivial(typeObjets));
                    return(result);
                }


                CStructureTable structure = CStructureTable.GetStructure(typeObjets);
                StringBuilder   blIds     = new StringBuilder();
                foreach (int nId in nIdsElements)
                {
                    blIds.Append(nId);
                    blIds.Append(',');
                }
                if (blIds.Length == 0)
                {
                    return(result);
                }
                blIds.Remove(blIds.Length - 1, 1);

                //Si autoref, va tout chercher d'un coup
                if (typeof(IObjetDonneeAutoReference).IsAssignableFrom(typeObjets))
                {
                    HashSet <int> setIds = new HashSet <int>();
                    foreach (int nId in nIdsElements)
                    {
                        setIds.Add(nId);
                    }
                    //Va cherche toutes les dépendances
                    int nNbLast = setIds.Count();
                    while (true)
                    {
                        foreach (CInfoRelation rel in CContexteDonnee.GetListeRelationsTable(strNomTable))
                        {
                            if (rel.TableFille == rel.TableParente)
                            {
                                int[]       idsFilles = null;
                                CFiltreData filtre    = new CFiltreData(rel.ChampsFille[0] + " in (" + blIds.ToString() + ")");
                                result = GetIdsFilles(
                                    typeObjets,
                                    filtre,
                                    out idsFilles);
                                if (!result)
                                {
                                    return(result);
                                }
                                foreach (int nId in idsFilles)
                                {
                                    setIds.Add(nId);
                                }
                            }
                        }
                        nIdsElements = setIds.ToArray();
                        if (nNbLast == setIds.Count)
                        {
                            break;
                        }
                        blIds = new StringBuilder();
                        foreach (int nId in setIds)
                        {
                            blIds.Append(nId);
                            blIds.Append(',');
                        }
                        blIds.Remove(blIds.Length - 1, 1);
                        nNbLast = setIds.Count;
                    }
                }


                //Suppression des relations filles
                foreach (CInfoRelation info in CContexteDonnee.GetListeRelationsTable(strNomTable))
                {
                    if (info.TableParente == strNomTable && info.TableFille != strNomTable)
                    {
                        Type        typeFils   = CContexteDonnee.GetTypeForTable(info.TableFille);
                        int[]       lstIdsFils = null;
                        CFiltreData filtre     = new CFiltreData(
                            info.ChampsFille[0] + " in (" + blIds.ToString() + ")");
                        result = GetIdsFilles(typeFils,
                                              filtre,
                                              out lstIdsFils);
                        if (!result)
                        {
                            return(result);
                        }
                        if (lstIdsFils.Count() > 0)
                        {
                            result = PurgeEntites(typeFils, lstIdsFils, dataModifs);
                        }
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
                //Suppression des relations TypeId
                if (typeObjets.GetCustomAttributes(typeof(NoRelationTypeIdAttribute), true).Length == 0)
                {
                    foreach (RelationTypeIdAttribute rel in CContexteDonnee.RelationsTypeIds)
                    {
                        if (rel.IsAppliqueToType(typeObjets))
                        {
                            Type typeFils = CContexteDonnee.GetTypeForTable(rel.TableFille);
                            result = TestTypePurgeable(typeFils);
                            if (!result)
                            {
                                return(result);
                            }
                            CFiltreData filtre = new CFiltreData(
                                rel.ChampId + " in (" + blIds + ") and " +
                                rel.ChampType + "=@1",
                                typeObjets.ToString());
                            int[] lstIdsFils = null;
                            result = GetIdsFilles(
                                typeFils,
                                filtre,
                                out lstIdsFils);
                            if (!result)
                            {
                                return(result);
                            }
                            if (lstIdsFils.Count() > 0)
                            {
                                result = PurgeEntites(typeFils, lstIdsFils, dataModifs);
                            }
                            if (!result)
                            {
                                return(result);
                            }
                        }
                    }
                }

                //Suppression des valeurs de champs
                if (m_listeTypesValeursChamps == null)
                {
                    m_listeTypesValeursChamps = new List <Type>();
                    foreach (Type tp in CContexteDonnee.GetAllTypes())
                    {
                        if (typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
                        {
                            m_listeTypesValeursChamps.Add(tp);
                        }
                    }
                }
                foreach (Type tp in m_listeTypesValeursChamps)
                {
                    CFiltreData filtre = new CFiltreData(
                        CRelationElementAChamp_ChampCustom.c_champValeurInt + " in (" +
                        blIds.ToString() + ") and " +
                        CRelationElementAChamp_ChampCustom.c_champValeurString + "=@1",
                        typeObjets.ToString());
                    int[] idsFils = null;
                    result = GetIdsFilles(tp, filtre, out idsFils);
                    if (!result)
                    {
                        return(result);
                    }
                    if (idsFils.Length > 0)
                    {
                        result = PurgeEntites(tp, idsFils, dataModifs);
                    }
                    if (!result)
                    {
                        return(result);
                    }
                }



                //Prépare les notifications
                foreach (int nId in nIdsElements)
                {
                    dataModifs.AddModifiedRecord(strNomTable,
                                                 true,
                                                 new object[] { nId });
                }

                //supprime les éléments
                //Et c'est parti pour la requete de suppression
                IDatabaseConnexion con;
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeObjets);
                string strWhere = structure.ChampsId[0].NomChamp + " in (" + blIds + ")";
                strWhere = COracleDatabaseConnexion.PasseLaLimiteDesMilleIn(strWhere);
                string strNomTableInDb = CContexteDonnee.GetNomTableInDbForNomTable(strNomTable);
                result = con.ExecuteScalar("delete from " + strNomTableInDb + " where " + strWhere);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
        public override CResultAErreur SaveAll(CContexteSauvegardeObjetsDonnees contexteSauvegarde, System.Data.DataRowState etatsAPrendreEnCompte)
        {
            ArrayList listeFichiersToDelete        = null;
            ArrayList listeFichiersToValide        = null;
            ArrayList listeFichiersANePasSupprimer = null;

            GetListesPourValidation(ref listeFichiersToDelete,
                                    ref listeFichiersToValide,
                                    ref listeFichiersANePasSupprimer);

            CResultAErreur result = CResultAErreur.True;

            m_commitEventHandlerNote = new OnCommitTransEventHandler(OnCommitTrans);
            DataTable table = contexteSauvegarde.ContexteDonnee.Tables[GetNomTable()];

            if (table != null)
            {
                foreach (DataRow row in table.Rows)
                {
                    if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added)
                    {
                        if (!CDocumentGED.IsControleDocumentsALaSauvegardeDesactive(contexteSauvegarde.ContexteDonnee))
                        //si désactivation des ids auto, on est dans un processus
                        //de synchronisation, donc , pas de contrôle de document
                        {
                            CDocumentGED       doc          = new CDocumentGED(row);
                            CReferenceDocument newReference = doc.ReferenceDoc;
                            bool bRefAsChange = true;
                            if (row.RowState == DataRowState.Modified)
                            {
                                doc.VersionToReturn = DataRowVersion.Original;
                                CReferenceDocument oldRef = doc.ReferenceDoc;
                                bRefAsChange = false;
                                if ((newReference == null) != (oldRef == null))
                                {
                                    bRefAsChange = true;
                                }
                                if (oldRef != null && !oldRef.Equals(newReference))
                                {
                                    listeFichiersToDelete.Add(oldRef);
                                    bRefAsChange = true;
                                }
                                doc.VersionToReturn = DataRowVersion.Current;
                            }
                            if (bRefAsChange)
                            {
                                result = PreValideDocument(newReference);
                            }
                            if (!result)
                            {
                                return(result);
                            }
                            if (bRefAsChange)
                            {
                                listeFichiersToValide.Add(doc.ReferenceDoc);
                            }
                            listeFichiersANePasSupprimer.Add(doc.ReferenceDoc);
                            listeFichiersToDelete.Remove(doc.ReferenceDoc);//Il ne faut pas le supprimer !
                        }
                    }
                    if (row.RowState == DataRowState.Deleted)
                    {
                        CDocumentGED doc = new CDocumentGED(row);
                        doc.VersionToReturn = DataRowVersion.Original;
                        string strRefString = doc.ReferenceString;
                        if (!listeFichiersToValide.Contains(doc.ReferenceDoc) &&
                            !listeFichiersANePasSupprimer.Contains(doc.ReferenceDoc))
                        {
                            listeFichiersToDelete.Add(doc.ReferenceDoc);
                        }
                        doc.VersionToReturn = DataRowVersion.Current;
                    }
                }
            }
            IDatabaseConnexion con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, GetType());

            if (con != null)
            {
                con.OnCommitTrans += m_commitEventHandlerNote;
            }
            result = base.SaveAll(contexteSauvegarde, etatsAPrendreEnCompte);
            return(result);
        }
        ///////////////////////////////////////////////////////////////
        public CResultAErreur Compile(int nIdMibModule)
        {
            CResultAErreur result = CResultAErreur.True;

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CSpvMibmodule mibModule = new CSpvMibmodule(contexte);
                if (!mibModule.ReadIfExists(nIdMibModule))
                {
                    result.EmpileErreur(I.T("Mib module @1 doesn't exists|20000", nIdMibModule.ToString()));
                    return(result);
                }
                CDocumentGED doc = mibModule.DocumentGEDModuleMib;
                if (doc == null)
                {
                    result.EmpileErreur(I.T("Mib module @1 should be associated to a mib file|20001", mibModule.NomModuleOfficiel));
                    return(result);
                }
                using (CProxyGED proxy = new CProxyGED(m_nIdSession, doc.ReferenceDoc))
                {
                    result = proxy.CopieFichierEnLocal();
                    if (!result)
                    {
                        return(result);
                    }

                    CMibModuleWrapper  mibModuleWrapper = new CMibModuleWrapper();
                    IDatabaseConnexion connexion        = CSc2iDataServer.GetInstance().GetDatabaseConnexion(m_nIdSession, GetType());
                    string             strConnexion     = connexion.ConnexionString;
                    string             strDatabase      = "";
                    string             strUser          = "";
                    string             strPassword      = "";
                    string[]           strRubriques     = strConnexion.Split(';');
                    foreach (string strRubrique in strRubriques)
                    {
                        string[] strData = strRubrique.Split('=');
                        if (strData.Length == 2)
                        {
                            string strCle = strData[0].ToUpper().Trim();
                            if (strCle == "DATA SOURCE")
                            {
                                strDatabase = strData[1].Trim();
                            }
                            if (strCle == "USER ID")
                            {
                                strUser = strData[1].Trim();
                            }
                            if (strCle == "PASSWORD")
                            {
                                strPassword = strData[1].Trim();
                            }
                        }
                    }
                    if (strDatabase == "" || strUser == "" || strPassword == "")
                    {
                        result.EmpileErreur(I.T("Can not parse connexion string|20002"));
                        return(result);
                    }

                    string strConnexionOracle = strUser + "/" + strPassword + "@" + strDatabase;
                    mibModuleWrapper.Init(strConnexionOracle, proxy.NomFichierLocal,
                                          mibModule.NomModuleUtilisateur, Convert.ToInt32(mibModule.Id));

                    int nResult = mibModuleWrapper.Compile();
                    if (nResult < 0)
                    {
                        result.EmpileErreur(I.T("Failed to compile mib module @1|20003", mibModule.NomModuleOfficiel));
                        string strMess;
                        while ((strMess = mibModuleWrapper.GetNextErrMess()) != "")
                        {
                            result.EmpileErreur(strMess);
                        }

                        if (mibModuleWrapper.AreCompileErrors())
                        {
                            result.EmpileErreur(mibModuleWrapper.GetCompileErrors());
                        }

                        if (mibModuleWrapper.AreCompileLogs())
                        {
                            result.EmpileErreur(mibModuleWrapper.GetCompileLogs());
                        }

                        return(result);
                    }
                    else
                    {
                        List <IDonneeNotification> notifs = new List <IDonneeNotification>();
                        notifs.Add(new CDonneeNotificationAjoutEnregistrement(m_nIdSession, CSpvMibmodule.c_nomTable));
                        notifs.Add(new CDonneeNotificationAjoutEnregistrement(m_nIdSession, CSpvMibobj.c_nomTable));
                        CEnvoyeurNotification.EnvoieNotifications(notifs.ToArray());
                    }
                }
            }
            return(result);
        }
Exemple #18
0
        //----------------------------------------------------------------------------------------------------
        public IDonneeSynchronisationMediation GetUpdatesForProxy(int nIdProxy, int nIdLastSyncSession)
        {
            using (CSessionClient session = CSessionClient.CreateInstance())
            {
                CResultAErreur result = session.OpenSession(new CAuthentificationSessionProcess());
                if (!result)
                {
                    return(null);
                }
                using (CContexteDonneesSynchro ctx = new CContexteDonneesSynchro(session.IdSession, true))
                {
                    CSc2iDataServer connexionManager = CSc2iDataServer.GetInstance();

                    IDatabaseConnexionSynchronisable cnxSync = connexionManager.GetDatabaseConnexion(session.IdSession, typeof(CTypeAgentSnmpServeur)) as IDatabaseConnexionSynchronisable;
                    if (cnxSync == null)
                    {
                        return(null);
                    }
                    cnxSync.IncrementeSyncSession();
                    int nIdSyncMax = cnxSync.IdSyncSession - 1;

                    CFiltresSynchronisation filtres = new CFiltresSynchronisation();
                    filtres.AddFiltreForTable(CTypeAlarme.c_nomTable, null, false);
                    filtres.AddFiltreForTable(CSeveriteAlarme.c_nomTable, null, false);
                    filtres.AddFiltreForTable(CTypeAgentSnmp.c_nomTable, null, false);
                    filtres.AddFiltreForTable(CAgentSnmp.c_nomTable,
                                              new CFiltreData(CSnmpProxyInDb.c_champId + "=@1",
                                                              nIdProxy)
                                              , false);
                    filtres.AddFiltreForTable(CTypeEntiteSnmp.c_nomTable, null, false);
                    filtres.AddFiltreForTable(CEntiteSnmp.c_nomTable, new CFiltreDataAvance(
                                                  CEntiteSnmp.c_nomTable,
                                                  CAgentSnmp.c_nomTable + "." +
                                                  CSnmpProxyInDb.c_champId + "=@1",
                                                  nIdProxy), false);
                    filtres.AddFiltreForTable(CRelationTypeEntiteSnmp_ChampCustom.c_nomTable, null, false);
                    filtres.AddFiltreForTable(CRelationEntiteSnmp_ChampCustom.c_nomTable,
                                              new CFiltreDataAvance(CRelationEntiteSnmp_ChampCustom.c_nomTable,
                                                                    CEntiteSnmp.c_nomTable + "." +
                                                                    CAgentSnmp.c_nomTable + "." +
                                                                    CSnmpProxyInDb.c_champId + "=@1",
                                                                    nIdProxy), false);
                    // Prend uniquement les Filtrages d'alarme compris entre les dates de validité et marqués Enabled
                    filtres.AddFiltreForTable(CParametrageFiltrageAlarmes.c_nomTable,
                                              new CFiltreData(
                                                  CParametrageFiltrageAlarmes.c_champIsActif + " = @1 AND " +
                                                  CParametrageFiltrageAlarmes.c_champDateDebutValidite + " <= @2 AND " +
                                                  CParametrageFiltrageAlarmes.c_champDateFinValidite + " > @2",
                                                  true,
                                                  DateTime.Now.Date), false);
                    filtres.AddFiltreForTable(CCategorieMasquageAlarme.c_nomTable, null, false);
                    DateTime dt = DateTime.Now;
                    // Créer le MemoryDB
                    bool bHasData = false;
                    result = ctx.FillWithModifsFromVersion(nIdLastSyncSession, nIdSyncMax, ref bHasData, filtres, true);
                    if (!result)
                    {
                        return(null);
                    }
                    TimeSpan sp = DateTime.Now - dt;
                    Console.WriteLine("Lecture modifs médiation : " + sp.TotalMilliseconds);
                    dt = DateTime.Now;
                    CDonneesSynchronisationMediation donneesSynchro = new CDonneesSynchronisationMediation(
                        CMemoryDbPourSupervision.GetMemoryDb(ctx), nIdSyncMax);


                    CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(ctx, typeof(CSeveriteAlarme));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CSeveriteAlarme severite in lstObjets)
                    {
                        severite.GetTypeForSupervision(donneesSynchro.Database);
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CTypeAlarme));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CTypeAlarme type in lstObjets)
                    {
                        type.GetTypeForSupervision(donneesSynchro.Database, true);
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CTypeAgentSnmp));
                    lstObjets.InterditLectureInDB = true;
                    lstObjets.ReadDependances("TypesEntites");
                    foreach (CTypeAgentSnmp type in lstObjets)
                    {
                        type.GetTypeAgentPourSupervision(donneesSynchro.Database);
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CAgentSnmp));
                    lstObjets.InterditLectureInDB = true;
                    lstObjets.ReadDependances("EntitesSnmp", "EntitesSnmp.RelationsChampsCustom",
                                              "EntitesSnmp.SiteSupervise",
                                              "EntitesSnmp.EquipementLogiqueSupervise",
                                              "EntitesSnmp.EquipementLogiqueSupervise.Site",
                                              "EntitesSnmp.LienReseauSupervise");
                    foreach (CAgentSnmp agent in lstObjets)
                    {
                        agent.GetAgentPourSupervision(donneesSynchro.Database, true);
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CParametrageFiltrageAlarmes));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CParametrageFiltrageAlarmes parametreFiltre in lstObjets)
                    {
                        parametreFiltre.GetLocalParametrageForSupervision(donneesSynchro.Database);
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CCategorieMasquageAlarme));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CCategorieMasquageAlarme categorie in lstObjets)
                    {
                        categorie.GetLocalCategorieForSupervision(donneesSynchro.Database);
                    }

                    //S'assure que les entités des valeurs de champ entité sont chargés
                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CRelationEntiteSnmp_ChampCustom));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CRelationEntiteSnmp_ChampCustom rel in lstObjets)
                    {
                        if (rel != null && rel.ElementAChamps != null)
                        {
                            ((CObjetDonnee)rel.ElementAChamps).AssureData();
                        }
                    }

                    lstObjets = new CListeObjetsDonnees(ctx, typeof(CEntiteSnmp));
                    lstObjets.InterditLectureInDB = true;
                    foreach (CEntiteSnmp entite in lstObjets)
                    {
                        CTypeEntiteSnmp typeEntite = entite.TypeEntiteSnmp;
                        futurocom.snmp.entitesnmp.CTypeEntiteSnmpPourSupervision te = typeEntite.GetTypeEntitePourSupervision(donneesSynchro.Database, true);
                        entite.GetEntitePourSupervision(te);
                    }

                    sp = DateTime.Now - dt;
                    Console.WriteLine("Intégration modifs médiation : " + sp.TotalMilliseconds);
                    return(donneesSynchro);
                }
            }
        }
Exemple #19
0
        /// //////////////////////////////////////////////////
        ///Lance le calcul
        public static void DoCalc(CElementsProjetARecalculer lstElements)
        {
            CResultAErreur result  = CResultAErreur.True;
            CDbKey         keyUser = null;
            //Attend la fin des transactions en cours pour la session principale
            IDatabaseConnexion cnx = null;

            do
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(lstElements.IdSession);
                if (session != null && session.IsConnected)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYOK
                    if (info != null)
                    {
                        keyUser = info.KeyUtilisateur;
                    }
                    try
                    {
                        cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(lstElements.IdSession, typeof(CProjet));
                    }
                    catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                    {
                        cnx = null;
                    }
                    System.Threading.Thread.Sleep(50);
                }
                else
                {
                    cnx = null;
                }
            }while (cnx != null && cnx.IsInTrans());
            lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps !
            {
                CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess();

                using (CSessionClient sousSession = CSessionClient.CreateInstance())
                {
                    try
                    {
                        sousSession.OpenSession(auth, "Projet asynchronous calc ", ETypeApplicationCliente.Process);
                        if (keyUser != null)
                        {
                            sousSession.ChangeUtilisateur(keyUser);
                        }
                        using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true))
                        {
                            SetModeCalculProjet(ctx);
                            foreach (int nIdProjet in lstElements.IdsProjets)
                            {
                                CProjet projet = new CProjet(ctx);
                                if (projet.ReadIfExists(nIdProjet))
                                {
                                    projet.RecalculateDates(false);
                                }
                            }
                            foreach (int nIdMetaProjet in lstElements.IdsMetaProjets)
                            {
                                CMetaProjet meta = new CMetaProjet(ctx);
                                if (meta.ReadIfExists(nIdMetaProjet))
                                {
                                    meta.UpdateDateDebutPlanifieeFromChilds(false);
                                    meta.UpdateDateFinPlanifieeFromChilds(false);
                                    meta.UpdateDateDebutReelleFromChilds(false);
                                    meta.UpdateDateFinReelleFromChilds(false);
                                    meta.CalcProgress(false);
                                }
                            }

                            result = ctx.SaveAll(false);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    finally
                    {
                        sousSession.CloseSession();
                    }
                }
            }
        }