Example #1
0
        //----------------------------------------------------
        private CResultAErreur AssureSessionEtContexte()
        {
            CResultAErreur resErreur = CResultAErreur.True;

            System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
            if (m_sessionClient == null || !m_sessionClient.IsConnected)
            {
                m_sessionClient = CSessionClient.CreateInstance();
                resErreur       = m_sessionClient.OpenSession(new CAuthentificationSessionServer(),
                                                              I.T("Alarm management|20154"),
                                                              ETypeApplicationCliente.Service);
                if (!resErreur)
                {
                    resErreur.EmpileErreur(resErreur.Erreur);
                    C2iEventLog.WriteErreur(I.T("Error while open alarm management session|20155"));
                    resErreur.EmpileErreur(I.T("Error while open alarm management session|20155"));
                    return(resErreur);
                }
            }

            if (m_contexteDonnee == null)
            {
                m_contexteDonnee = new CContexteDonnee(m_sessionClient.IdSession, true, true);
                CListeObjetsDonnees lst = new CListeObjetsDonnees(m_contexteDonnee, typeof(CTypeAlarme));
                lst.AssureLectureFaite();
                lst.ReadDependances("RelationsChampsCustomListe");
                lst = new CListeObjetsDonnees(m_contexteDonnee, typeof(CSeveriteAlarme));
                lst.AssureLectureFaite();
            }

            return(resErreur);
        }
        /// //////////////////////////////////////////////////////////////////////////
        protected void EnvoieNotificationsThread(IDonneeNotification[] donnees, TypeGestionSessionEnvoyeur typeGestion)
        {
            foreach (CSessionClientSurServeur session in CGestionnaireSessions.ListeSessionsServeur)
            {
                try
                {
                    EnvoieNotificationsToSessionCallBack sender = new EnvoieNotificationsToSessionCallBack(EnvoieNotificationToSessionThread);
                    sender.BeginInvoke(session.SessionClient, donnees, null, null);
                }
                catch
                {
                    C2iEventLog.WriteErreur(I.T("Sending notifiations to session @1 error|104", session.IdSession.ToString()));
                }
            }

            //Transfert de la notification aux serveurs annexes
            foreach (string strURI in m_tableServeursAnnexes.Keys)
            {
                if (strURI != "")
                {
                    try
                    {
                        IGestionnaireNotification gestionnaireAnnexe = (IGestionnaireNotification)Activator.GetObject(typeof(IGestionnaireNotification), strURI + "/IGestionnaireNotification");
                        gestionnaireAnnexe.RelaieNotifications(donnees);
                    }
                    catch (Exception e)
                    {
                        C2iEventLog.WriteErreur(I.T("Secondary server error @1\r\n@2|103", strURI, e.ToString()));
                    }
                }
            }
        }
Example #3
0
        //-----------------------------------------------------------------------------------------
        /// <summary>
        ///
        /// </summary>
        /// <param name="strQowisioId"></param>
        /// <param name="contexte"></param>
        /// <returns></returns>
        public static CResultAErreur GetEquipementLogiqueFromQowisioId(string strQowisioId, CContexteDonnee contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CFiltreData filtre = new CFiltreDataAvance(
                CEquipementLogique.c_nomTable,
                CRelationEquipementLogique_ChampCustom.c_nomTable + "." +
                CChampCustom.c_nomTable + "." + CChampCustom.c_champId + " = @1 AND " +
                CRelationEquipementLogique_ChampCustom.c_nomTable + "." +
                CRelationEquipementLogique_ChampCustom.c_champValeurString + " = @2",
                c_nIdChampTimosQowisioId,
                strQowisioId);

            try
            {
                CEquipementLogique equipementLogiqueQowisio = new CEquipementLogique(contexte);
                if (equipementLogiqueQowisio.ReadIfExists(filtre))
                {
                    result.Data = equipementLogiqueQowisio;
                    return(result);
                }
            }
            catch (Exception e)
            {
                C2iEventLog.WriteErreur("Error in GetEquipementLogiqueFromQowisioId : " + e.Message);
                result.EmpileErreur(e.Message);
                return(result);
            }

            return(result);
        }
Example #4
0
        /////////////////////////////////////////////////////////////////////////////////
        public override CResultAErreur Delete(bool bDansContexteCourant)
        {
            CResultAErreur result = CResultAErreur.True;

            result.EmpileErreur(I.T("Cannot delete an application right|129"));
            C2iEventLog.WriteErreur(I.T("Attempt to delete a right from the database|130"));
            return(result);
        }
Example #5
0
        protected override void OnStart(string[] args)
        {
            CTimosServeur.ArretServeur += new EventHandler(CTimosServeur_ArretServeur);
            CResultAErreur result = CTimosServeur.GetInstance().InitServeur(AppDomain.CurrentDomain.BaseDirectory + "\\timos.remoting.config", null);

            if (!result)
            {
                C2iEventLog.WriteErreur(result.Erreur.ToString());
                throw new Exception("Erreur while starting the service " + result.Erreur.ToString());
            }
        }
Example #6
0
 //--------------------------------------------------------------
 private void DeleteListenersEnErreur()
 {
     lock (typeof(CLockerListeListeners))
     {
         C2iEventLog.WriteErreur("Error on trace system. Cleaning up");
         DeleteListenersEnErreur(m_listeListeners);
         foreach (KeyValuePair <string, List <IFuturocomTraceListener> > kv in m_dicCategorieToListener)
         {
             DeleteListenersEnErreur(kv.Value);
         }
     }
 }
