示例#1
0
        /// <summary>
        /// Démarre une action
        /// </summary>
        /// <param name="process"></param>
        /// <param name="nIdSession"></param>
        /// <returns></returns>
        public static CResultAErreur StartProcess(CProcess process, CReferenceObjetDonnee refCible, int nIdSession, int?nIdVersion, bool bHideProgress)
        {
            CFormExecuteProcess form = new CFormExecuteProcess();

            form.Top  = 0;
            form.Left = Screen.PrimaryScreen.WorkingArea.Width / 2 - form.Width / 2;
            if (bHideProgress)
            {
                return(CProcessEnExecutionInDb.StartProcess(
                           process,
                           new CInfoDeclencheurProcess(TypeEvenement.Manuel),
                           refCible,
                           nIdSession,
                           nIdVersion,
                           null));
            }
            else
            {
                IAsyncResult res = form.m_startProcess.BeginInvoke(process, refCible, nIdSession, nIdVersion,
                                                                   new AsyncCallback(form.OnEndProcess), null);
                form.ShowDialog();                //Bloque le code ici !
                CResultAErreur result = form.m_startProcess.EndInvoke(res);
                return(result);
            }
        }
示例#2
0
        //-------------------------------------------------------------------
        public CResultAErreur ExecuteTache(int nIdIntervention, IIndicateurProgression indicateur)
        {
            CResultAErreur result = CResultAErreur.True;

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CTachePlanifiee tache = new CTachePlanifiee(contexte);
                if (!tache.ReadIfExists(nIdIntervention))
                {
                    result.EmpileErreur(I.T("The Planned Task '@1' does not exist|338", nIdIntervention.ToString()));
                    return(result);
                }
                int nNbErreurs = 0;
                C2iEventLog.WriteInfo(I.T("Starting planned task @1|339", tache.Libelle), NiveauBavardage.PetiteCausette);

                int    nNbFait   = 0;
                string strErreur = "";
                foreach (CRelationTachePlanifieeProcess rel in tache.RelationsProcess)
                {
                    if (indicateur != null)
                    {
                        indicateur.SetInfo(I.T("Action @1|340", rel.Process.Libelle));
                    }
                    CInfoDeclencheurProcess infoDeclencheur = new CInfoDeclencheurProcess(TypeEvenement.Date);
                    result = CProcessEnExecutionInDb.StartProcess(rel.Process.Process, infoDeclencheur, IdSession, null, null);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Action @1|341", rel.Process.Libelle));
                        strErreur += Environment.NewLine;
                        strErreur += result.Erreur.ToString() + Environment.NewLine + "-------------------------------------" + Environment.NewLine;
                        nNbErreurs++;
                        result = CResultAErreur.True;
                    }
                    nNbFait++;
                    if (indicateur != null)
                    {
                        indicateur.SetValue(nNbFait);
                    }
                }

                foreach (CRelationTachePlanifieeTypeDonneeCumulee relData in tache.RelationsTypesDonneesCumulees)
                {
                    result = relData.TypeDonneeCumulee.StockResultat(indicateur);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Cumulated data @1|342", relData.TypeDonneeCumulee.Libelle));
                        strErreur += result.Erreur.ToString() + "\r\n-------------------------------------\r\n";
                        nNbErreurs++;
                        result = CResultAErreur.True;
                    }
                }



                C2iEventLog.WriteInfo(I.T("End of planned task @1, @2 error(s)|343", tache.Libelle, nNbErreurs.ToString()), NiveauBavardage.PetiteCausette);
                return(result);
            }
        }
        /// //////////////////////////////////////////////////
        public override CResultAErreur VerifieDonnees(CObjetDonnee objet)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CProcessEnExecutionInDb ProcessEnExecution = (CProcessEnExecutionInDb)objet;
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }
示例#4
0
        /// /////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Relance une action
        /// </summary>
        /// <param name="processEnExec"></param>
        /// <param name="nIdAction"></param>
        /// <returns></returns>
        public static CResultAErreur RepriseAction(CProcessEnExecutionInDb processEnExec, int nIdAction)
        {
            CFormExecuteProcess form = new CFormExecuteProcess();

            form.Top  = 0;
            form.Left = Screen.PrimaryScreen.WorkingArea.Width / 2 - form.Width / 2;

            IAsyncResult res = form.m_repriseAction.BeginInvoke(processEnExec, nIdAction,
                                                                new AsyncCallback(form.OnEndProcess), null);

            form.ShowDialog();            //Bloque le code ici !
            CResultAErreur result = form.m_repriseAction.EndInvoke(res);

            return(result);
        }
