public CResultAErreurType <CAffectationsEtapeWorkflow> CalculeAffectations(CWorkflow workflow)
        {
            CResultAErreurType <CAffectationsEtapeWorkflow> resultAff = new CResultAErreurType <CAffectationsEtapeWorkflow>();

            resultAff.Result = true;

            CAffectationsEtapeWorkflow    affectations = new CAffectationsEtapeWorkflow();
            CContexteEvaluationExpression ctx          = new CContexteEvaluationExpression(workflow);

            foreach (CFormuleNommee formule in Formules)
            {
                CResultAErreur result = formule.Formule.Eval(ctx);
                if (result)
                {
                    if (result.Data is IAffectableAEtape)
                    {
                        affectations.AddAffectable(result.Data as IAffectableAEtape);
                    }
                    else if (result.Data is IEnumerable)
                    {
                        foreach (object obj in (IEnumerable)result.Data)
                        {
                            IAffectableAEtape a = obj as IAffectableAEtape;
                            if (a != null)
                            {
                                affectations.AddAffectable(a);
                            }
                        }
                    }
                }
            }
            resultAff.DataType = affectations;
            return(resultAff);
        }
Exemple #2
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);
        }