Example #7
0
        //------------------------------------------------------------------------
        private void LoopEtapes()
        {
            //C2iEventLog.WriteInfo("DEBUG_TODO - LoopEtapes() - m_bLoopEtapesEnCours = " + m_bLoopEtapesEnCours);
            if (m_bLoopEtapesEnCours)
            {
                return;
            }

            int nNbEtapes = 0;

            LoadEtapesDepuisBase();
            lock (typeof(CLockerEtapes))
            {
                m_bLoopEtapesEnCours = true;
                m_timerLooper.Stop();
                //C2iEventLog.WriteInfo("DEBUG_TODO - LoopEtapes() - m_timerLooper.Stop()");
                nNbEtapes = m_listeEtapes.Count;
            }
            try
            {
                while (nNbEtapes > 0)
                {
                    AssureSession();
                    if (m_session != null)
                    {
                        StartNextEtape();
                    }

                    lock (typeof(CLockerEtapes))
                    {
                        nNbEtapes = m_listeEtapes.Count;
                    }
                    System.Threading.Thread.Sleep(500);
                }
            }
            catch (Exception e)
            {
                C2iEventLog.WriteErreur("DEBUG_TODO - LoopEtapes() - Step loop failed : " + e.Message);
            }

            lock (typeof(CLockerEtapes))
            {
                m_bLoopEtapesEnCours   = false;
                m_timerLooper.Interval = c_nDelaiTimerLooper;
                m_timerLooper.Start();
                //C2iEventLog.WriteInfo("DEBUG_TODO - LoopEtapes() - m_timerLooper.Start()");
            }
        }
Example #8
0
            ////////////////////////////////////////////////////////////////////////
            public CResultAErreur CommitTrans()
            {
                CResultAErreur result = CResultAErreur.True;

                foreach (IDatabaseConnexion connexion in m_connexions.Values)
                {
                    result = connexion.CommitTrans();
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("ERROR WHILE TRANSATION CLOSING :\r\nConnection: @1\r\nSession: @2\r\nConnection number for this session: @3|199", connexion.ConnexionString, IdSession.ToString(), m_connexions.Count.ToString()));
                        return(result);
                    }
                }
                m_nNbTransactionsOuvertes--;
                return(result);
            }
Example #9
0
 protected override void OnStart(string[] args)
 {
     try
     {
         C2iEventLog.Init("Timos", NiveauBavardage.VraiPiplette);
         RemotingConfiguration.Configure(AppDomain.CurrentDomain.BaseDirectory + "\\serviceMediation.remoting.config", false);
         RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.On;
         CAutoexecuteurClasses.RunAllAutoexecs();
         CSnmpProxyConfiguration.GetInstance().MiseAJour(true);
         CServiceMediation.GetDefaultInstance().Configuration.MettreAJour(true, true);
     }
     catch (Exception e)
     {
         C2iEventLog.WriteErreur(e.Message);
         throw e;
     }
 }
Example #10
0
 // Notify a handler that an object has been disconnected.
 public void DisconnectedObject(Object obj)
 {
     if (obj is CSessionClientSurServeur)
     {
         bool bConnected = false;
         CSessionClientSurServeur session = (CSessionClientSurServeur)obj;
         try
         {
             CSessionClientSurServeur sc = CGestionnaireSessions.GetSessionClientSurServeurStatic(session.IdSession) as CSessionClientSurServeur;
             if (CGestionnaireSessions.IsSessionOpenStatic(session.IdSession))
             {
                 //
                 try
                 {
                     //Tente de contacter la session cliente
                     bConnected = sc == null || sc.SessionClient.IsConnected;
                 }
                 catch
                 {
                 }
                 if (!bConnected)
                 {
                     string strMessage = I.T("Auto disconnection session number @1|109", session.IdSession.ToString()) +
                                         I.T("\r\n|108") + I.T("Type|107") + session.TypeApplicationCliente.ToString();
                     strMessage += I.T("\r\n|108") + session.DescriptionApplicationCliente;
                     try
                     {
                         strMessage += I.T("\r\n|108") + session.GetInfoUtilisateur().NomUtilisateur;
                     }
                     catch
                     { }
                     C2iEventLog.WriteErreur(strMessage);
                 }
             }
         }
         catch {}
         if (!bConnected)
         {
             session.CloseSession();
         }
     }
 }
 /// //////////////////////////////////////////////////////////////////////////
 protected void EnvoieNotificationToSessionThread(CSessionClient session, IDonneeNotification[] donnees)
 {
     try
     {
         session.OnNotification(donnees);
     }
     catch (Exception e)
     {
         try
         {
             m_nNbErreursNotif++;
             if (m_nNbErreursNotif > 20)
             {
                 C2iEventLog.WriteErreur("Error sending notification \r\n" + e.ToString());
                 m_nNbErreursNotif = 0;
             }
         }
         catch { }
     }
 }
Example #12
0
        //-----------------------------------------------------------------------------------------
        public static DateTime ParseDateFromString(string strDate)
        {
            try
            {
                int nAnnee   = Int32.Parse(strDate.Substring(0, 4));
                int nMois    = Int32.Parse(strDate.Substring(4, 2));
                int nJour    = Int32.Parse(strDate.Substring(6, 2));
                int nHeure   = Int32.Parse(strDate.Substring(8, 2));
                int nMinute  = Int32.Parse(strDate.Substring(10, 2));
                int nSeconde = Int32.Parse(strDate.Substring(12, 2));

                DateTime date = new DateTime(nAnnee, nMois, nJour, nHeure, nMinute, nSeconde, DateTimeKind.Utc);
                return(date);
            }
            catch (Exception e)
            {
                C2iEventLog.WriteErreur("Error in ParseDateFromString : " + e.Message);
            }

            return(DateTime.MinValue);
        }
Example #13
0
        //----------------------------------------------------
        private CResultAErreur AssureSessionPolling()
        {
            CResultAErreur resErreur = CResultAErreur.True;

            System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
            if (m_sessionPolling == null || !m_sessionPolling.IsConnected)
            {
                m_sessionPolling = CSessionClient.CreateInstance();
                resErreur        = m_sessionPolling.OpenSession(new CAuthentificationSessionServer(),
                                                                "Snmp polling manager",
                                                                ETypeApplicationCliente.Service);
                if (!resErreur)
                {
                    resErreur.EmpileErreur(resErreur.Erreur);
                    C2iEventLog.WriteErreur("Error while open snmp polling management");
                    resErreur.EmpileErreur("Error while open snmp polling management");
                    return(resErreur);
                }
            }

            return(resErreur);
        }