示例#5
0
        //-------------------------------------------------------------
        public CResultAErreur StartProcess(CEtapeWorkflow etape)
        {
            CResultAErreur result  = CResultAErreur.True;
            CProcess       process = m_process;

            if (process == null)
            {
                if (m_dbKeyProcess != null)
                {
                    CProcessInDb processInDb = new CProcessInDb(etape.ContexteDonnee);
                    if (processInDb.ReadIfExists(m_dbKeyProcess))
                    {
                        process = processInDb.Process;
                    }
                }
            }
            if (process != null)
            {
                if (process.Libelle.Trim().Length == 0 && etape != null)
                {
                    process.Libelle = I.T("Step @1|20109", etape.Libelle);
                }
                result = CProcessEnExecutionInDb.StartProcess(process, new CInfoDeclencheurProcess(TypeEvenement.Specifique),
                                                              new CReferenceObjetDonnee(etape),
                                                              etape.ContexteDonnee.IdSession,
                                                              null,
                                                              null);
                if (result)
                {
                    etape.Refresh();//Relit l'étape car elle a pu être modifiée par le process
                    if (m_bUtiliserSortieDeProcessCommeCodeRetour && (result.Data is string || result.Data is string[]))
                    {
                        if (result.Data is string)
                        {
                            etape.CodesRetour = new string[] { (string)result.Data }
                        }
                        ;
                        if (result.Data is string[])
                        {
                            etape.CodesRetour = (string[])result.Data;
                        }
                    }
                    result = EndAndSaveIfOk(etape);
                }
            }
            return(result);
        }
    }
示例#6
0
        //-------------------------------------------------------------------------
        private void m_lnkTester_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
        {
            CResultAErreur result = CResultAErreur.True;
            //Débute une transaction pour tester dans le vide !!!
            CSessionClient session = CTimosApp.SessionClient;

            result = session.BeginTrans();
            if (result)
            {
                try
                {
                    CInfoDeclencheurProcess info = new CInfoDeclencheurProcess(TypeEvenement.Manuel);
                    result = CProcessEnExecutionInDb.StartProcess(
                        Process.Process,
                        info,
                        CTimosApp.SessionClient.IdSession,
                        Process.ContexteDonnee.IdVersionDeTravail,
                        null);
                }
                catch (Exception ep)
                {
                    result.EmpileErreur(new CErreurException(ep));
                }
                finally
                {
                    session.RollbackTrans();
                }
            }
            if (!result)
            {
                CFormAlerte.Afficher(result.Erreur);
            }
            else
            {
                CFormAlerte.Afficher(I.T("Execution successful|30226"));
            }
        }
示例#7
0
        /// /////////////////////////////////////////////////////////////////////////
        private CResultAErreur StartProcessMultiplesPrivate(CProcess process, CReferenceObjetDonnee[] refsCible, int nIdSession, int?nIdVersion)
        {
            CInfoDeclencheurProcess infoDeclencheur = new CInfoDeclencheurProcess(TypeEvenement.Manuel);

            return(CProcessEnExecutionInDb.StartProcessMultiples(process, infoDeclencheur, refsCible, nIdSession, nIdVersion, this));
        }
示例#8
0
 /// /////////////////////////////////////////////////////////////////////////
 private CResultAErreur RepriseActionPrivate(CProcessEnExecutionInDb processEnExec, int nIdAction)
 {
     return(processEnExec.RepriseProcess(nIdAction, this));
 }
