Exemplo n.º 1
0
        public CResultAErreur AppliqueTo(CEtapeWorkflow etape, bool bIsRedemarrage)
        {
            CResultAErreur result = CResultAErreur.True;

            if (!bIsRedemarrage || RecalculerAffectationsSurRedemarrage)
            {
                CResultAErreurType <CAffectationsEtapeWorkflow> resAff = Affectations.CalculeAffectations(etape.Workflow);
                if (!resAff)
                {
                    result.EmpileErreur(resAff.Erreur);
                    return(result);
                }
                etape.Affectations = resAff.DataType;
            }

            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(etape);

            if (FormuleInitialisation != null)
            {
                if (!bIsRedemarrage || ReevaluerInitialisationSurRedemarrage)
                {
                    result = FormuleInitialisation.Eval(ctx);
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Retourne l'étape de ce type pour le workflow
        /// </summary>
        /// <param name="workflow"></param>
        /// <returns></returns>
        public CResultAErreurType <CEtapeWorkflow> CreateOrGetEtapeInCurrentContexte(CTypeEtapeWorkflow typeEtape)
        {
            CResultAErreurType <CEtapeWorkflow> result = new CResultAErreurType <CEtapeWorkflow>();

            //Vérifie que le workflow n'a pas déjà une étape de ce type
            if (typeEtape == null)
            {
                result.EmpileErreur(I.T("Create step need a step type|20076"));
                return(result);
            }
            //Vérifie que le workflow n'a pas déjà une étape de ce type
            CEtapeWorkflow etape          = GetEtapeForType(typeEtape);
            bool           bIsRedemarrage = true;

            if (etape == null)
            {
                etape = new CEtapeWorkflow(ContexteDonnee);
                etape.CreateNewInCurrentContexte();
                etape.Workflow  = this;
                etape.TypeEtape = typeEtape;
                bIsRedemarrage  = false;
            }
            CResultAErreur resTmp = typeEtape.ParametresInitialisation.AppliqueTo(etape, bIsRedemarrage);

            if (!resTmp)
            {
                result.EmpileErreur(resTmp.Erreur);
            }
            if (result)
            {
                result.DataType = etape;
            }
            return(result);
        }
Exemplo n.º 3
0
        public CResultAErreur DémarreWorkflow(CTypeEtapeWorkflow typeEtapeDebut, bool bStartImmediate)
        {
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            if (info != null)
            {
                //TESTDBKEYOK
                KeyManager = info.KeyUtilisateur;
            }
            CResultAErreur result = CResultAErreur.True;

            if (EtapesEnCours.Count != 0)
            {
                result.EmpileErreur(I.T("Workflow was already started|20073"));
                return(result);
            }
            if (typeEtapeDebut == null ||
                typeEtapeDebut.Workflow != TypeWorkflow//cas pourri : l'étape de début n'est pas valide pour ce workflow ça ne doit pas arriver
                )
            {
                if (TypeWorkflow == null)
                {
                    result.EmpileErreur(I.T("Workflow type should be set before it starts|20077"));
                    return(result);
                }
                typeEtapeDebut = TypeWorkflow.EtapeDemarrageDefaut;
                if (typeEtapeDebut == null)
                {
                    result.EmpileErreur(I.T("Workflow type @1 doesn't have any start point|20074",
                                            TypeWorkflow != null?TypeWorkflow.Libelle:"???"));
                    return(result);
                }
            }
            using (CContexteDonnee ctx = new CContexteDonnee(ContexteDonnee.IdSession, true, false))
            {
                ///Si bStartImmediate, travaille dans un contexte spécifique qui est sauvé tout de suite
                CContexteDonnee contexteDeTravail = bStartImmediate ? ctx : ContexteDonnee;
                CWorkflow       wkf = GetObjetInContexte(contexteDeTravail) as CWorkflow;
                typeEtapeDebut = typeEtapeDebut.GetObjetInContexte(contexteDeTravail) as CTypeEtapeWorkflow;
                CResultAErreurType <CEtapeWorkflow> resEtape = wkf.CreateOrGetEtapeInCurrentContexte(typeEtapeDebut);
                if (resEtape)
                {
                    CEtapeWorkflow etape = resEtape.DataType;
                    etape.DemandeDemarrageInCurrentContext(null);
                }
                else
                {
                    result.EmpileErreur(resEtape.Erreur);
                }
                IsRunning = true;
                RunGeneration++;
                if (result && bStartImmediate)
                {
                    result = ctx.SaveAll(true);
                }
            }
            return(result);
        }
Exemplo n.º 4
0
 //----------------------------------------------------------------------------------
 //Prépare l'étape pour un démarrage
 internal void DemandeDemarrageInCurrentContext(CEtapeWorkflow etapeAppelante)
 {
     InternalSetInfosDemarrageInCurrentContext();
     EtapeAppelante = etapeAppelante;
 }
Exemplo n.º 5
0
        //-------------------------------------------------------------------
        /// <summary>
        /// Démarre les étapes suivantes d'une étape
        /// </summary>
        /// <param name="etape"></param>
        /// <returns></returns>
        public CResultAErreur PrépareSuiteEtapeInCurrentContext(CEtapeWorkflow etape)
        {
            CResultAErreur     result    = CResultAErreur.True;
            CTypeEtapeWorkflow typeEtape = etape.TypeEtape;

            if (typeEtape.LiensSortants.Count == 0)
            {
                IsRunning = false;
                if (EtapeAppelante != null)
                {
                    //Fin de l'étape appelante
                    result = EtapeAppelante.EndEtapeNoSave();
                    if (!result)
                    {
                        return(result);
                    }
                }
                return(result);
            }
            foreach (CLienEtapesWorkflow lien in typeEtape.LiensSortants)
            {
                bool          bStartLien  = true;
                C2iExpression formuleLien = lien.Formule;
                if (lien.ActivationCode.Trim().Length > 0)
                {
                    bStartLien = false;
                    foreach (string strCodeRetour in etape.CodesRetour)
                    {
                        if (strCodeRetour.ToUpper() == lien.ActivationCode.ToUpper())
                        {
                            bStartLien = true;
                            break;
                        }
                    }
                }
                if (formuleLien != null && bStartLien && !(formuleLien is C2iExpressionVrai))
                {
                    CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(etape);
                    result = formuleLien.Eval(ctx);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error on condition formula on link @1 from step @2|20008",
                                                lien.Libelle, etape.Libelle));
                        return(result);
                    }
                    bStartLien = result.Data != null && CUtilBool.BoolFromString(result.Data.ToString()) == true;
                }
                if (bStartLien)
                {
                    CTypeEtapeWorkflow typeDestination           = lien.EtapeDestination;
                    CResultAErreurType <CEtapeWorkflow> resEtape = etape.Workflow.CreateOrGetEtapeInCurrentContexte(typeDestination);
                    if (!resEtape)
                    {
                        result.EmpileErreur(resEtape.Erreur);
                        return(result);
                    }
                    else
                    {
                        resEtape.DataType.DemandeDemarrageInCurrentContext(etape);
                    }
                }
            }
            return(result);
        }