Example #14
0
        //-------------------------------------------------------------------
        /// <summary>
        /// Fait un traitement global avant sauvegarde pour s'assurer que tous les éléments
        /// qui imposent une mise à jour de l'agent SNMP ont bien préparé la liste des agents
        /// à mettre à jour.
        /// </summary>
        /// <param name="contexte"></param>
        /// <param name="tableData"></param>
        /// <param name="result"></param>
        public static CResultAErreur CContexteDonneeServeur_DoTraitementExterneAvantSauvegarde(CContexteDonnee contexte, Hashtable tableData)
        {
            CResultAErreur    result = CResultAErreur.True;
            HashSet <DataRow> rows   = GetTableAgentsAMettreAJourToSnmp(contexte, false);

            if (rows != null)
            {
                foreach (DataRow row in rows)
                {
                    CAgentSnmp agent = new CAgentSnmp(row);
                    try
                    {
                        if (agent.AutoUpdate)
                        {
                            result = agent.UpdateToSnmpInCurrentContext(true);
                        }
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                    }
                    if (!result)
                    {
                        string strTexte = I.T("Error while update SNMP agent @1|20157", agent.SnmpIp);
                        strTexte += "\r\n";
                        strTexte += result.Erreur.ToString();
                        C2iEventLog.WriteErreur(strTexte);
                    }
                    result = CResultAErreur.True;
                }
            }
            DataTable table = contexte.Tables[CAgentSnmp.c_nomTable];

            if (table != null)
            {
                table.ExtendedProperties.Remove(c_cleDataAgentsAMettreAjour);
            }
            return(result);
        }
