コード例 #1
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantExpression(CFiltreDynamique filtreDynamique)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(filtreDynamique);

            if (ConditionApplication != null)
            {
                result = ConditionApplication.Eval(ctx);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                    return(result);
                }

                if (!((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1"))
                {
                    result.Data = null;
                    return(result);
                }
            }
            C2iExpressionChamp expChamp         = new C2iExpressionChamp(m_champ);
            C2iExpression      expressionIsNull = new C2iExpressionEstNull();

            expressionIsNull.Parametres.Add(expChamp);
            result.Data = expressionIsNull;
            if (!TestNull)
            {
                C2iExpression expNon = new C2iExpressionNon();
                expNon.Parametres.Add(expressionIsNull);
                result.Data = expNon;
            }
            return(result);
        }
コード例 #2
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur GetComposantExpression(CFiltreDynamique filtre)
        {
            CResultAErreur result = CResultAErreur.True;
            //Vérifie que l'expression condition est OK
            CContexteEvaluationExpression contexteEvaluation = new CContexteEvaluationExpression(filtre);

            result = ConditionApplication.Eval(contexteEvaluation);
            if (!result)
            {
                result.EmpileErreur(I.T("Error while evaluation of @1|143", ConditionApplication.GetString()));
                return(result);
            }

            if ((result.Data is bool && !((bool)result.Data)) || result.Data.ToString() == "0")
            {
                result.Data = null;
                return(result);
            }
            result = ExpressionValeur.Eval(contexteEvaluation);
            object valeur = result.Data;


            C2iExpression expChamp = new C2iExpressionChamp(Champ);

            C2iExpression expOp     = null;
            C2iExpression expRacine = null;

            switch (IdOperateur)
            {
            case CComposantFiltreOperateur.c_IdOperateurEgal:
                expOp     = new C2iExpressionEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurContains:
                expOp     = new C2iExpressionContient();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurDifferent:
                expOp     = new C2iExpressionDifferent();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurIn:
                expOp     = new C2iExpressionDans();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurInf:
                expOp     = new C2iExpressionInferieur();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurInfEgal:
                expOp     = new C2iExpressionInferieurOuEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurLike:
                expOp = new C2iExpressionMatchRegex();
                if (valeur != null)
                {
                    valeur = GetRegExFromLike(valeur.ToString());
                }
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurNotIn:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionDans();
                expRacine.Parametres.Add(expOp);
                break;

            case CComposantFiltreOperateur.c_IdOperateurNotLike:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionMatchRegex();
                if (valeur != null)
                {
                    valeur = GetRegExFromLike(valeur.ToString());
                }
                expRacine.Parametres.Add(expOp);
                break;

            case CComposantFiltreOperateur.c_IdOperateurSup:
                expOp     = new C2iExpressionSuperieur();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurSuperieurOuEgal:
                expOp     = new C2iExpressionSuperieurOuEgal();
                expRacine = expOp;
                break;

            case CComposantFiltreOperateur.c_IdOperateurWithout:
                expRacine = new C2iExpressionNon();
                expOp     = new C2iExpressionContient();
                expRacine.Parametres.Add(expOp);
                break;

            default:
                result.EmpileErreur(I.T("Can not use this operator in filter|20011"));
                return(result);
            }

            if (valeur is IList || valeur is Array)
            {
                C2iExpressionListe lst = new C2iExpressionListe();
                foreach (object val in (IEnumerable)valeur)
                {
                    lst.Parametres.Add(new C2iExpressionConstante(val));
                }
                valeur = lst;
            }
            else
            {
                valeur = new C2iExpressionConstante(valeur);
            }

            if (expChamp.TypeDonnee.IsArrayOfTypeNatif)
            {
                //Recherche dans des données filles (tableau)
                C2iExpressionSelectFirst expSelFirst = new C2iExpressionSelectFirst();
                expSelFirst.Parametres.Add(expRacine);
                C2iExpressionObjet expObjet = new C2iExpressionObjet();
                expObjet.Parametres.Add(expChamp);
                expObjet.Parametres.Add(expSelFirst);
                expChamp = new C2iExpressionThis();
                C2iExpression expNull = new C2iExpressionNull();
                expNull.Parametres.Add(expObjet);
                C2iExpression expNon = new C2iExpressionNon();
                expNon.Parametres.Add(expNull);
                expRacine = expNon;
            }

            expOp.Parametres.Add(expChamp);
            expOp.Parametres.Add(valeur);
            result.Data = expRacine;
            string strExp = expRacine.GetString();

            return(result);
        }