/// //////////////////////////////////////////////////////////////// //Retourne le texte de la clause join à mettre dans SQL public override string GetJoinClause( string strAliasTableParente, string strSuffixeParent, string strAliasTableFille, string strSuffixeFils) { string strAliasTableValeursChampCustom = strAliasTableFille; string strAliasTableValeurDuChamp = strAliasTableParente; string strSuffixeValeursChampsCustom = strSuffixeFils; string strSuffixeValeurDuChamp = strSuffixeParent; string strJoin = ""; int nIdChamp = CChampCustom.GetIdFromDbKey(m_dbKeyChamp); string strChampValeur = CRelationElementAChamp_ChampCustom.c_champValeurString; strJoin = strAliasTableParente + "." + strChampValeur + strSuffixeValeurDuChamp + "=" + strAliasTableValeursChampCustom + "." + CValeurChampCustom.c_champValue + strSuffixeValeursChampsCustom + " and " + strAliasTableValeursChampCustom + "." + CChampCustom.c_champId + strSuffixeValeursChampsCustom + "=" + nIdChamp.ToString(); return(strJoin); }
/// ////////////////////////////////////////////////// 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; //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); }