Example #15
0
        private static void OnRetrieveMails(object state)
        {
            if (m_bTraitementEnCours)
                return;
            m_bTraitementEnCours = true;

            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                CResultAErreur result;
                if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected)
                {
                    m_sessionRecherche = CSessionClient.CreateInstance();
                    result = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(),
                        I.T("MAIL ACCOUNT SERVICE|10001"),
                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("Session Opening error for Mail Account Management Service|10003"));
                        return;
                    }
                }
                try
                {
                    CFiltreData filtre = new CFiltreData(
                        CCompteMail.c_champIsActive + " = @1",
                        true);
                    if (new CCompteMailServeur(m_sessionRecherche.IdSession).CountRecords(
                        CCompteMail.c_nomTable, filtre) > 0)
                    {
                        CSessionClient sessionTravail = new CSessionProcessServeurSuivi();
                        result = sessionTravail.OpenSession(new CAuthentificationSessionServer(),
                            I.T("RECEIVE MAILS SERVICE|10004"),
                            ETypeApplicationCliente.Service);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur(I.T("Working session openning error for Receive Mails Service|10005"));
                            return;
                        }
                        try
                        {
                            using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false))
                            {
                                //CCompteMailServeur compteServeur = new CCompteMailServeur(sessionTravail.IdSession);
                                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteTravail, typeof(CCompteMail));
                                liste.Filtre = filtre;
                                ArrayList lstLock = liste.ToArrayList();

                                foreach (CCompteMail compteMail in lstLock)
                                {
                                    if (compteMail.DateDernierReleve == null ||
                                        compteMail.DateDernierReleve.Value.AddMinutes(compteMail.PeriodeReleve) < DateTime.Now)
                                    {
                                        result += compteMail.RetrieveMails();
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                        }
                        finally
                        {
                            try
                            {
                                sessionTravail.CloseSession();
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
Example #16
0
        public CResultAErreurType <CMappageIdsAlarmes> Traite(CMemoryDb dbContenantLesAlarmesATraiter)
        {
            CResultAErreurType <CMappageIdsAlarmes> result = new CResultAErreurType <CMappageIdsAlarmes>();

            result.SetTrue();
            CResultAErreur resErreur = CResultAErreur.True;

            try
            {
                lock (typeof(CLockerTraitementAlarme))
                {
                    resErreur = AssureSessionEtContexte();
                    if (!resErreur)
                    {
                        result.EmpileErreur(resErreur.Erreur);
                        return(result);
                    }

                    CListeEntitesDeMemoryDb <CLocalAlarme> lstAlarmes = new CListeEntitesDeMemoryDb <CLocalAlarme>(dbContenantLesAlarmesATraiter);
                    lstAlarmes.Filtre = new CFiltreMemoryDb(CMemoryDb.c_champIsToRead + "=@1", false);
                    lstAlarmes.Sort   = CLocalAlarme.c_champDateDebut;
                    //Mappage des ids pour les alarmes qui changent d'ID
                    m_nNbAlarmesTraitees += lstAlarmes.Count();
                    CMappageIdsAlarmes dicMapIds       = new CMappageIdsAlarmes();
                    HashSet <string>   alarmesTraitees = new HashSet <string>();
                    using (CContexteDonnee ctxEdit = m_contexteDonnee.GetContexteEdition())
                    {
                        ctxEdit.EnableTraitementsExternes = false;
                        ctxEdit.DisableHistorisation      = true;
                        try
                        {
                            foreach (CLocalAlarme alrm in lstAlarmes)
                            {
                                if (!alarmesTraitees.Contains(alrm.Id))
                                {
                                    CLocalAlarme root = alrm;
                                    while (root.Parent != null && !root.Parent.IsToRead())
                                    {
                                        root = root.Parent;
                                    }
                                    GereHierarchie(ctxEdit, root, dicMapIds, alarmesTraitees, null);
                                }
                            }
                            result.DataType = dicMapIds;
                        }
                        catch (Exception e)
                        {
                            result.EmpileErreur(new CErreurException(e));
                        }
                        finally
                        {
                            if (result)
                            {
                                resErreur = SauvegardeOptimisee(ctxEdit);
                                if (!resErreur)
                                {
                                    result.EmpileErreur(resErreur.Erreur);
                                }
                            }
                            else
                            {
                                ctxEdit.CancelEdit();
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error in Alarms @1|20156", e.ToString()));
                }
            }
            finally
            {
            }
            Console.WriteLine("Alarmes traitées : " + m_nNbAlarmesTraitees + " à " + DateTime.Now.ToString("HH:mm:ss"));
            return(result);
        }
Example #17
0
 public static void OnTimerGestionAuto(object state)
 {
     if (m_bGestionAutoEnCours)
     {
         return;
     }
     try
     {
         m_bGestionAutoEnCours = true;
         CSessionClient session = CSessionClient.CreateInstance();
         CResultAErreur result  = session.OpenSession(new CAuthentificationSessionServer(),
                                                      I.T("Automatic management of the diary states|314"),
                                                      ETypeApplicationCliente.Service);
         if (!result)
         {
             result.EmpileErreur(I.T("Error in the automatic management of expiration dates: Impossible to open a session|315"));
             C2iEventLog.WriteErreur(result.Erreur.ToString());
             return;
         }
         try
         {
             using (CContexteDonnee contexte = new CContexteDonnee(session.IdSession, true, false))
             {
                 DateTime            dt    = DateTime.Now;
                 CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, typeof(CEntreeAgenda));
                 liste.Filtre = new CFiltreData(
                     CEntreeAgenda.c_champEtatAutomatique + "=@1 and " +
                     CEntreeAgenda.c_champEtat + "<>@2 and " + CEntreeAgenda.c_champEtat + "<>@3 and (" +
                     "(" +
                     CEntreeAgenda.c_champDateDebut + "< @4 and " +
                     CEntreeAgenda.c_champDateFin + ">@4 and " +
                     CEntreeAgenda.c_champEtat + "<>@5) or (" +
                     CEntreeAgenda.c_champDateFin + "<@4 and " +
                     CEntreeAgenda.c_champEtat + "<@6) )",
                     true,
                     (int)EtatEntreeAgenda.Info,
                     (int)EtatEntreeAgenda.Annulee,
                     //dt.ToString("dd/MM/yyyy HH:mm:00"),
                     dt,
                     (int)EtatEntreeAgenda.EnCours,
                     (int)EtatEntreeAgenda.Terminee);
                 foreach (CEntreeAgenda entree in liste)
                 {
                     entree.EtatAuto = false;
                     if (entree.DateDebut < dt && entree.DateFin > dt)
                     {
                         entree.CodeEtatInt = (int)EtatEntreeAgenda.EnCours;
                     }
                     if (entree.DateFin < dt)
                     {
                         entree.CodeEtatInt = (int)EtatEntreeAgenda.Terminee;
                     }
                     entree.EtatAuto = true;
                 }
                 result = contexte.SaveAll(true);
                 if (!result)
                 {
                     result.EmpileErreur(I.T("AError in the automatic management of expiration dates:Error during backup operation|316"));
                     C2iEventLog.WriteErreur(result.Erreur.ToString());
                     return;
                 }
             }
         }
         finally
         {
             session.CloseSession();
         }
     }
     finally
     {
         m_bGestionAutoEnCours = false;
     }
 }
Example #18
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);
        }
Example #19
0
        private static void OnTachePlanifiee(object state)
        {
            //14/12/2010 : si un traitement est en cours depuis plus de 24H, lance d'autres traitements
            TimeSpan sp = DateTime.Now - m_lastDateDebutTraitement;

            if (m_bTraitementEnCours && sp.TotalHours < 24)
            {
                return;
            }
            m_bTraitementEnCours      = true;
            m_lastDateDebutTraitement = DateTime.Now;
            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                CResultAErreur result;
                if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected)
                {
                    m_sessionRecherche = CSessionClient.CreateInstance();
                    result             = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(),
                                                                        I.T("Search of planned tasks|332"),
                                                                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("Session Opening error for planned tasks|333"));
                        return;
                    }
                }
                try
                {
                    CFiltreData filtre = new CFiltreData(CTachePlanifiee.c_champProchaineExecution + " < @1 and " +
                                                         CTachePlanifiee.c_champBloquer + "=@2",
                                                         DateTime.Now,
                                                         false
                                                         );
                    if (new CTachePlanifieeServeur(m_sessionRecherche.IdSession).CountRecords(
                            CTachePlanifiee.c_nomTable, filtre) > 0)
                    {
                        CSessionClient sessionTravail = new CSessionProcessServeurSuivi();
                        result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(),
                                                            I.T("Planned Tasks execution|334"),
                                                            ETypeApplicationCliente.Service);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur(I.T("Working session openning error for Planned Tasks|335"));
                            return;
                        }
                        try
                        {
                            using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false))
                            {
                                CTachePlanifieeServeur serveur = new CTachePlanifieeServeur(sessionTravail.IdSession);
                                CListeObjetsDonnees    liste   = new CListeObjetsDonnees(contexteTravail, typeof(CTachePlanifiee));
                                liste.Filtre = filtre;

                                foreach (CTachePlanifiee tache in liste)
                                {
                                    CInfoDeclencheurProcess infoDeclencheur = new CInfoDeclencheurProcess(TypeEvenement.Date);
                                    try
                                    {
                                        serveur.ExecuteTache(tache.Id, null);
                                    }
                                    catch (Exception e)
                                    {
                                        string strLibelle = I.T("Error planned task @1|336", tache.Libelle) + Environment.NewLine;
                                        strLibelle += e.ToString();
                                        C2iEventLog.WriteErreur(strLibelle);
                                    }
                                    tache.BeginEdit();
                                    CDateTimeEx dt = tache.ParametrePlanification.GetNextOccurence(tache.DateProchaineExecution, false);
                                    while (dt != null && (DateTime)dt < DateTime.Now)
                                    {
                                        dt = tache.ParametrePlanification.GetNextOccurence(dt, false);
                                    }
                                    tache.DateProchaineExecution = dt;
                                    tache.CommitEdit();
                                    //Ouvre une session pour chaque tâche. Comme ça s'il y a une erreur sur une tâche,
                                    //les autres ne peuvent pas être impactées
                                    sessionTravail.CloseSession();
                                    result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(),
                                                                        I.T("Planned Tasks execution|334"),
                                                                        ETypeApplicationCliente.Service);
                                    if (!result)
                                    {
                                        throw new CExceptionErreur(result.Erreur);
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            C2iEventLog.WriteErreur(I.T("Error in planned tasks : @1|337", e.ToString()));
                        }
                        finally
                        {
                            try
                            {
                                sessionTravail.CloseSession();
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur(I.T("Error in planned tasks : @1|337", e.ToString()));
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error in planned tasks : @1|337", e.ToString()));
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
Example #20
0
        //------------------------------------------------------------------------------------
        public CResultAErreur TraiteDataRowFromCsv(string strCsvDataRow)
        {
            CResultAErreur result = CResultAErreur.True;

            // Traite la data row de données CSV
            string[] listeDatas = strCsvDataRow.Split(';');

            string strHostId = listeDatas[0];

            if (strHostId == "")
            {
                string strErreur = "No host Id for CSV data row : " + strCsvDataRow;
                C2iEventLog.WriteErreur(strErreur);
                result.EmpileErreur(strErreur);
                return(result);
            }
            HostId = strHostId;

            try{
                DateTime dt = ParseDateFromString(listeDatas[1]);
                if (dt != null)
                {
                    //Vérifie l'existence de cet élément
                    CListeObjetDonneeGenerique <CCamusatQowisioData> lstToCount = new CListeObjetDonneeGenerique <CCamusatQowisioData>(ContexteDonnee);
                    lstToCount.Filtre = new CFiltreData(
                        c_champQwHost_Id + "=@1 and " +
                        c_champQwDateTime + "=@2",
                        strHostId,
                        dt);
                    if (lstToCount.Count > 0)
                    {
                        if (IsNew())
                        {
                            CancelCreate();
                        }
                        PointeSurLigne(lstToCount[0].Id);
                    }
                }
            }
            catch (Exception e)
            {
            }


            int?nIdSite = TrouveAssociationIdHost_IdSite(strHostId, ContexteDonnee);

            if (nIdSite == null)
            {
                string strErreur = "Error in TraiteDataRowFromCsv: No associatied Site found for Host Id : " + strHostId;
                C2iEventLog.WriteErreur(strErreur);
                result.EmpileErreur(strErreur);
                return(result);
            }

            int nIdTypSite = -1;

            lock (typeof(CLockerCacheDatasQowisio))
            {
                if (!s_dicCacheSiteId_TypeSiteId.TryGetValue(nIdSite.Value, out nIdTypSite))
                {
                    CSite site = new CSite(ContexteDonnee);
                    if (site.ReadIfExists(nIdSite))
                    {
                        nIdTypSite = site.TypeSite.Id;
                        s_dicCacheSiteId_TypeSiteId[nIdSite.Value] = nIdTypSite;
                    }
                }
            }
            if (nIdTypSite == c_nIdTypeSiteTelecom)
            {
                SiteId = nIdSite;
            }
            else if (nIdTypSite == c_nIdTypeSitePickup)
            {
                PickupId = nIdSite;
            }
            else
            {
                string strErreur = "Error in Site Type for site Id = " + nIdSite.Value;
                C2iEventLog.WriteErreur(strErreur);
                result.EmpileErreur(strErreur);
                return(result);
            }

            int nNbColonnes = listeDatas.Length;

            for (int i = 1; i < nNbColonnes; i++)
            {
                string strDataSource = listeDatas[i];

                KeyValuePair <string, Type> defChampData;
                if (s_dicMappageColonneCsv_ChampData.TryGetValue(i, out defChampData))
                {
                    string strNomChamp = defChampData.Key;
                    Type   typeDonnee  = defChampData.Value;

                    if (typeDonnee == typeof(DateTime))
                    {
                        try
                        {
                            DateTime date = ParseDateFromString(strDataSource);
                            Row[strNomChamp] = date;
                            continue;
                        }
                        catch { }
                    }
                    if (typeDonnee == typeof(int?))
                    {
                        if (strDataSource.Trim() == "")
                        {
                            Row[strNomChamp] = DBNull.Value;
                        }
                        else
                        {
                            try
                            {
                                int nVal = Int32.Parse(strDataSource);
                                Row[strNomChamp] = nVal;
                            }
                            catch
                            {
                                Row[strNomChamp] = DBNull.Value;
                            }
                        }
                    }

                    if (typeDonnee == typeof(double))
                    {
                        try
                        {
                            double valeur = CUtilDouble.DoubleFromString(strDataSource);
                            Row[strNomChamp] = valeur;
                            continue;
                        }
                        catch { }
                    }
                    if (typeDonnee == typeof(string))
                    {
                        Row[strNomChamp] = strDataSource;
                        continue;
                    }
                }
                else
                {
                    return(result);
                }
            }

            result += TraiteAssociationsFuelProbeTank();

            return(result);
        }
Example #21
0
        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;
                }
            }
        }