示例#9
0
        /* les parametres sont passés dans le table de paramètres :
         * Id de la variable, suivi de sa valeur( en texte ),...
         *
         */
        public string StartAction(int nIdAction, string[] strParametres)
        {
            DataSet ds = new DataSet();

            if (!AssureSession())
            {
                return("ERROR : " + I.T("Session error|30002"));
            }
            if ((strParametres.Length % 2) != 0)
            {
                return("ERROR : " + I.T("The parameters are not passed correctly|30003"));
            }

            using (CContexteDonnee contexte = new CContexteDonnee(m_session.IdSession, true, false))
            {
                CProcessInDb processInDb = new CProcessInDb(contexte);
                if (!processInDb.ReadIfExists(nIdAction))
                {
                    return("ERROR : " + I.T("The action @1 does not exist|30004", nIdAction.ToString()));
                }

                CProcess process = processInDb.Process;
                #region Affectation des variables du process
                for (int nVariable = 0; nVariable < strParametres.Length; nVariable += 2)
                {
                    string             strVariable = strParametres[nVariable];
                    IVariableDynamique variable    = null;
                    try
                    {
                        variable = process.GetVariable(strVariable);
                    }
                    catch
                    {
                        foreach (CVariableDynamique varTest in process.ListeVariables)
                        {
                            if (varTest.Nom.ToUpper() == strVariable.ToUpper())
                            {
                                variable = varTest;
                                break;
                            }
                        }
                        if (variable == null)
                        {
                            return("ERROR : " + I.T("@1 is not a valid variable id|30005", strVariable));
                        }
                    }
                    if (!(variable is CVariableDynamiqueSaisie))
                    {
                        return("ERROR : " + I.T("The variable @1 is not valid or does not exist|30006", strVariable));
                    }

                    try
                    {
                        object valeur = ((CVariableDynamiqueSaisie)variable).TypeDonnee2i.StringToType(strParametres[nVariable + 1], null);
                        process.SetValeurChamp(variable, valeur);
                    }
                    catch
                    {
                        return("ERROR : " + I.T("Error in affectation of variable @1|30007", variable.Nom));
                    }
                }
                #endregion

                //Note : le service web ne sait pas lancer un process dans une version
                CResultAErreur result = CProcessEnExecutionInDb.StartProcess(process, new CInfoDeclencheurProcess(TypeEvenement.Manuel), m_session.IdSession, null, null);
                if (!result)
                {
                    return("ERROR : " + result.Erreur.ToString());
                }
                if (result.Data != null)
                {
                    return(result.Data.ToString());
                }
                return(null);
            }
        }
        /// //////////////////////////////////////////////////
        public CResultAErreur RepriseProcess(int nIdProcessEnExecution,
                                             int nIdAction,
                                             IIndicateurProgression indicateur)
        {
            using (C2iSponsor sponsor = new C2iSponsor())
            {
                sponsor.Register(indicateur);
                CResultAErreur result = CResultAErreur.True;

                ///Stef, 290808 : ouvre une session spécifique pour le process
                ///Pour pouvoir gérer le changement d'utilisateur proprement
                CSousSessionClient session = CSousSessionClient.GetNewSousSession(IdSession);
                session.OpenSession(new CAuthentificationSessionSousSession(IdSession), "Continue process " + nIdProcessEnExecution, ETypeApplicationCliente.Process);
                CSessionClient sessionOriginale = CSessionClient.GetSessionForIdSession(IdSession);
                //TESTDBKEYTODO
                if (sessionOriginale.GetInfoUtilisateur() != null)
                {
                    session.ChangeUtilisateur(sessionOriginale.GetInfoUtilisateur().KeyUtilisateur);
                }
                try
                {
                    //Stef 08/12/2007 : le contexte ne reçoit plus les notifications
                    using (CContexteDonnee contexteDonnee = new CContexteDonnee(session.IdSession, true, false))
                    {
                        CProcessEnExecutionInDb processEnExecution = new CProcessEnExecutionInDb(contexteDonnee);
                        if (!processEnExecution.ReadIfExists(nIdProcessEnExecution))
                        {
                            result.EmpileErreur(I.T("Current action @1 doesn't exist|30012", nIdProcessEnExecution.ToString()));
                            return(result);
                        }
                        result = contexteDonnee.SetVersionDeTravail(processEnExecution.IdVersionExecution, true);
                        if (!result)
                        {
                            return(result);
                        }
                        CBrancheProcess          branche           = processEnExecution.BrancheEnCours;
                        CContexteExecutionAction contexteExecution = new CContexteExecutionAction(
                            processEnExecution, branche, branche.Process.GetValeurChamp(CProcess.c_strIdVariableElement), contexteDonnee, indicateur);
                        CAction action = branche.Process.GetActionFromId(nIdAction);
                        if (action == null)
                        {
                            result.EmpileErreur(I.T("Impossible to resume the processing : the action @1 doesn't exist|30013", nIdAction.ToString()));
                            return(result);
                        }
                        bool bTrans = false;
                        if (branche.Process.ModeTransactionnel)
                        {
                            session.BeginTrans();
                            bTrans = true;
                        }
                        try
                        {
                            result = branche.ExecuteAction(action, contexteExecution, true);
                        }
                        catch (Exception e)
                        {
                            result.EmpileErreur(new CErreurException(e));
                        }
                        finally
                        {
                            if (bTrans)
                            {
                                if (result)
                                {
                                    result = session.CommitTrans();
                                    if (result)
                                    {
                                        contexteExecution.OnEndProcess();
                                    }
                                }
                                else
                                {
                                    session.RollbackTrans();
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                }
                finally
                {
                    try
                    {
                        session.CloseSession();
                    }
                    catch { }
                }
                return(result);
            }
        }
        //Le data du result contient la valeur de retour du process
        protected CResultAErreur ExecuteProcess(
            CSessionClient session,
            object objetCible,
            CProcess leProcessAExecuter,
            CContexteDonnee contexte,
            bool bSauvegardeDuContexteExecutionExterne,
            IIndicateurProgression indicateur)
        {
            using (C2iSponsor sponsor = new C2iSponsor())
            {
                sponsor.Register(indicateur);
                /// Stef, le 2/4/08 : pb rencontré : leProcessAExecuter peut être
                /// lié à un autre CContexteDonnee que celui dans lequel on execute l'action
                /// en effet, il est alloué dans un CContexteDonnee, mais un autre CContexteDonnee
                /// peut être recréé pour que l'execution.
                /// OR, dans ce cas, les variables calculées évaluées par le CProcess se trouvent dans
                /// le contexte du process, donc, pas dans le contexte d'execution et les modifs
                /// sur ces variables ne sont donc pas sauvegardées !
                /// d'où la ligne suivante : leProcessAExecuter.ContexteDonnee = contexte
                leProcessAExecuter.ContexteDonnee = contexte;
                //Fin Stef 2/4/08
                CResultAErreur          result        = CResultAErreur.True;
                CProcessEnExecutionInDb processEnExec = new CProcessEnExecutionInDb(contexte);
                processEnExec.CreateNewInCurrentContexte();
                if (objetCible is CObjetDonneeAIdNumerique)
                {
                    processEnExec.ElementLie = (CObjetDonneeAIdNumerique)objetCible;
                }
                else
                {
                    processEnExec.ElementLie = null;
                }
                processEnExec.Libelle = leProcessAExecuter.Libelle;
                processEnExec.DbKeyEvennementDeclencheur = leProcessAExecuter.InfoDeclencheur.DbKeyEvenementDeclencheur;
                processEnExec.IdVersionExecution         = contexte.IdVersionDeTravail;

                CBrancheProcess branche = new CBrancheProcess(leProcessAExecuter);
                branche.IsModeAsynchrone = leProcessAExecuter.ModeAsynchrone;
                CSessionClient sessionSource = CSessionClient.GetSessionForIdSession(IdSession);

                //TESTDBKEYTODO
                branche.KeyUtilisateur          = sessionSource.GetInfoUtilisateur().KeyUtilisateur;
                branche.ConfigurationImpression = sessionSource.ConfigurationsImpression;

                CContexteExecutionAction contexteExecution = new CContexteExecutionAction(
                    processEnExec,
                    branche,
                    objetCible,
                    contexte,
                    leProcessAExecuter.ModeAsynchrone ? null : indicateur);
                contexteExecution.SauvegardeContexteExterne = bSauvegardeDuContexteExecutionExterne;
                //Mode synchrone
                if (!leProcessAExecuter.ModeAsynchrone)
                {
                    bool bTrans = false;
                    if (!bSauvegardeDuContexteExecutionExterne && leProcessAExecuter.ModeTransactionnel)
                    {
                        contexte.SaveAll(true);//Sauve le contexte en execution avant démarrage
                        session.BeginTrans();
                        bTrans = true;
                    }
                    try
                    {
                        result = branche.ExecuteAction(leProcessAExecuter.GetActionDebut(), contexteExecution, true);
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                    }
                    finally
                    {
                        if (bTrans)
                        {
                            if (result)
                            {
                                result = session.CommitTrans();
                                if (result)
                                {
                                    contexteExecution.OnEndProcess();
                                }
                            }
                            else
                            {
                                session.RollbackTrans();
                            }
                        }
                    }


                    if (!result)
                    {
                        result.EmpileErreur(I.T("Erreur in @1 process|20001", leProcessAExecuter.Libelle));
                    }
                    if (leProcessAExecuter.VariableDeRetour != null)
                    {
                        result.Data = leProcessAExecuter.GetValeurChamp(leProcessAExecuter.VariableDeRetour.IdVariable);
                    }
                    return(result);
                }
                else
                {
                    //Ouvre une nouvelle session pour éxecuter le process
                    if (leProcessAExecuter.ModeAsynchrone)
                    {
                        CSessionProcessServeurSuivi sessionAsync = new CSessionProcessServeurSuivi();
                        result = sessionAsync.OpenSession(new CAuthentificationSessionProcess(),
                                                          "Process " + leProcessAExecuter.Libelle,
                                                          session);
                        if (!result)
                        {
                            return(result);
                        }
                        session = sessionAsync;
                    }
                    contexteExecution.ChangeIdSession(session.IdSession);
                    contexteExecution.HasSessionPropre = true;
                    m_brancheToExecute         = branche;
                    m_actionToExecute          = leProcessAExecuter.GetActionDebut();
                    m_contexteExecutionProcess = contexteExecution;
                    Thread th = new Thread(new ThreadStart(DemarreProcess));
                    th.Start();
                    return(result);
                }
            }
        }
示例#12
0
 //-------------------------------------------------------------------------
 public CFormEditionProcessEnExecution(CProcessEnExecutionInDb processEnExec, CListeObjetsDonnees liste)
     : base(processEnExec, liste)
 {
     // Cet appel est requis par le Concepteur Windows Form.
     InitializeComponent();
 }
示例#13
0
 //-------------------------------------------------------------------------
 public CFormEditionProcessEnExecution(CProcessEnExecutionInDb processEnExec)
     : base(processEnExec)
 {
     // Cet appel est requis par le Concepteur Windows Form.
     InitializeComponent();
 }
示例#14
0
        //-----------------------------------------------------------
        public static CResultAErreur RunProcess(int nIdProcess, Dictionary <string, string> valeursParametres)
        {
            AssureTimerNettoyage();
            CResultAErreur result = GetSession();

            if (!result)
            {
                return(result);
            }
            CDonneeSessionProcess donneeSession = result.Data as CDonneeSessionProcess;

            result = CResultAErreur.True;
            try
            {
                CSessionClient session = donneeSession.SessionClient;
                using (CContexteDonnee contexte = new CContexteDonnee(session.IdSession, true, false))
                {
                    CProcessInDb processInDb = new CProcessInDb(contexte);
                    if (!processInDb.ReadIfExists(nIdProcess))
                    {
                        result.EmpileErreur(I.T("The process @1 doesn't exist|30008", nIdProcess.ToString()));
                        result.Data = (int)EErreurs.ProcessDoesntExists;
                        return(result);
                    }
                    CProcess process = processInDb.Process;
                    foreach (KeyValuePair <string, string> parametre in valeursParametres)
                    {
                        string strParametre = parametre.Key;
                        string strValeur    = parametre.Value;
                        bool   bTrouvee     = false;
                        foreach (IVariableDynamique variable in process.ListeVariables)
                        {
                            if (strParametre.ToUpper() == variable.Nom.ToUpper())
                            {
                                if (!variable.TypeDonnee.TypeDotNetNatif.IsValueType && variable.TypeDonnee.TypeDotNetNatif != typeof(string))
                                {
                                    result.EmpileErreur(I.T("Variable @1 cannot be set by TimosProcess. Only simple values can be used|30009", variable.Nom));
                                    result.Data = (int)EErreurs.InvalidVariableValueOnlySimpleValuesAreAccepted;
                                    return(result);
                                }
                                try
                                {
                                    object valeur = CUtilTexte.FromUniversalString(strValeur, variable.TypeDonnee.TypeDotNetNatif);
                                }
                                catch
                                {
                                }
                                process.SetValeurChamp(variable.IdVariable, strValeur);
                                bTrouvee = true;
                                break;
                            }
                        }
                        if (!bTrouvee)
                        {
                            result = ShowHelp(process);
                            result.EmpileErreur(I.T("Unknown variable @1|30010", strParametre));
                            result.Data = (int)EErreurs.UnknownVariable;
                            return(result);
                        }
                    }
                    result = CProcessEnExecutionInDb.StartProcess(process, new CInfoDeclencheurProcess(TypeEvenement.Manuel), session.IdSession, null, null);
                    if (!result)
                    {
                        result.Data = (int)EErreurs.ErrorWhileRunningProcess;
                        return(result);
                    }
                    if (result.Data != null)
                    {
                        try
                        {
                            result.Data = Convert.ToInt32(result.Data);
                        }
                        catch
                        {
                        }
                        return(result);
                    }
                    else
                    {
                        result.Data = 0;
                    }
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                result.Data = (int)EErreurs.ErrorWhileRunningProcess;
                return(result);
            }
            finally
            {
                lock (typeof(CLanceurProcessCommandLine))
                {
                    donneeSession.EndUsing();
                }
            }
            return(result);
        }