Exemplo n.º 6
0
        public bool StartWorkflowMultiSteps(ArrayList listEtapesToStart)
        {
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            if (info != null)
            {
                KeyManager = info.KeyUtilisateur;
            }
            CResultAErreur result = CResultAErreur.True;

            if (TypeWorkflow.Etapes.Count == 0)
            {
                if (EtapeAppelante != null)
                {
                    EtapeAppelante.EndEtapeNoSave();
                    return(true);
                }
            }
            foreach (object stepsPath in listEtapesToStart)
            {
                if (!(stepsPath is string))
                {
                    throw new Exception(I.T("Invalid parameter for 'StartWorkflowMultiSteps'. Parameter must be an array of steps type path (separated by points).|20106"));
                }
                string strPath      = (string)stepsPath;
                int    nPosPoint    = strPath.IndexOf('.');
                string strStepType  = "";
                string strSuitePath = "";
                if (nPosPoint > 0)
                {
                    strStepType  = strPath.Substring(0, nPosPoint);
                    strSuitePath = strPath.Substring(nPosPoint + 1);
                }
                else
                {
                    strStepType = strPath;
                }
                CTypeEtapeWorkflow typeEtape = null;
                if (strStepType.Trim().Length == 0)
                {
                    typeEtape = TypeWorkflow.EtapeDemarrageDefaut;
                }
                else
                {
                    CListeObjetsDonnees lst = TypeWorkflow.Etapes;
                    lst.Filtre = new CFiltreData(CTypeEtapeWorkflow.c_champIdUniversel + "=@1", strStepType);
                    if (lst.Count > 0)
                    {
                        typeEtape = lst[0] as CTypeEtapeWorkflow;
                    }
                    if (typeEtape == null)
                    {
                        throw new Exception(I.T("Step type @1 can not be found|20107"));
                    }
                }

                CResultAErreurType <CEtapeWorkflow> resEtape = CreateOrGetEtapeInCurrentContexte(typeEtape);
                if (resEtape)
                {
                    CEtapeWorkflow etape = resEtape.DataType;
                    etape.StartWithPath(strSuitePath);
                }
                else
                {
                    result.EmpileErreur(resEtape.Erreur);
                }
                IsRunning = true;
                RunGeneration++;
            }
            return(result);
        }