Example #22
0
        private static void OnSendSMS(object state)
        {
            if (m_bTraitementEnCours)
            {
                return;
            }
            m_bTraitementEnCours = true;

            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                CResultAErreur result;
                if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected)
                {
                    m_sessionRecherche = CSessionClient.CreateInstance();
                    result             = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(),
                                                                        I.T("SMS SERVICE|20159"),
                                                                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("Session Opening error for SMS Service|20160"));
                        return;
                    }
                }
                try
                {
                    CFiltreData filtre = new CFiltreData(CMessageSMS.c_champNextSendDate + " < @1 and " +
                                                         CMessageSMS.c_champDateEnvoi + " is null and " +
                                                         CMessageSMS.c_champNbEssais + " < 10",
                                                         DateTime.Now
                                                         );
                    if (new CMessageSMSServeur(m_sessionRecherche.IdSession).CountRecords(
                            CMessageSMS.c_nomTable, filtre) > 0)
                    {
                        CSessionClient sessionTravail = new CSessionProcessServeurSuivi();
                        result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(),
                                                            I.T("Send SMS|20161"),
                                                            ETypeApplicationCliente.Service);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur(I.T("Working session openning error for SMS send|20162"));
                            return;
                        }
                        try
                        {
                            using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false))
                            {
                                CMessageSMSServeur  serveur = new CMessageSMSServeur(sessionTravail.IdSession);
                                CListeObjetsDonnees liste   = new CListeObjetsDonnees(contexteTravail, typeof(CMessageSMS));
                                liste.Filtre = filtre;
                                ArrayList lstLock = liste.ToArrayList();

                                foreach (CMessageSMS message in lstLock)
                                {
                                    CMessageSMSPourEnvoi toSend = new CMessageSMSPourEnvoi(message.Destinataires, message.Texte);
                                    result = toSend.Send(sessionTravail.IdSession);
                                    message.BeginEdit();
                                    if (!result)
                                    {
                                        message.NextSendDate = DateTime.Now.AddMinutes(3);
                                        message.NbEssais++;
                                        message.LastErreur = result.Erreur.ToString();
                                    }
                                    else
                                    {
                                        message.DateEnvoi  = DateTime.Now;
                                        message.LastErreur = "";
                                    }
                                    message.CommitEdit();

                                    result.SetTrue();
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                        }
                        finally
                        {
                            try
                            {
                                sessionTravail.CloseSession();
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
Example #23
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;
                }
            }
        }
