/// ///////////////////////////////////////
 private void m_timerClignotant_Tick(object sender, System.EventArgs e)
 {
     if (m_imageInterventionProcess.Image == null)
     {
         m_imageInterventionProcess.Image = m_icones.Images[c_nImageIntervention];
     }
     else
     {
         m_imageInterventionProcess.Image = null;
     }
     if (m_nNbClignotementsWorkflowsRestant > 0)
     {
         if (m_nIdEtapeToLaunch != null)
         {
             int nId = m_nIdEtapeToLaunch.Value;
             m_nIdEtapeToLaunch = null;
             CEtapeWorkflow etape = new CEtapeWorkflow(CSc2iWin32DataClient.ContexteCourant);
             if (etape.ReadIfExists(nId))
             {
                 CGestionnaireWorkflowsEnCours.Instance.AfficheEtape(etape);
             }
         }
         m_pictureWorkflow.Visible = !m_pictureWorkflow.Visible;
         m_lblNbToDo.Visible       = m_nNbEtapesEnCours > 0 && m_pictureWorkflow.Visible;
         m_nNbClignotementsWorkflowsRestant--;
     }
     if (m_nNbClignotementsWorkflowsRestant <= 0)
     {
         m_pictureWorkflow.Visible = true;
         m_lblNbToDo.Visible       = m_nNbEtapesEnCours > 0;
         m_pictureWorkflow.Invalidate();
     }
 }
        //------------------------------------------------------------------------------------
        public void ExecuteNotification(IDonneeNotification donnee)
        {
            CDonneeNotificationWorkflow dw = donnee as CDonneeNotificationWorkflow;

            if (dw != null)
            {
                int            nId   = dw.IdEtapeSource;
                CEtapeWorkflow etape = new CEtapeWorkflow(CSc2iWin32DataClient.ContexteCourant);
                if (etape.ReadIfExists(nId))
                {
                    CGestionnaireWorkflowsEnCours.Instance.AfficheEtape(etape);
                }
            }
        }
        //-----------------------------------------------------------------------------
        private void AfterInitFromContexteOnForm(IFormNavigable form, CContexteFormNavigable contexte)
        {
            CFormEditionStandard frmStd = form as CFormEditionStandard;

            if (frmStd != null)
            {
                int?nIdEtape = contexte[c_cleContexteEtape] as int?;
                if (nIdEtape != null)
                {
                    CEtapeWorkflow etape = new CEtapeWorkflow(CSc2iWin32DataClient.ContexteCourant);
                    if (etape.ReadIfExists(nIdEtape.Value))
                    {
                        m_dicFormToEtape[frmStd] = etape;
                        CFormMain.GetInstance().SetEtapeActive(etape, form as CFormEditionStandard);
                        AppliqueEtape(etape, frmStd);
                    }
                }
            }
        }
Esempio n. 4
0
        /// ///////////////////////////////////////////
        public override CResultAErreur RunService(object parametre)
        {
            CResultAErreur result = CResultAErreur.True;

            if (!(parametre is CActionAfficheEtapeWorkflow.CParametreAffichageEtapeWorkflow))
            {
                result.EmpileErreur(I.T("Parameter type imcompatible with 'Display workflow' service|20589"));
                return(result);
            }
            CActionAfficheEtapeWorkflow.CParametreAffichageEtapeWorkflow parametreEdition = (CActionAfficheEtapeWorkflow.CParametreAffichageEtapeWorkflow)parametre;

            CEtapeWorkflow etape = new CEtapeWorkflow(CSc2iWin32DataClient.ContexteCourant);

            if (etape.ReadIfExists(parametreEdition.IdEtapeWorkflow))
            {
                CFormMain.GetInstance().DisplayEtapeFromOtherThread(etape, parametreEdition.DansNouvelOnglet);
            }

            return(result);
        }
Esempio n. 5
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());
                }
            }
        }
Esempio n. 6
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());
            }
        }