/// ////////////////////////////////////////////////// public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData) { 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 == null || !((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1")) { result.Data = null; return(result); } string strNomChamp = m_champ.NomPropriete; CDbKey dbKeyChampCustom = null; if (m_champ is CDefinitionProprieteDynamiqueChampCustom) { CComposantFiltreOperateur opPrincipal = null; dbKeyChampCustom = ((CDefinitionProprieteDynamiqueChampCustom)m_champ).DbKeyChamp; strNomChamp = m_champ.NomPropriete; string strAcces = ""; //Trouve le nom du champ et le chemin d'accès int nPos = strNomChamp.LastIndexOf("."); if (nPos != -1) { strAcces = strNomChamp.Substring(0, nPos + 1); strNomChamp = strNomChamp.Substring(nPos + 1); } strAcces += "RelationsChampsCustom."; int nIdChamp = CChampCustom.GetIdFromDbKey(dbKeyChampCustom); CComposantFiltreOperateur operateurIdChamp = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal); CComposantFiltreChamp compo1 = new CComposantFiltreChamp(strAcces + CChampCustom.c_champId, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); compo1.IdChampCustom = nIdChamp; operateurIdChamp.Parametres.Add(compo1); operateurIdChamp.Parametres.Add(new CComposantFiltreConstante(nIdChamp)); opPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt); opPrincipal.Parametres.Add(operateurIdChamp); //Stef, 28072008 : pour tester si un champ est null, on vérifie CRelationElementAChamp_ChampCustom.c_champValeurNull //et non pas les valeurs suivant le type /*if ( typeChamp == typeof(double)) * strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDouble; * else if ( typeChamp == typeof(int)) * strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurInt; * else if ( typeChamp == typeof(DateTime) || typeChamp == typeof(CDateTimeEx) ) * strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDate; * else if ( typeChamp == typeof(bool)) * strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurBool; * else * strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurString; */ strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurNull; strNomChamp = strAcces + strNomChamp; CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); composantChamp.IdChampCustom = nIdChamp; CComposantFiltre composantOperateur = new CComposantFiltreOperateur( m_bTestNull ? CComposantFiltreOperateur.c_IdOperateurDifferent : CComposantFiltreOperateur.c_IdOperateurEgal); composantOperateur.Parametres.Add(composantChamp); composantOperateur.Parametres.Add(new CComposantFiltreConstante(0)); opPrincipal.Parametres.Add(composantOperateur); composantOperateur = opPrincipal; result.Data = composantOperateur; //Stef 28072008, fin modif } else { CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); composantChamp.IdChampCustom = CChampCustom.GetIdFromDbKey(dbKeyChampCustom); CComposantFiltre composantOperateur; if (!m_bTestNull) { composantOperateur = new CComposantFiltreHas(); } else { composantOperateur = new CComposantFiltreHasNo(); } composantOperateur.Parametres.Add(composantChamp); result.Data = composantOperateur; } return(result); }
/// ////////////////////////////////////////////////// public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData) { CResultAErreur result = CResultAErreur.True; if (m_listeIdentifiantsSelectionnes.Count == 0) { return(result); } //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 == null || !((result.Data is bool && (bool)result.Data) || result.Data.ToString() == "1")) { result.Data = null; return(result); } string strNomChamp = m_champ.NomPropriete; if (m_champ is CDefinitionProprieteDynamiqueThis) { strNomChamp = ""; } else { strNomChamp = strNomChamp + "."; } bool bIdNumericId = m_listeIdentifiantsSelectionnes[0].IsNumericalId(); //TESTDBKEYTODO if (bIdNumericId) { //Trouve le nom du champ identifiant Type tp = m_champ.TypeDonnee.TypeDotNetNatif; object[] attribs = tp.GetCustomAttributes(typeof(TableAttribute), true); if (attribs.Length > 0) { TableAttribute tf = (TableAttribute)attribs[0]; if (tf.ChampsId.Length != 1) { result.EmpileErreur(I.T("Cannot apply selection on field @1|150", strNomChamp)); return(result); } strNomChamp += tf.ChampsId[0]; } else { result.EmpileErreur(I.T("Cannot apply selection on field @1|150", strNomChamp)); return(result); } } else { strNomChamp += CObjetDonnee.c_champIdUniversel; } CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); CComposantFiltre composantOperateur; if (m_bExclure) { composantOperateur = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurNotIn); } else { composantOperateur = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurIn); } composantOperateur.Parametres.Add(composantChamp); ArrayList lst = new ArrayList(); foreach (CDbKey key in m_listeIdentifiantsSelectionnes) { lst.Add(new CComposantFiltreConstante(key.GetValeurInDb())); } composantOperateur.Parametres.Add(new CComposantFiltreListe((IExpression[])lst.ToArray(typeof(IExpression)))); if (m_bExclure) { //Si not in->Peut aussi être null !!! CComposantFiltre compoOu = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurOu); CComposantFiltreHasNo compoHasNo = new CComposantFiltreHasNo(); compoHasNo.Parametres.Add(new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements))); compoOu.Parametres.Add(compoHasNo); compoOu.Parametres.Add(composantOperateur); composantOperateur = compoOu; } result.Data = composantOperateur; return(result); }
public override CComposantFiltre GetComposantFiltre() { string idOperateur = ""; object val = m_valeur; switch (m_operateur.Code) { case EOperateurTestFiltre.Egal: idOperateur = CComposantFiltreOperateur.c_IdOperateurEgal; break; case EOperateurTestFiltre.Different: idOperateur = CComposantFiltreOperateur.c_IdOperateurDifferent; break; case EOperateurTestFiltre.PlusPetit: idOperateur = CComposantFiltreOperateur.c_IdOperateurInf; break; case EOperateurTestFiltre.PlusGrand: idOperateur = CComposantFiltreOperateur.c_IdOperateurSup; break; case EOperateurTestFiltre.PlusPetitOuEgal: idOperateur = CComposantFiltreOperateur.c_IdOperateurInfEgal; break; case EOperateurTestFiltre.PlusGrandOuEgal: idOperateur = CComposantFiltreOperateur.c_IdOperateurSuperieurOuEgal; break; case EOperateurTestFiltre.Contient: idOperateur = CComposantFiltreOperateur.c_IdOperateurLike; val = "%" + val.ToString() + "%"; break; case EOperateurTestFiltre.NeContientPas: idOperateur = CComposantFiltreOperateur.c_IdOperateurNotLike; val = "%" + val.ToString() + "%"; break; case EOperateurTestFiltre.CommencePar: idOperateur = CComposantFiltreOperateur.c_IdOperateurLike; val = val.ToString() + "%"; break; case EOperateurTestFiltre.NeCommencePasPar: idOperateur = CComposantFiltreOperateur.c_IdOperateurNotLike; val = val.ToString() + "%"; break; case EOperateurTestFiltre.TerminePar: idOperateur = CComposantFiltreOperateur.c_IdOperateurLike; val = "%" + val.ToString(); break; case EOperateurTestFiltre.NeTerminePasPar: idOperateur = CComposantFiltreOperateur.c_IdOperateurDifferent; val = "%" + val.ToString(); break; case EOperateurTestFiltre.Null: idOperateur = CComposantFiltreOperateur.c_IdOperateurNull; break; case EOperateurTestFiltre.NonNull: idOperateur = CComposantFiltreOperateur.c_IdOperateurIsNotNull; break; default: break; } CComposantFiltre filtre; if (idOperateur == CComposantFiltreOperateur.c_IdOperateurIsNotNull) { CComposantFiltreHas has = new CComposantFiltreHas(); has.Parametres.Add(new CComposantFiltreChamp(m_col.DataPropertyName, "")); filtre = has; } else if (idOperateur == CComposantFiltreOperateur.c_IdOperateurNull) { CComposantFiltreHasNo hasnot = new CComposantFiltreHasNo(); hasnot.Parametres.Add(new CComposantFiltreChamp(m_col.DataPropertyName, "")); filtre = hasnot; } else { CComposantFiltreOperateur compar = new CComposantFiltreOperateur(idOperateur); compar.Parametres.Add(new CComposantFiltreChamp(m_col.DataPropertyName, "")); compar.Parametres.Add(new CComposantFiltreConstante(val)); filtre = compar; } return(filtre); }
/// ////////////////////////////////////////////////// public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData) { 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 == null || (result.Data is bool && !((bool)result.Data)) || result.Data.ToString() == "0") { result.Data = null; return(result); } if (m_champValeur is CDefinitionProprieteDynamiqueChampCustom) { if (m_champ is CDefinitionProprieteDynamiqueChampCustom) { result.EmpileErreur(I.T("Operation not supported: Field = Field|156")); return(result); } else { CDefinitionProprieteDynamique defTmp = m_champ; m_champ = m_champValeur; m_champValeur = defTmp; } } CComposantFiltreOperateur opPrincipal = null; string strNomChamp = m_champ.NomPropriete; CDbKey dbKeyChampCustom = null; if (m_champ is CDefinitionProprieteDynamiqueChampCustom) { CDbKey keyChamp = ((CDefinitionProprieteDynamiqueChampCustom)m_champ).DbKeyChamp; strNomChamp = m_champ.NomPropriete; string strAcces = ""; //Trouve le nom du champ et le chemin d'accès int nPos = strNomChamp.LastIndexOf("."); if (nPos != -1) { strAcces = strNomChamp.Substring(0, nPos + 1); strNomChamp = strNomChamp.Substring(nPos + 1); } strAcces += "RelationsChampsCustom."; dbKeyChampCustom = ((CDefinitionProprieteDynamiqueChampCustom)m_champ).DbKeyChamp; //Stef, 12/10/2009, le test de l'id du champ custom est //Maintenant gerée par le CInfoRelationChampCustom et non //Plus directement dans la clause where. Ca va beaucoup plus vite sous SqlServer /*CComposantFiltreOperateur operateurIdChamp = new CComposantFiltreOperateur ( CComposantFiltreOperateur.c_IdOperateurEgal ); * CComposantFiltreChamp compo1 = new CComposantFiltreChamp ( strAcces+CChampCustom.c_champId, CContexteDonnee.GetNomTableForType (filtre.TypeElements)); * compo1.IdChampCustom = nIdChampCustom; * operateurIdChamp.Parametres.Add ( compo1 ); * operateurIdChamp.Parametres.Add ( new CComposantFiltreConstante ( nIdChamp ) ); * opPrincipal = new CComposantFiltreOperateur ( CComposantFiltreOperateur.c_IdOperateurEt ); * opPrincipal.Parametres.Add ( operateurIdChamp );*/ Type typeChamp = m_champ.TypeDonnee.TypeDotNetNatif; if (typeChamp == typeof(double)) { strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDouble; } else if (typeChamp == typeof(int)) { strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurInt; } else if (typeChamp == typeof(DateTime) || typeChamp == typeof(CDateTimeEx)) { strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurDate; } else if (typeChamp == typeof(bool)) { strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurBool; } else { strNomChamp = CRelationElementAChamp_ChampCustom.c_champValeurString; } strNomChamp = strAcces + strNomChamp; opPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt); CComposantFiltreChamp composantChampNull = new CComposantFiltreChamp(strAcces + CRelationElementAChamp_ChampCustom.c_champValeurNull, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); composantChampNull.IdChampCustom = CChampCustom.GetIdFromDbKey(dbKeyChampCustom); CComposantFiltreOperateur opEgal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal); opEgal.Parametres.Add(composantChampNull); opEgal.Parametres.Add(new CComposantFiltreConstante(0)); opPrincipal.Parametres.Add(opEgal); } CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); composantChamp.IdChampCustom = CChampCustom.GetIdFromDbKey(dbKeyChampCustom); CComposantFiltreOperateur composantOperateur = new CComposantFiltreOperateur(IdOperateur); CComposantFiltre composantValeur = null; if (ExpressionValeur == null) { if (m_champValeur != null) { composantValeur = new CComposantFiltreChamp(m_champValeur.NomPropriete, composantChamp.TableDeBase); } else { result.EmpileErreur(I.T("Value is not defined for element @1|157", Description)); result.Data = null; return(result); } } else { result = ExpressionValeur.Eval(contexteEvaluation); if (!result) { result.EmpileErreur(I.T("Error while evaluation of @1|143", ExpressionValeur.GetString())); result.Data = null; return(result); } CComposantFiltreVariable composantVariable = new CComposantFiltreVariable("@" + (filtreData.Parametres.Count + 1).ToString()); filtreData.Parametres.Add(result.Data); composantValeur = composantVariable; } composantOperateur.Parametres.Add(composantChamp); composantOperateur.Parametres.Add(composantValeur); if (IdOperateur == CComposantFiltreOperateur.c_IdOperateurDifferent) { //Ajoute ou null CComposantFiltreOperateur ou = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurOu); ou.Parametres.Add(composantOperateur); CComposantFiltreHasNo hasNo = new CComposantFiltreHasNo(); hasNo.Parametres.Add(new CComposantFiltreChamp(strNomChamp, composantChamp.TableDeBase)); ou.Parametres.Add(hasNo); composantOperateur = ou; } if (opPrincipal != null) { opPrincipal.Parametres.Add(composantOperateur); composantOperateur = opPrincipal; } result.Data = composantOperateur; return(result); }