/// ////////////////////////////////////////////////// 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); } CComposantFiltreOperateur opPrincipal = null; string strNomChamp = m_champ.NomPropriete; 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."; CComposantFiltreOperateur operateurIdChamp = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal); // TESTDBKEYOK if (keyChamp.IsNumericalId()) { operateurIdChamp.Parametres.Add(new CComposantFiltreChamp(strAcces + CChampCustom.c_champId, CContexteDonnee.GetNomTableForType(filtre.TypeElements))); } else { operateurIdChamp.Parametres.Add(new CComposantFiltreChamp(strAcces + CObjetDonnee.c_champIdUniversel, CContexteDonnee.GetNomTableForType(filtre.TypeElements))); } operateurIdChamp.Parametres.Add(new CComposantFiltreConstante(keyChamp.GetValeurInDb())); 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; } CComposantFiltreChamp composantChamp = new CComposantFiltreChamp(strNomChamp, CContexteDonnee.GetNomTableForType(filtre.TypeElements)); CComposantFiltre composantRecherche = new CComposantFiltreRechercheAvancee(); CComposantFiltre composantValeur = null; result = ExpressionValeur.Eval(contexteEvaluation); if (!result) { result.EmpileErreur(I.T("Error while evaluation of @1|143", ExpressionValeur.GetString())); result.Data = null; return(result); } composantValeur = new CComposantFiltreConstante(result.Data.ToString()); composantRecherche.Parametres.Add(composantChamp); composantRecherche.Parametres.Add(composantValeur); if (opPrincipal != null) { opPrincipal.Parametres.Add(composantRecherche); composantRecherche = opPrincipal; } result.Data = composantRecherche; return(result); }
/// ////////////////////////////////////////////////// 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); }