Example #24
0
        //------------------------------------------------------------------------
        private void ExecuteEtape(CParametresStartEtapeInPile parametreStart)
        {
            //C2iEventLog.WriteInfo("DEBUG_TODO - ExecuteEtape()");
            List <CDonneeNotificationWorkflow> lstNotifications = new List <CDonneeNotificationWorkflow>();

            //TESTDBKEYTODO
            if (parametreStart.KeyUtilisateur != null)
            {
                m_session.ChangeUtilisateur(parametreStart.KeyUtilisateur);
            }
            try
            {
                using (CContexteDonnee ctx = new CContexteDonnee(m_session.IdSession, true, false))
                {
                    CResultAErreur result = CResultAErreur.True;
                    CEtapeWorkflow etape  = new CEtapeWorkflow(ctx);
                    //C2iEventLog.WriteInfo("DEBUG_TODO - ExecuteEtape() - etape.ReadIfExists(" + parametreStart.IdEtape + ")");
                    if (etape.ReadIfExists(parametreStart.IdEtape))
                    {
                        //C2iEventLog.WriteInfo("DEBUG_TODO - ExecuteEtape() OK étape existe Id = " + parametreStart.IdEtape);
                        result = etape.InternalSetInfosDemarrageInCurrentContext();
                        //C2iEventLog.WriteInfo("DEBUG_TODO - etape.InternalSetInfosDemarrageInCurrentContext() Id = " + parametreStart.IdEtape);
                        etape.EtatCode = (int)EEtatEtapeWorkflow.Démarrée;
                        result         = ctx.SaveAll(true);
                        //C2iEventLog.WriteInfo("DEBUG_TODO - ctx.SaveAll(true) Id = " + parametreStart.IdEtape + " - result = " + result.Result);

                        if (result)
                        {
                            //C2iEventLog.WriteInfo("DEBUG_TODO - before InternalRunAndSaveifOk() Id = " + parametreStart.IdEtape);
                            result = etape.InternalRunAndSaveifOk();
                            //C2iEventLog.WriteInfo("DEBUG_TODO - after InternalRunAndSaveifOk() Id = " + parametreStart.IdEtape);
                        }
                        else
                        {
                            C2iEventLog.WriteInfo("DEBUG_TODO - InternalRunAndSaveifOk() - Erreur : " + result.MessageErreur);
                        }
                        if (result && etape.CodeAffectations.Length > 0 && etape.DateFin == null)
                        {
                            CDonneeNotificationWorkflow donneeWorkflow = new CDonneeNotificationWorkflow(
                                m_session.IdSession,
                                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);
                            //C2iEventLog.WriteInfo("DEBUG_TODO - ExecuteEtape() - etape.EnregistreEvenement()");
                        }
                        if (!result)
                        {
                            NoteErreurSurEtape(etape, result.MessageErreur);
                            return;
                        }
                        //C2iEventLog.WriteInfo("DEBUG_TODO - ExecuteEtape() - Fin traitement étape Id = " + parametreStart.IdEtape);
                    }
                }
            }
            catch (Exception e)
            {
                C2iEventLog.WriteErreur("DEBUG_TODO - ExecuteEtape() - Exception executing step Id  = " + parametreStart.IdEtape + Environment.NewLine + e.Message);
            }
            if (lstNotifications != null)
            {
                CEnvoyeurNotification.EnvoieNotifications(lstNotifications.ToArray());
            }
        }
        private static void OnTachePlanifiee(object state)
        {
            if (m_bTraitementEnCours || m_bIsSuspended)
            {
                return;
            }
            m_bTraitementEnCours = true;
            try
            {
                //La session dévolue aux tâches planifiées est fermée régulierement pour
                //Eviter des problèmes de déconnexion (qui ne sont jamais arrivés, mais
                //on ne sait jamais ).
                if (m_sessionClient == null || !m_sessionClient.IsConnected || m_sessionClient.DateHeureConnexion.AddDays(1) < DateTime.Now)
                {
                    if (m_sessionClient != null)
                    {
                        try
                        {
                            m_sessionClient.CloseSession();
                        }
                        catch
                        {
                        }
                    }

                    //Ouvre une session pour executer l'action
                    m_sessionClient = CSessionClient.CreateInstance();
                    CResultAErreur result = m_sessionClient.OpenSession(new CAuthentificationSessionServer(),
                                                                        "Evenements sur date",
                                                                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur("Erreur ouverture de session pour Evenements sur date");
                        return;
                    }
                }
                try
                {
                    using (CContexteDonnee contexte = new CContexteDonnee(m_sessionClient.IdSession, true, false))
                    {
                        CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, typeof(CHandlerEvenement));
                        liste.Filtre = new CFiltreData(CHandlerEvenement.c_champDateHeureDeclenchement + " < @1 and " +
                                                       CHandlerEvenement.c_champEtatExecution + "=@2",
                                                       DateTime.Now,
                                                       (int)EtatHandlerAction.AExecuter
                                                       );
                        foreach (CHandlerEvenement handler in liste)
                        {
                            CResultAErreur result           = CResultAErreur.True;
                            C2iExpression  formuleCondition = handler.FormuleCondition;
                            bool           bShouldDeclenche = false;
                            CContexteEvaluationExpression ctxEval;
                            ctxEval = new CContexteEvaluationExpression(handler.ElementSurveille);
                            if (formuleCondition != null)
                            {
                                result = formuleCondition.Eval(ctxEval);
                                if (!result)
                                {
                                    bShouldDeclenche = false;
                                    C2iEventLog.WriteErreur("Erreur déclenchement handler " + handler.Id + " : erreur lors de l'évaluation de la condition");
                                }
                                else
                                {
                                    if (result.Data is bool)
                                    {
                                        bShouldDeclenche = (bool)result.Data;
                                    }
                                    else
                                    {
                                        bShouldDeclenche = result.Data != null && result.Data.ToString() != "" && result.Data.ToString() != "0";
                                    }
                                }
                            }
                            if (bShouldDeclenche)
                            {
                                if (handler.EvenementLie != null)
                                {
                                    CInfoDeclencheurProcess infoDeclencheur = new CInfoDeclencheurProcess();
                                    infoDeclencheur.TypeDeclencheur = TypeEvenement.Date;
                                    infoDeclencheur.Info            = handler.EvenementLie.Libelle;
                                    result = handler.EvenementLie.RunEvent(handler.ElementSurveille, infoDeclencheur, null);
                                }
                                else if (handler.ProcessSource != null)
                                {
                                    result = handler.RunEvent(
                                        false,
                                        handler.ElementSurveille,
                                        new CInfoDeclencheurProcess(TypeEvenement.Date),
                                        null);
                                }
                                else if (handler.EtapeWorkflowATerminer != null)
                                {
                                    result = handler.RunEvent(
                                        false,
                                        handler.ElementSurveille,
                                        new CInfoDeclencheurProcess(TypeEvenement.Date),
                                        null);
                                }
                            }
                            handler.EndHandler(result);
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur("Erreur Taches planifiées " + e.ToString());
                }
                finally
                {
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
        //----------------------------------------------------------------------------------
        /// <summary>
        ///
        /// </summary>
        /// <param name="target"></param>
        public static void OnTimerTraitement(object target)
        {
            CResultAErreur result = CResultAErreur.True;

            TimeSpan ts = DateTime.Now - m_lastDateDebutTraitementShort;

            if (m_bTraitementEnCours)
            {
                if (ts.TotalMinutes < 5)
                {
                    return;
                }
                else
                {
                    C2iEventLog.WriteErreur("CCamusatQowisioDataServeur : data processing >= 5 minutes");
                    return;
                }
            }

            m_bTraitementEnCours           = true;
            m_lastDateDebutTraitementShort = DateTime.Now;

            // Determine le mode du traitement SHORT/MEDIUM/FULL
            EModeTraitment modeTraitement = EModeTraitment.SHORT;

            ts = DateTime.Now - m_lastDateDebutTraitementMedium;
            if (ts.TotalMilliseconds >= c_nDelaiTraitementMedium)
            {
                modeTraitement = modeTraitement | EModeTraitment.MEDIUM;
                m_lastDateDebutTraitementMedium = DateTime.Now;
            }
            ts = DateTime.Now - m_lastDateDebutTraitementMedium;
            if (ts.TotalMilliseconds >= c_nDelaiTraitementFull)
            {
                modeTraitement = modeTraitement | EModeTraitment.FULL;
                m_lastDateDebutTraitementFull = DateTime.Now;
            }

            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                try
                {
                    m_sessionClient = CSessionClient.CreateInstance();
                    result          = m_sessionClient.OpenSession(new CAuthentificationSessionServer(),
                                                                  "Qowisio XML data processing",
                                                                  ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur("Working session openning error for CCamusatQowisioDataServeur");
                        return;
                    }

                    try
                    {
                        //Récupère les fichiers FTP
                        string strFTPserver         = CCamusatQowisioServeurRegistre.FTPServer;
                        string strFTPuser           = CCamusatQowisioServeurRegistre.FTPUser;
                        string strFTPpassword       = CCamusatQowisioServeurRegistre.FTPPassword;
                        int    nFTPport             = CCamusatQowisioServeurRegistre.FTPPort;
                        string strIncomingDirectory = CCamusatQowisioServeurRegistre.FTPIncomingDirectory;

                        List <string> listeFichiersATraiter = new List <string>();
                        ArrayList     listFiles             = null;

                        string strLastFile = new CDataBaseRegistrePourClient(m_sessionClient.IdSession).GetValeurString(c_strCleDernierFichierTraité, "");

                        Sftp ftp = new Sftp(strFTPserver, strFTPuser, strFTPpassword);
                        try
                        {
                            ftp.Connect(); /* Open the FTP connection */


                            listFiles = ftp.GetFileList(strIncomingDirectory);
                            listFiles.Sort();
                            listFiles.Reverse();

                            /*
                             *                              // constitue la liste des fichiers à traiter
                             *                              listFiles.AddRange(ftp.GetFiles());
                             *                              listFiles.Sort(new CFtpFileInfoComparer());
                             *                              listFiles.Reverse();*/

                            foreach (string strFtpFile in listFiles)
                            {
                                if (strFtpFile.CompareTo(strLastFile) <= 0)
                                {
                                    break;
                                }
                                string strWorkFile = WorkDir + "\\" + strFtpFile;
                                if (strFtpFile.ToUpper().EndsWith("XML"))
                                {
                                    if (!File.Exists(strWorkFile))
                                    {
                                        ftp.Get(strIncomingDirectory + "/" + strFtpFile, strWorkFile);
                                        //ftp.GetFile(fileInfo.Name, strWorkFile, false); /* download /incoming/file.txt as file.txt to current executing directory, overwrite if it exists */
                                        //ftp.RemoveFile(fileInfo.Name);
                                    }
                                    listeFichiersATraiter.Insert(0, strFtpFile);
                                }
                            }
                            if (listeFichiersATraiter.Count > 0)
                            {
                                new CDataBaseRegistrePourClient(m_sessionClient.IdSession).SetValeur(c_strCleDernierFichierTraité, listeFichiersATraiter[listeFichiersATraiter.Count - 1]);
                            }


                            ftp.Close();
                        }
                        catch (Exception ex)
                        {
                            C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error openning FTP connection: " + ex.Message);
                        }
                        finally
                        {
                            ftp.Close();
                        }

                        // Traite la liste des fichiers à traiter
                        using (CContexteDonnee contexte = new CContexteDonnee(m_sessionClient.IdSession, true, false))
                        {
                            List <string> lstFichiersWork = new List <string>(Directory.GetFiles(WorkDir, "*.xml"));
                            lstFichiersWork.Sort();

                            //CCamusatQowisioDataServeur serveur = new CCamusatQowisioDataServeur(m_sessionClient.IdSession);
                            foreach (string strWorkFile in lstFichiersWork)
                            {
                                try
                                {
                                    string strNomFichier = Path.GetFileName(strWorkFile);

                                    // Traitement d'un fichier XML
                                    result = TraiteFichierQowisio(strWorkFile, contexte, modeTraitement);
                                    string strArchive = DoneDir + "\\" + strNomFichier;
                                    if (result)
                                    {
                                        MoveSafely(strWorkFile, ref strArchive);
                                    }
                                    else
                                    {
                                        strArchive = ErrorDir + "\\" + strNomFichier;
                                        MoveSafely(strWorkFile, ref strArchive);
                                        FileStream   stream = new FileStream(strArchive + ".Err", FileMode.CreateNew, FileAccess.Write);
                                        StreamWriter writer = new StreamWriter(stream);
                                        writer.Write(result.MessageErreur);
                                        writer.Close();
                                        stream.Close();
                                    }
                                }
                                catch (Exception e)
                                {
                                    C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error while processing file : " + strWorkFile + " - " + e.Message);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error processing files : " + ex.Message);
                    }
                    finally
                    {
                        try
                        {
                            m_sessionClient.CloseSession();
                        }
                        catch { }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in OnTimerTraitement : " + e.Message);
                }
            }
            catch (Exception ex)
            {
                C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in OnTimerTraitement : " + ex.Message);
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
        //------------------------------------------------------------------------------------
        /// <summary>
        ///
        /// </summary>
        /// <param name="strXmlFile"></param>
        /// <param name="contexte"></param>
        private static CResultAErreur TraiteFichierQowisio(string strXmlFile, CContexteDonnee contexte, EModeTraitment modeTraitement)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                XmlDocument fichierXmlQowisio = new XmlDocument();
                fichierXmlQowisio.Load(strXmlFile);

                XmlNode nodeExport = fichierXmlQowisio.SelectSingleNode("export");
                if (nodeExport == null)
                {
                    result.EmpileErreur("<export> node not found in file : " + strXmlFile);
                    return(result);
                }

                if ((modeTraitement & EModeTraitment.MEDIUM) == EModeTraitment.MEDIUM)
                {
                    XmlNode nodeInventory = nodeExport.SelectSingleNode("inventory");
                    if (nodeInventory != null)
                    {
                        result += TraiteInventaireQowisio(nodeInventory, contexte);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteInventaireQowisio : " + result.MessageErreur);
                            return(result);
                        }
                    }
                }
                if ((modeTraitement & EModeTraitment.SHORT) == EModeTraitment.SHORT)
                {
                    XmlNode nodeData = nodeExport.SelectSingleNode("data");
                    if (nodeData != null)
                    {
                        result = TraiteDataQowisio(nodeData, contexte);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteDataQowisio : " + result.MessageErreur);
                        }
                    }
                    XmlNode nodeAlarms = nodeExport.SelectSingleNode("alarms");
                    if (nodeAlarms != null)
                    {
                        result = TraiteAlarmesQowisio(nodeAlarms, contexte);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteAlarmesQowisio : " + result.MessageErreur);
                        }
                    }
                }
                result = contexte.SaveAll(true);
                if (!result)
                {
                    C2iEventLog.WriteErreur(result.MessageErreur);
                }
            }

            catch (Exception e)
            {
                string strErreur = "CCamusatQowisioDataServeur error in TraiteFichierQowisio : " + e.Message;
                C2iEventLog.WriteErreur(strErreur);
                result.EmpileErreur(strErreur);
                Console.WriteLine(strErreur);
                return(result);
            }
            finally
            {
            }

            return(result);
        }
        //-------------------------------------------------------------------
        public static CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte, string strNomTable)
        {
            lock (typeof(CObjetHierarchiqueServeur))//Empeche que plusieurs thread entrent en même temps
            {
                CResultAErreur result = CResultAErreur.True;
                if (!result)
                {
                    return(result);
                }

                DataTable table = contexte.Tables[strNomTable];

                ArrayList lstRows = new ArrayList(table.Rows);

                IObjetHierarchiqueACodeHierarchique objet = (IObjetHierarchiqueACodeHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { contexte });

                string strInfosDebug = "";

                /*/*** START DEBUG :  ajout d'une trace pour analyser le bug chez OOREDOO
                 * strInfosDebug = "DEBUG_TIMOS" + Environment.NewLine;
                 * strInfosDebug += "Nom de la table : " + strNomTable + Environment.NewLine;
                 * strInfosDebug += "Contenu des rows : " + Environment.NewLine;
                 * foreach (DataColumn col in table.Columns)
                 * {
                 *  strInfosDebug += col.ColumnName + ";";
                 * }
                 * strInfosDebug += Environment.NewLine;
                 *
                 * foreach (DataRow row in lstRows)
                 * {
                 *  foreach (var item in row.ItemArray)
                 *  {
                 *      strInfosDebug += item.ToString() + ";";
                 *  }
                 *  strInfosDebug += Environment.NewLine;
                 * }
                 * C2iEventLog.WriteInfo(strInfosDebug);
                 * /*** END DEBUG ***/

                try
                {
                    //C2iEventLog.WriteInfo("DEBUG_TIMOS - TraitementAvantSauvegarde() objet hiérarchique - before Sort");
                    lstRows.Sort(new CRowSorterSurParent(objet.ChampIdParent));
                    //C2iEventLog.WriteInfo("DEBUG_TIMOS - TraitementAvantSauvegarde() objet hiérarchique - after Sort");
                }
                catch (Exception ex)
                {
                    //*** START DEBUG 02/11/2020 :  ajout d'une trace pour analyser le bug chez OOREDOO
                    // Cause problème de tri sur table objets hiérarchiques sur champ idParent
                    strInfosDebug  = "DEBUG_TIMOS" + Environment.NewLine;
                    strInfosDebug += "ERROR MESSAGE : " + ex.Message + Environment.NewLine;
                    C2iEventLog.WriteErreur(strInfosDebug);
                    /*** END DEBUG ***/
                }

                object lastParent = DBNull.Value;

                int nLastCode = 0;
                foreach (DataRow row in lstRows)
                {
                    //Allocation du code famille
                    objet = (IObjetHierarchiqueACodeHierarchique)Activator.CreateInstance(CContexteDonnee.GetTypeForTable(strNomTable), new object[] { row });
                    if (objet.Row.RowState != DataRowState.Deleted && (objet.CodeSystemePartiel == objet.CodePartielDefaut || HasChange(objet, objet.ChampIdParent)))
                    {
                        if (!objet.Row[objet.ChampIdParent].Equals(lastParent))
                        {
                            nLastCode  = 0;
                            lastParent = objet.Row[objet.ChampIdParent];
                        }
                        AlloueCode(objet, ref nLastCode);
                    }
                }
                return(result);
            }
        }