Ejemplo n.º 1
0
        /// //////////////////////////////////////////////////
        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);
        }