/// ////////////////////////////////////////////////// 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); }
/// ////////////////////////////////////////////////// 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); }