public static CResultAErreurType <CHandlerEvenement> CreateHandlerOnObject(
            CContexteDonnee ctxDonnee,
            CObjetDonneeAIdNumerique objetCible,
            CParametreDeclencheurEvenement parametreDeclencheur,
            string strLibelle,
            string strCode)
        {
            bool bShouldCreate = true;

            CResultAErreurType <CHandlerEvenement> result = new CResultAErreurType <CHandlerEvenement>();

            result.Result = true;


            //Vérifie que le handler n'existe pas déjà
            CHandlerEvenement handler = new CHandlerEvenement(ctxDonnee);

            if (!handler.ReadIfExists(
                    new CFiltreData(
                        CHandlerEvenement.c_champTypeCible + "=@1 and " +
                        CHandlerEvenement.c_champIdCible + "=@2 and " +
                        CHandlerEvenement.c_champCode + "=@3",
                        objetCible.GetType().ToString(),
                        objetCible.Id,
                        strCode)))
            {
                handler = null;
            }

            //Programme le handler
            if (handler == null)
            {
                handler = new CHandlerEvenement(ctxDonnee);
                handler.CreateNewInCurrentContexte();
            }
            handler.Libelle             = strLibelle;
            handler.Code                = strCode;
            handler.TypeEvenement       = parametreDeclencheur.TypeEvenement;
            handler.FormuleCondition    = parametreDeclencheur.FormuleConditionDeclenchement;
            handler.ProprieteSurveillee = parametreDeclencheur.ProprieteASurveiller;
            handler.FormuleValeurAvant  = parametreDeclencheur.FormuleValeurAvant;
            handler.FormuleValeurApres  = parametreDeclencheur.FormuleValeurApres;
            handler.ElementSurveille    = objetCible;
            handler.DateHeure           = null;
            handler.ContextesException  = parametreDeclencheur.ContextesException;
            handler.HideProgress        = parametreDeclencheur.HideProgress;

            //Si date, évalue la formule de date
            if (parametreDeclencheur.TypeEvenement == TypeEvenement.Date)
            {
                object valeur = null;
                if (parametreDeclencheur.ProprieteASurveiller != null)
                {
                    valeur = CParametreDeclencheurEvenement.GetValeur(objetCible, parametreDeclencheur.ProprieteASurveiller, DataRowVersion.Current);
                }
                if (valeur is CDateTimeEx)
                {
                    valeur = ((CDateTimeEx)valeur).DateTimeValue;
                }
                if (valeur is DateTime? && valeur != null)
                {
                    valeur = ((DateTime?)valeur).Value;
                }
                if (valeur is DateTime)
                {
                    CObjetForTestValeurChampCustomDateTime objetEval    = new CObjetForTestValeurChampCustomDateTime((DateTime)valeur);
                    CContexteEvaluationExpression          contexteEval = new CContexteEvaluationExpression(objetEval);
                    contexteEval.AttacheObjet(typeof(CContexteDonnee), ctxDonnee);
                    if (parametreDeclencheur.FormuleDateProgramme == null)
                    {
                        result.EmpileErreur(I.T("Impossible to evaluate the date formula for the event release @1|149", strLibelle));
                        return(result);
                    }
                    CResultAErreur resTmp = parametreDeclencheur.FormuleDateProgramme.Eval(contexteEval);
                    if (!resTmp)
                    {
                        result.EmpileErreur(resTmp.Erreur);
                    }
                }
                else
                {
                    result.EmpileErreur(I.T("The date value is incorrect|148"));
                    return(result);
                }

                if (!result || !(result.Data is DateTime))
                {
                    result.EmpileErreur(I.T("Date formula is incorrect in the @1 release|150", strLibelle));
                    return(result);
                }
                handler.DateHeure = new CDateTimeEx((DateTime)result.Data);
            }
            result.DataType = handler;
            return(result);
        }
Exemple #2
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur ExecuteAction(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CLienAction lienEvenement = null, lienStd = null;

            //Trouve le lien sortant evenement
            foreach (CLienAction lien in GetLiensSortantHorsErreur())
            {
                if (lien is CLienEvenement)
                {
                    lienEvenement = lien;
                }
                else
                {
                    lienStd = lien;
                }
            }
            if (lienEvenement != null)
            {
                //Evalue l'élément cible

                object obj = null;
                obj = Process.GetValeurChamp(IdVariableElement);
                if (obj != null && obj.Equals(Process))
                {
                    obj = contexte.ProcessEnExecution;
                }

                if (obj != null)
                {
                    if (!(obj is CObjetDonneeAIdNumerique))
                    {
                        result.EmpileErreur(I.T("The supervised element by the event @1 isn't correct|147", Libelle));
                        return(result);
                    }

                    CHandlerEvenement handler = new CHandlerEvenement(contexte.ContexteDonnee);
                    bool bShouldCreate        = true;
                    if (TypeDeGestionDuCodeEvenement != TypeGestionCode.PasDeGestionCode)
                    {
                        //Vérifie que le handler n'existe pas déjà
                        CHandlerEvenement handlerExistant = new CHandlerEvenement(contexte.ContexteDonnee);
                        if (handlerExistant.ReadIfExists(
                                new CFiltreData(
                                    CHandlerEvenement.c_champTypeCible + "=@1 and " +
                                    CHandlerEvenement.c_champIdCible + "=@2 and " +
                                    CHandlerEvenement.c_champCode + "=@3",
                                    obj.GetType().ToString(),
                                    ((CObjetDonneeAIdNumerique)obj).Id,
                                    ParametreDeclencheur.Code)))
                        {
                            switch (TypeDeGestionDuCodeEvenement)
                            {
                            case TypeGestionCode.NePasCreerSiExiste:
                                bShouldCreate = false;
                                break;

                            case TypeGestionCode.RemplacerSiExiste:
                                handler       = handlerExistant;
                                bShouldCreate = true;
                                break;
                            }
                        }
                    }
                    if (bShouldCreate)
                    {
                        int nIdActionArrivee = lienEvenement.IdActionArrivee;
                        //Programme le handler
                        if (handler == null)
                        {
                            handler = new CHandlerEvenement(contexte.ContexteDonnee);
                            handler.CreateNewInCurrentContexte();
                        }
                        handler.Libelle             = LibelleEvenement;
                        handler.Code                = ParametreDeclencheur.Code;
                        handler.TypeEvenement       = ParametreDeclencheur.TypeEvenement;
                        handler.FormuleCondition    = ParametreDeclencheur.FormuleConditionDeclenchement;
                        handler.ProprieteSurveillee = ParametreDeclencheur.ProprieteASurveiller;
                        handler.FormuleValeurAvant  = ParametreDeclencheur.FormuleValeurAvant;
                        handler.FormuleValeurApres  = ParametreDeclencheur.FormuleValeurApres;
                        handler.ElementSurveille    = (CObjetDonneeAIdNumerique)obj;
                        handler.DateHeure           = null;
                        handler.ContextesException  = ParametreDeclencheur.ContextesException;
                        handler.HideProgress        = ParametreDeclencheur.HideProgress;

                        //Si date, évalue la formule de date
                        if (ParametreDeclencheur.TypeEvenement == TypeEvenement.Date)
                        {
                            object valeur = null;
                            if (ParametreDeclencheur.ProprieteASurveiller != null)
                            {
                                valeur = CParametreDeclencheurEvenement.GetValeur((CObjetDonnee)obj, ParametreDeclencheur.ProprieteASurveiller, DataRowVersion.Current);
                            }
                            if (valeur is CDateTimeEx)
                            {
                                valeur = ((CDateTimeEx)valeur).DateTimeValue;
                            }
                            if (valeur is DateTime? && valeur != null)
                            {
                                valeur = ((DateTime?)valeur).Value;
                            }
                            if (valeur is DateTime)
                            {
                                CObjetForTestValeurChampCustomDateTime objetEval    = new CObjetForTestValeurChampCustomDateTime((DateTime)valeur);
                                CContexteEvaluationExpression          contexteEval = new CContexteEvaluationExpression(objetEval);
                                contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee);
                                if (ParametreDeclencheur.FormuleDateProgramme == null)
                                {
                                    result.EmpileErreur(I.T("Impossible to evaluate the date formula for the event release @1|149", Libelle));
                                    return(result);
                                }
                                result = ParametreDeclencheur.FormuleDateProgramme.Eval(contexteEval);
                            }
                            else
                            {
                                result.EmpileErreur(I.T("The date value is incorrect|148"));
                                return(result);
                            }

                            if (!result || !(result.Data is DateTime))
                            {
                                result.EmpileErreur(I.T("Date formula is incorrect in the @1 release|150", Libelle));
                                return(result);
                            }
                            handler.DateHeure = new CDateTimeEx((DateTime)result.Data);
                        }
                        handler.ProcessSource = contexte.ProcessEnExecution;
                        handler.IdActionDeProcessToExecute = nIdActionArrivee;
                    }
                }
            }

            result.Data = lienStd;

            return(result);
        }