コード例 #1
0
        ////////////////////////////////////////////////////////
        public string GetStringAvance(CFiltreDataAvance filtre)
        {
            CComposantFiltre composant = filtre.ComposantPrincipal;

            if (composant == null)
            {
                return("");
            }
            //remplace chaque champ par sa valeur
            for (int nParametre = filtre.Parametres.Count; nParametre > 0; nParametre--)
            {
                if (filtre.Parametres[nParametre - 1] is IList)
                {
                    composant.RemplaceVariableParConstante("@" + nParametre, filtre.Parametres[nParametre - 1]);
                    filtre.Parametres[nParametre - 1] = "";
                    //Renomme les variables suivantes (qui sont déjà renommées en @PARAM)
                    for (int nSuivant = nParametre + 1; nSuivant <= filtre.Parametres.Count; nSuivant++)
                    {
                        composant.RenommeVariable("@PARAM" + (nSuivant), "@PARAM" + (nSuivant - 1));
                    }
                    filtre.Parametres.RemoveAt(nParametre - 1);
                }
                else
                {
                    composant.RenommeVariable("@" + nParametre, "@PARAM" + (nParametre));
                }
            }

            return(GetStringExpression(composant, filtre));
        }
コード例 #2
0
 public override CComposantFiltre GetComposantFiltreFinal(CFiltreData filtre)
 {
     if (Parametres.Count == 2)
     {
         string strValeurCherchee = "";
         if (Parametres[1] is CComposantFiltreVariable)
         {
             if (m_nIndexVariableParametre != -1)
             {
                 strValeurCherchee = filtre.Parametres[m_nIndexVariableParametre - 1].ToString();
             }
         }
         else if (Parametres[1] is CComposantFiltreConstante)
         {
             strValeurCherchee = ((CComposantFiltreConstante)Parametres[1]).Valeur.ToString();
         }
         else
         {
             strValeurCherchee = I.T("ERROR IN HASWORDS VALUE|102");
         }
         if (Parametres[0] is CComposantFiltreChamp)
         {
             CResultAErreur result = new CAnalyseurRequeteIntuitive().AnalyseChaine(strValeurCherchee);
             if (result.Data is CElementRechercheIntuitive)
             {
                 CComposantFiltre cp = ((CElementRechercheIntuitive)result.Data).GetComposantFiltre((CComposantFiltreChamp)Parametres[0]);
                 return(cp);
             }
         }
     }
     return(null);
 }
コード例 #3
0
        public override CComposantFiltre GetComposantFiltre(CComposantFiltreChamp champ)
        {
            CComposantFiltre gauche = null;
            CComposantFiltre droite = null;

            if (Parametres.Length > 0 && Parametres[0] != null)
            {
                gauche = Parametres[0].GetComposantFiltre(champ);
            }
            if (Parametres.Length > 1 && Parametres[1] != null)
            {
                droite = Parametres[1].GetComposantFiltre(champ);
            }
            if (gauche != null && droite != null)
            {
                CComposantFiltreOperateur op = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurOu);
                op.Parametres.Add(gauche);
                op.Parametres.Add(droite);
                return(op);
            }
            if (gauche == null && droite != null)
            {
                return(droite);
            }
            if (gauche != null && droite == null)
            {
                return(gauche);
            }
            return(null);
        }
コード例 #4
0
 //////////////////////////////////////////////////
 protected void CopyTo(CFiltreDataAvance filtre)
 {
     base.CopyTo(filtre);
     filtre.m_strTablePrincipale = m_strTablePrincipale;
     if (m_composantPrincipal != null)
     {
         m_composantPrincipal = (CComposantFiltre)CCloner2iSerializable.Clone(m_composantPrincipal);
     }
 }
コード例 #5
0
        /// ///////////////////////////////////////////////////
        public override CResultAErreur GetComposantFiltreData(CFiltreDynamique filtre, CFiltreData filtreData)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                if (m_listeComposantsFils.Count < 1)
                {
                    return(result);
                }
                result = ((CComposantFiltreDynamique)m_listeComposantsFils[0]).GetComposantFiltreData(filtre, filtreData);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error in element @1|136", ((CComposantFiltreDynamique)m_listeComposantsFils[0]).Description));
                    result.Data = null;
                    return(result);
                }
                CComposantFiltre composantAvant = (CComposantFiltre)result.Data;
                for (int nComposant = 1; nComposant < m_listeComposantsFils.Count; nComposant++)
                {
                    CComposantFiltreDynamique composantDynamique = (CComposantFiltreDynamique)m_listeComposantsFils[nComposant];
                    result = composantDynamique.GetComposantFiltreData(filtre, filtreData);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error in element @1|136", ((CComposantFiltreDynamique)m_listeComposantsFils[nComposant]).Description));
                        result.Data = null;
                        return(result);
                    }
                    if (result.Data != null)
                    {
                        if (composantAvant != null)
                        {
                            CComposantFiltreOperateur parenthesesNew = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurParentheses);
                            CComposantFiltreOperateur parenthesesOld = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurParentheses);
                            parenthesesNew.Parametres.Add(result.Data);
                            parenthesesOld.Parametres.Add(composantAvant);
                            CComposantFiltreOperateur operateur = new CComposantFiltreOperateur(GetIdComposantFiltreOperateur());
                            operateur.Parametres.Add(parenthesesOld);
                            operateur.Parametres.Add(parenthesesNew);
                            composantAvant = operateur;
                        }
                        else
                        {
                            composantAvant = (CComposantFiltre)result.Data;
                        }
                    }
                }
                result.Data = composantAvant;
                return(result);
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
                return(result);
            }
        }
コード例 #6
0
        /// ////////////////////////////////////////////////////////////////
        protected CResultAErreur CalculeComposantPrincipal()
        {
            m_composantPrincipal = null;
            CResultAErreur result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(Filtre, m_strTablePrincipale);

            if (!result)
            {
                return(result);
            }
            m_composantPrincipal = (CComposantFiltre)result.Data;
            return(result);
        }
コード例 #7
0
        /// ////////////////////////////////////////////////////////////////
        public void ChangeTableDeBase(string strTable, string strRelationPourAllerSurLaNouvelleTable)
        {
            CComposantFiltre composantPrincipal = ComposantPrincipal;

            m_strTablePrincipale = strTable;
            foreach (CComposantFiltreChamp champ in composantPrincipal.ExtractExpressionsType(typeof(CComposantFiltreChamp)))
            {
                champ.EmpileRelation(strTable, strRelationPourAllerSurLaNouvelleTable);
            }

            base.Filtre = ComposantPrincipal.GetString();
            CalculeComposantPrincipal();
        }
コード例 #8
0
        /// /////////////////////////////////////////////////
        public static CResultAErreur AnalyseFormule(string strChaine, string strTableDeBase)
        {
            CResultAErreur   result    = CResultAErreur.True;
            string           strKey    = strTableDeBase + "/" + strChaine;
            CComposantFiltre composant = (CComposantFiltre)m_tableCache[strKey];

            if (composant != null)
            {
                composant   = (CComposantFiltre)CCloner2iSerializable.Clone(composant);
                result.Data = composant;
                return(result);
            }

            CAnalyseurSyntaxiqueFiltre analyseur = new CAnalyseurSyntaxiqueFiltre(strTableDeBase);

            analyseur.SyntaxeSqlStandard = false;
            string strCopie = strChaine;

            //Permet de convertir un filtre data en filter data avancé
            Regex exNotLike = new Regex("not like", RegexOptions.IgnoreCase);
            Regex exNotIn   = new Regex("not in", RegexOptions.IgnoreCase);

            strCopie = exNotIn.Replace(strCopie, "NotIn");
            strCopie = exNotLike.Replace(strCopie, "NotLike");

            result = analyseur.AnalyseChaine(strCopie);
            if (!result)
            {
                result.EmpileErreur(I.T("-------------SC2I Syntax-----------------|110"));
                analyseur.SyntaxeSqlStandard = true;
                CResultAErreur resultStd = analyseur.AnalyseChaine(strChaine);
                if (!resultStd)
                {
                    resultStd.EmpileErreur(I.T("-------------SQL Syntax--------------|111"));
                    result.Erreur += resultStd.Erreur;
                }
                else
                {
                    result = resultStd;
                }
            }
            if (result.Data is CComposantFiltre)
            {
                composant = (CComposantFiltre)result.Data;
                composant = (CComposantFiltre)CCloner2iSerializable.Clone(composant);
                m_tableCache.AddElement(strKey, composant);
            }
            return(result);
        }
コード例 #9
0
        public override CComposantFiltre GetComposantFiltre(CComposantFiltreChamp champ)
        {
            CComposantFiltre droite = null;

            if (Parametres.Length > 0 && Parametres[0] != null)
            {
                droite = Parametres[0].GetComposantFiltre(champ);
            }
            if (droite != null)
            {
                CComposantFiltreOperateur op = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurNot);
                op.Parametres.Add(droite);
                return(op);
            }
            return(null);
        }
コード例 #10
0
        ////////////////////////////////////////////////////////
        public string GetStringAvance(CFiltreDataAvance filtre)
        {
            CComposantFiltre composant = filtre.ComposantPrincipal;

            if (composant == null)
            {
                return("");
            }
            //remplace chaque champ par sa valeur
            for (int nParametre = 1; nParametre <= filtre.Parametres.Count; nParametre++)
            {
                (composant).RemplaceVariableParConstante("@" + nParametre, filtre.Parametres[nParametre - 1]);
            }

            return(GetStringExpression(composant, filtre));
        }
コード例 #11
0
        ////////////////////////////////////////////////////////
        public string GetStringAvance(CFiltreDataAvance filtre)
        {
            CComposantFiltre composant = filtre.ComposantPrincipal;

            if (composant == null)
            {
                return("");
            }
            //remplace chaque champ par sa valeur
            for (int nParametre = filtre.Parametres.Count; nParametre > 0; nParametre--)
            {
                if (filtre.Parametres[nParametre - 1] is IList)
                {
                    composant.RemplaceVariableParConstante("@" + nParametre, filtre.Parametres[nParametre - 1]);
                    filtre.Parametres[nParametre - 1] = "";
                }
                composant.RenommeVariable("@" + nParametre, "@PARAM" + nParametre);
            }

            return(GetStringExpression(composant, filtre));
        }
コード例 #12
0
        /// ////////////////////////////////////////////////////////////////
        public override CResultAErreur Serialize(C2iSerializer serializer)
        {
            int            nVersion = GetNumVersion();
            CResultAErreur result   = serializer.TraiteVersion(ref nVersion);

            if (!result)
            {
                return(result);
            }
            result = base.Serialize(serializer);
            if (!result)
            {
                return(result);
            }
            serializer.TraiteString(ref m_strTablePrincipale);

            I2iSerializable obj = m_composantPrincipal;

            result = serializer.TraiteObject(ref obj);
            m_composantPrincipal = (CComposantFiltre)obj;
            return(result);
        }
コード例 #13
0
        //// ////////////////////////////////////////////////////////////////
        private CResultAErreur GetRelations(CComposantFiltre composant, CArbreTable arbre, bool bFillesLeftOuter)
        {
            CResultAErreur result = CResultAErreur.True;
            bool           bIsComposantLocalLeftOuter = false;

            //Le ou entraine des left outers
            if (composant is CComposantFiltreOperateur)
            {
                CComposantFiltreOperateur op = (CComposantFiltreOperateur)composant;
                if (op.Operateur.Id == CComposantFiltreOperateur.c_IdOperateurOu)
                {
                    bIsComposantLocalLeftOuter = true;
                }
            }
            if (composant is CComposantFiltreHasNo)
            {
                bIsComposantLocalLeftOuter = true;
            }
            if (composant is CComposantFiltreChamp)
            {
                CComposantFiltreChamp champ = (CComposantFiltreChamp)composant;
                result = IntegreRelationsChamps(arbre, champ, bIsComposantLocalLeftOuter || bFillesLeftOuter);
                if (!result)
                {
                    return(result);
                }
            }
            foreach (CComposantFiltre composantFils in composant.Parametres)
            {
                result = GetRelations(composantFils, arbre, bIsComposantLocalLeftOuter || bFillesLeftOuter);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
コード例 #14
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_champTeste.NomPropriete;

            if (m_champTeste is CDefinitionProprieteDynamiqueChampCustom)
            {
                CDbKey dbKeyChamp = ((CDefinitionProprieteDynamiqueChampCustom)m_champTeste).DbKeyChamp;
                strNomChamp = m_champTeste.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);
                operateurIdChamp.Parametres.Add(new CComposantFiltreChamp(strAcces + CChampCustom.c_champId, CContexteDonnee.GetNomTableForType(filtre.TypeElements)));
                operateurIdChamp.Parametres.Add(new CComposantFiltreConstante(dbKeyChamp));
                opPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                opPrincipal.Parametres.Add(operateurIdChamp);
                Type typeChamp = m_champTeste.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));

            CComposantFiltreSousFiltre composantSousFiltre = IsNotInTest ?
                                                             new CComposantFiltreNotInSousFiltre() as CComposantFiltreSousFiltre :
                                                             new CComposantFiltreInSousFiltre() as CComposantFiltreSousFiltre;


            m_sousFiltre.ElementAVariablesExterne = filtre;
            result = m_sousFiltre.GetFiltreData();
            CFiltreDataAvance filtreAvance = null;

            if (result && result.Data is CFiltreDataAvance)
            {
                filtreAvance = result.Data as CFiltreDataAvance;
            }
            else
            {
                return(result);
            }
            filtreAvance.RenumerotteParameters(filtreData.Parametres.Count + 1);
            foreach (object parametre in filtreAvance.Parametres)
            {
                filtreData.Parametres.Add(parametre);
            }
            CComposantFiltreChamp champDeSousFiltre = new CComposantFiltreChamp(m_champRetourneParSousFiltre.NomPropriete, filtreAvance.TablePrincipale);

            composantSousFiltre.InitComposant(composantChamp, filtreAvance.TablePrincipale, champDeSousFiltre, filtreAvance);

            composantSousFiltre.Parametres.Add(composantChamp);
            composantSousFiltre.Parametres.Add(new CComposantFiltreConstante(CContexteDonnee.GetTypeForTable(filtreAvance.TablePrincipale).ToString()));
            composantSousFiltre.Parametres.Add(new CComposantFiltreConstante(champDeSousFiltre.ChaineInitiale));
            composantSousFiltre.Parametres.Add(new CComposantFiltreConstante(filtreAvance.ComposantPrincipal.GetString()));

            CComposantFiltre composantRecherche = composantSousFiltre;

            if (opPrincipal != null)
            {
                opPrincipal.Parametres.Add(composantRecherche);
                composantRecherche = opPrincipal;
            }


            result.Data = composantRecherche;
            return(result);
        }
コード例 #15
0
        /// /////////////////////////////////////////////////////
        public override void CreateJoinPourLiens(
            CFiltreData filtre,
            CArbreTable arbreTables,
            CComposantFiltre composantFiltre,
            ref bool bDistinct,
            ref string strFrom,
            ref string strWhere)
        {
            strFrom  = "";
            strWhere = "";
            foreach (CArbreTableFille arbreFils in arbreTables.TablesLiees)
            {
                if (arbreFils.Relation.IsRelationFille)
                {
                    bDistinct = true;
                }

                string strNomTableFils = CContexteDonnee.GetNomTableInDbForNomTable(arbreFils.NomTable);
                strNomTableFils = GetPrefixeForTable(arbreFils.NomTable) + strNomTableFils;

                strFrom += "," + strNomTableFils + GetSqlForAliasDecl(arbreFils.Alias);

                string strSuiteFrom  = "";
                string strSuiteWhere = "";
                CreateJoinPourLiens(filtre, arbreFils, composantFiltre, ref bDistinct, ref strSuiteFrom, ref strSuiteWhere);

                if (strSuiteFrom != "")
                {
                    strFrom += strSuiteFrom;
                }
                if (strWhere.Trim() != "" && strSuiteWhere.Trim() != "")
                {
                    strWhere += " and (" + strSuiteWhere + ")";
                }
                if (strWhere.Trim() == "" && strSuiteWhere.Trim() != "")
                {
                    strWhere = strSuiteWhere;
                }

                //Equivalence WHERE ( MACOL = MACOL (+))
                CInfoRelationComposantFiltre relation = arbreFils.Relation;
                string strAliasParent, strAliasFille;
                string strSuffixeParent = "";
                string strSuffixeFils   = "";
                string strTableDependante = "";
                if (relation.IsRelationFille)
                {
                    strAliasParent     = arbreTables.Alias;
                    strAliasFille      = arbreFils.Alias;
                    strTableDependante = arbreFils.NomTable;
                    if (arbreFils.IsLeftOuter)
                    {
                        strSuffixeFils = "(+)";
                    }
                }
                else
                {
                    strAliasParent     = arbreFils.Alias;
                    strAliasFille      = arbreTables.Alias;
                    strTableDependante = arbreTables.Alias;
                    if (arbreFils.IsLeftOuter)
                    {
                        strSuffixeParent = "(+)";
                    }
                }
                string strTmp = relation.GetJoinClause(strAliasParent, strSuffixeParent, strAliasFille, strSuffixeFils);
                string strComplementVersion = "";
                if (EstCeQueLaTableGereLesVersions(strTableDependante) && !filtre.IntegrerLesElementsSupprimes)
                {
                    strComplementVersion = "(" + strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + "=0 or " +
                                           strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + " is null)";
                }
                string strIdsVersionsALire = filtre.GetStringListeIdsVersionsALire(',');
                if (EstCeQueLaTableGereLesVersions(strTableDependante))
                {
                    if (strComplementVersion != "")
                    {
                        strComplementVersion += " and ";
                    }
                    if (strIdsVersionsALire == null)
                    {
                        strComplementVersion += strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null";
                    }
                    else
                    {
                        strComplementVersion += "(" + strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " in (" + strIdsVersionsALire + ") or " +
                                                strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null)";
                    }
                }
                if (strComplementVersion != "")
                {
                    if (strTmp != "")
                    {
                        strTmp = "((" + strTmp + ") and ";
                    }
                    else
                    {
                        strAliasFille += "(";
                    }
                    strTmp += strComplementVersion + ")";
                }
                if (strWhere.Trim() != "")
                {
                    strWhere = "(" + strTmp + ") and (" + strWhere + ")";
                }
                else
                {
                    strWhere = strTmp;
                }

                if (composantFiltre != null)
                {
                    composantFiltre.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                }
            }
        }
コード例 #16
0
        //--------------------------------------------------
        protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources)
        {
            CResultAErreur result = CResultAErreur.True;
            CResultAErreurType <CColumnDeEasyQueryChampDeRequete> resCol = GetColonneIdSource();

            m_dicRowsParentes = null;
            if (!resCol)
            {
                result.EmpileErreur(resCol.Erreur);
                return(result);
            }
            IODEQTableFromFramework tableSource = this.ElementsSource[0] as IODEQTableFromFramework;

            if (tableSource != null)
            {
                result = tableSource.GetDatas(sources);
                if (!result)
                {
                    return(result);
                }

                DataTable tableParente = result.Data as DataTable;

                C2iRequeteAvancee requete = new C2iRequeteAvancee();
                requete.TableInterrogee = CContexteDonnee.GetNomTableForType(TypeElements);
                foreach (IColumnDeEasyQuery col in m_listeColonnes)
                {
                    CColumnDeEasyQueryChampDeRequete colR = col as CColumnDeEasyQueryChampDeRequete;
                    requete.ListeChamps.Add(colR);
                }
                if (requete.ListeChamps.Count == 0)
                {
                    result.Data = new DataTable();
                    return(result);
                }

                bool bRelTrouve = false;
                CComposantFiltreOperateur cpOperateur = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurIn);
                CComposantFiltre          cpFinal     = cpOperateur;

                result = FiltreDynamique.GetFiltreData();
                if (!result)
                {
                    return(result);
                }
                CFiltreDataAvance filtre = result.Data as CFiltreDataAvance;
                if (filtre == null)
                {
                    filtre = new CFiltreDataAvance(requete.TableInterrogee, "");
                }

                CDefinitionProprieteDynamiqueRelation rel = m_definitionSource as CDefinitionProprieteDynamiqueRelation;

                string strNomChampParent = null;

                //// Relation standard
                if (rel != null)
                {
                    //m_definitionSource.GetDefinitionInverse(TypeElements);
                    if (rel.Relation.TableParente == requete.TableInterrogee)
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsParent[0], requete.TableInterrogee));
                        strNomChampParent = rel.Relation.ChampsParent[0];
                    }
                    else
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsFille[0], requete.TableInterrogee));
                        strNomChampParent = rel.Relation.ChampsFille[0];
                    }

                    bRelTrouve = true;
                }
                else
                {
                    ///Relation Type id
                    CDefinitionProprieteDynamiqueRelationTypeId relTypeId = m_definitionSource as CDefinitionProprieteDynamiqueRelationTypeId;
                    if (relTypeId != null)
                    {
                        cpOperateur.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampId, requete.TableInterrogee));
                        strNomChampParent = relTypeId.Relation.ChampId;
                        cpFinal           = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                        cpFinal.Parametres.Add(cpOperateur);
                        CComposantFiltre cpType = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal);
                        cpType.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampType, requete.TableInterrogee));
                        cpType.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0")));

                        filtre.Parametres.Add(tableSource.TypeElements.ToString());
                        cpFinal.Parametres.Add(cpType);
                        bRelTrouve = true;
                    }
                }

                if (strNomChampParent != null)
                {
                    requete.ListeChamps.Add(new C2iChampDeRequete(c_nomChampParentId, new CSourceDeChampDeRequete(strNomChampParent), typeof(int), OperationsAgregation.None, false));
                }



                if (!bRelTrouve)
                {
                    result.EmpileErreur(I.T("Can not find link for table @1|20076", NomFinal));
                    return(result);
                }



                int nParametre = filtre.Parametres.Count;
                cpOperateur.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0")));
                filtre.Parametres.Add(new int[0]);

                if (filtre.ComposantPrincipal == null)
                {
                    filtre.ComposantPrincipal = cpFinal;
                }
                else
                {
                    CComposantFiltreOperateur opEt = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                    opEt.Parametres.Add(cpFinal);
                    opEt.Parametres.Add(filtre.ComposantPrincipal);
                    filtre.ComposantPrincipal = opEt;
                }

                m_dicRowsParentes = new Dictionary <object, DataRow>();
                DataTable maTable        = null;
                int       nLectureParLot = 500;
                for (int nRow = 0; nRow < tableParente.Rows.Count; nRow += nLectureParLot)
                {
                    int        nMax   = Math.Min(nRow + nLectureParLot, tableParente.Rows.Count);
                    List <int> lstIds = new List <int>();
                    for (int n = nRow; n < nMax; n++)
                    {
                        DataRow row  = tableParente.Rows[n];
                        int     nVal = (int)row[resCol.DataType.ColumnName];
                        lstIds.Add(nVal);
                        m_dicRowsParentes[nVal] = row;
                    }
                    filtre.Parametres[nParametre] = lstIds.ToArray();
                    DataTable tableTmp = null;
                    requete.FiltreAAppliquer = filtre;
                    result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession);
                    if (!result || !(result.Data is DataTable))
                    {
                        result.EmpileErreur(I.T("Error on table @1|20070", NomFinal));
                        return(result);
                    }
                    tableTmp = result.Data as DataTable;
                    if (maTable == null)
                    {
                        maTable = tableTmp;
                    }
                    else
                    {
                        maTable.Merge(tableTmp);
                    }
                }
                if (maTable == null)
                {
                    maTable = new DataTable(NomFinal);
                    foreach (IColumnDeEasyQuery colEQ in ColonnesOrCalculees)
                    {
                        DataColumn col = new DataColumn(colEQ.ColumnName, colEQ.DataType);
                        try
                        {
                            maTable.Columns.Add(col);
                        }
                        catch { }
                    }
                    DataColumn colParent = new DataColumn(c_nomChampParentId, typeof(int));
                    try
                    {
                        maTable.Columns.Add(colParent);
                    }
                    catch { }
                }
                else
                {
                    //Ajoute les colonnes from parent
                    Dictionary <CColumnEQFromSource, string> dicColFromSourceToNom = new Dictionary <CColumnEQFromSource, string>();
                    foreach (CColumnEQFromSource colFromSource in m_listeColonnesFromParent)
                    {
                        if (!maTable.Columns.Contains(colFromSource.ColumnName))
                        {
                            maTable.Columns.Add(colFromSource.ColumnName, colFromSource.DataType);
                        }
                        IColumnDeEasyQuery colSource = tableSource.Columns.FirstOrDefault(c => c.Id == colFromSource.IdColumnSource);
                        if (colSource != null && tableParente.Columns.Contains(colSource.ColumnName))
                        {
                            dicColFromSourceToNom[colFromSource] = colSource.ColumnName;
                        }
                    }
                    if (maTable.Columns.Contains(c_nomChampParentId))
                    {
                        foreach (DataRow row in maTable.Rows)
                        {
                            if (row[c_nomChampParentId] is int)
                            {
                                DataRow rowParente = null;
                                if (m_dicRowsParentes.TryGetValue((int)row[c_nomChampParentId], out rowParente))
                                {
                                    if (rowParente != null)
                                    {
                                        foreach (KeyValuePair <CColumnEQFromSource, string> kv in dicColFromSourceToNom)
                                        {
                                            row[kv.Key.ColumnName] = rowParente[kv.Value];
                                        }
                                    }
                                }
                            }
                        }
                        maTable.Columns.Remove(c_nomChampParentId);
                    }
                }
                result.Data = maTable;
            }
            return(result);
        }
コード例 #17
0
 public CFiltreDataAvance(string strTablePrincipale, CComposantFiltre composantPrincipal, params object[] parametres)
     : base(composantPrincipal != null ? composantPrincipal.GetString() : "", parametres)
 {
     m_composantPrincipal = composantPrincipal;
     m_strTablePrincipale = strTablePrincipale;
 }
コード例 #18
0
        /////////////////////////////////////////////////////////////////////////////////////
        public override void CreateJoinPourLiens(
            CFiltreData filtre,
            CArbreTable arbreTables,
            CComposantFiltre composantFiltre,
            ref bool bDistinct,
            ref string strJoin,
            ref string strWhere,
            ref string strPrefixeFrom)
        {
            strJoin = "";
            arbreTables.SortTablesLiees();
            foreach (CArbreTableFille arbreFils in arbreTables.TablesLiees)
            {
                strPrefixeFrom += "(";
                if (arbreFils.IsLeftOuter)
                {
                    strJoin += " LEFT OUTER JOIN ";
                }
                else
                {
                    strJoin += " INNER JOIN ";
                }
                if (arbreFils.Relation.IsRelationFille)
                {
                    bDistinct = true;
                }
                string strTable;
                strTable = CContexteDonnee.GetNomTableInDbForNomTable(arbreFils.NomTable) +
                           GetSqlForAliasDecl(arbreFils.Alias);
                string strSuiteFrom  = "";
                string strSuiteWhere = "";
                string strPrefixe    = "";
                CreateJoinPourLiens(filtre, arbreFils, composantFiltre, ref bDistinct, ref strSuiteFrom, ref strSuiteWhere, ref strPrefixe);
                strJoin += strPrefixe;
                if (strSuiteFrom.Trim() != "")
                {
                    strTable = "(" + strTable;
                }
                strTable += strSuiteFrom;
                if (strSuiteFrom.Trim() != "")
                {
                    strTable += ")";
                }
                strJoin += strTable;
                strJoin += " ON (";
                CInfoRelationComposantFiltre relation = arbreFils.Relation;
                string strAliasParent, strAliasFille;
                string strTableDependante = "";
                if (relation.IsRelationFille)
                {
                    strAliasParent     = arbreTables.Alias;
                    strAliasFille      = arbreFils.Alias;
                    strTableDependante = arbreFils.NomTable;
                }
                else
                {
                    strAliasParent     = arbreFils.Alias;
                    strAliasFille      = arbreTables.Alias;
                    strTableDependante = arbreTables.NomTable;
                }
                string strJointure = relation.GetJoinClause(strAliasParent, "", strAliasFille, "");

                string strComplementVersion = "";
                if (EstCeQueLaTableGereLesVersions(strTableDependante) && !filtre.IntegrerLesElementsSupprimes)
                {
                    strComplementVersion = "(" + strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + "=0 or " +
                                           strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + " is null)";
                }
                string strIdsVersionsALire = filtre.GetStringListeIdsVersionsALire(',');
                if (EstCeQueLaTableGereLesVersions(strTableDependante))
                {
                    if (strComplementVersion != "")
                    {
                        strComplementVersion += " and ";
                    }
                    if (strIdsVersionsALire == null)
                    {
                        strComplementVersion += strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null";
                    }
                    else
                    {
                        strComplementVersion += "(" + strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " in (" + strIdsVersionsALire + ") or " +
                                                strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null)";
                    }
                }
                if (strComplementVersion != "")
                {
                    if (strWhere != "")
                    {
                        strWhere += " and (" + strComplementVersion + ") and (";
                    }
                    else
                    {
                        strWhere += "(";
                    }
                    strWhere += strComplementVersion + ")";
                }
                strJoin += strJointure + "))";
                if (composantFiltre != null)
                {
                    composantFiltre.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                }
                if (filtre is CFiltreDataAvance)
                {
                    foreach (CComposantFiltreChamp champ in ((CFiltreDataAvance)filtre).ChampsAAjouterAArbreTable)
                    {
                        champ.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                    }
                }
            }
        }
コード例 #19
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() == "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);
        }
コード例 #20
0
        /*///////////////////////////////////////////////////
         * public void AddAndFiltre ( CFiltreData filtre )
         * {
         *      if ( filtre == null || !filtre.HasFiltre )
         *              return;
         *      if ( m_strFiltre.Trim() != "" )
         *              m_strFiltre = "("+m_strFiltre+") and ";
         *      string strNewFiltre = filtre.Filtre+" ";
         *      int nNumNewParam = Parametres.Count +1;
         *      for ( int nParam = 0; nParam < filtre.Parametres.Count; nParam++ )
         *      {
         *              strNewFiltre = strNewFiltre.Replace("@"+(nParam+1).ToString()+" ", "@"+nNumNewParam.ToString()+" ");
         *              Parametres.Add ( filtre.Parametres[nParam] );
         *              nNumNewParam++;
         *      }
         *      m_strFiltre += strNewFiltre;
         * }*/

        ///////////////////////////////////////////////////
        protected static CFiltreData CombineFiltres(CFiltreData filtre1, CFiltreData filtre2, string strOperateur)
        {
            if ((filtre1 == null || !filtre1.HasFiltre) && (filtre2 == null || !filtre2.HasFiltre))
            {
                return(null);
            }
            if (filtre1 == null || !filtre1.HasFiltre)
            {
                return(filtre2.GetClone());
            }
            if (filtre2 == null || !filtre2.HasFiltre)
            {
                return(filtre1.GetClone());
            }
            if (filtre1 is CFiltreDataImpossible || filtre2 is CFiltreDataImpossible)
            {
                return(new CFiltreDataImpossible());
            }
            CFiltreData filtreResult = null;

            if (filtre1 is CFiltreDataAvance || filtre2 is CFiltreDataAvance)
            {
                string strTable;
                if (filtre1 is CFiltreDataAvance)
                {
                    strTable = ((CFiltreDataAvance)filtre1).TablePrincipale;
                    if (filtre2 is CFiltreDataAvance &&
                        ((CFiltreDataAvance)filtre2).TablePrincipale != strTable)
                    {
                        throw new Exception(I.T("Cannot combine @1 filter on different tables|133", strOperateur));
                    }
                }
                else
                {
                    strTable = ((CFiltreDataAvance)filtre2).TablePrincipale;
                }


                filtreResult = new CFiltreDataAvance(strTable, "");


                if (!(filtre1 is CFiltreDataAvance))
                {
                    filtre1 = CFiltreDataAvance.ConvertFiltreToFiltreAvance(strTable, filtre1);
                }
                if (!(filtre2 is CFiltreDataAvance))
                {
                    filtre2 = CFiltreDataAvance.ConvertFiltreToFiltreAvance(strTable, filtre2);
                }


                CResultAErreur    result        = CResultAErreur.True;
                CFiltreDataAvance filtre1Avance = filtre1 as CFiltreDataAvance;
                CComposantFiltre  composant1    = filtre1Avance.ComposantPrincipal;
                if (composant1 == null)
                {
                    result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(filtre1.Filtre, strTable);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error while analyzing filter @1|134", filtre1.Filtre));
                        throw new CExceptionErreur(result.Erreur);
                    }
                    composant1 = result.Data as CComposantFiltre;
                }

                CFiltreDataAvance copie = filtre2.GetClone() as CFiltreDataAvance;
                copie.RenumerotteParameters(filtre1.Parametres.Count + 1);

                CComposantFiltre composant2 = copie.ComposantPrincipal;
                if (composant2 == null)
                {
                    result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(copie.Filtre, strTable);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error while analyzing filter @1|134", copie.Filtre));
                        throw new CExceptionErreur(result.Erreur);
                    }
                    composant2 = result.Data as CComposantFiltre;
                }
                CComposantFiltre composantPrincipal = null;
                if (strOperateur.ToUpper() == "OR")
                {
                    composantPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurOu);
                }
                if (strOperateur.ToUpper() == "AND")
                {
                    composantPrincipal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt);
                }
                if (composantPrincipal != null)
                {
                    composantPrincipal.Parametres.Add(composant1);
                    composantPrincipal.Parametres.Add(composant2);
                    filtreResult = new CFiltreDataAvance(strTable, composantPrincipal);
                }
                else
                {
                    filtreResult.Filtre = "(" + composant1.GetString() + ") " + strOperateur + " (" +
                                          composant2.GetString() + ")";
                }
            }
            else
            {
                filtreResult        = new CFiltreData();
                filtreResult.Filtre = "(" + filtre1.Filtre + ")";
                CFiltreData copie = filtre2.GetClone();
                copie.RenumerotteParameters(filtre1.Parametres.Count + 1);
                filtreResult.Filtre += " " + strOperateur + " (" + copie.Filtre + ")";
            }
            foreach (object parametre in filtre1.Parametres)
            {
                filtreResult.Parametres.Add(parametre);
            }
            foreach (object parametre in filtre2.Parametres)
            {
                filtreResult.Parametres.Add(parametre);
            }


            if (filtre1 != null && filtre1.SortOrder != "")
            {
                filtreResult.SortOrder = filtre1.SortOrder;
            }
            if (filtre2 != null && filtre2.SortOrder != "")
            {
                if (filtreResult.SortOrder != "")
                {
                    filtreResult.SortOrder += ",";
                }
                filtreResult.SortOrder += filtre2.SortOrder;
            }

            if (filtre1 != null)
            {
                filtreResult.IntegrerLesElementsSupprimes |= filtre1.IntegrerLesElementsSupprimes;
                filtreResult.IgnorerVersionDeContexte     |= filtre1.IgnorerVersionDeContexte;
                filtreResult.IdsDeVersionsALire            = filtre1.IdsDeVersionsALire;
                filtreResult.IntergerParentsHierarchiques |= filtre1.IntergerParentsHierarchiques;
                filtreResult.IntegrerFilsHierarchiques    |= filtre1.IntegrerFilsHierarchiques;
                filtreResult.NeConserverQueLesRacines     |= filtre1.NeConserverQueLesRacines;
            }

            if (filtre2 != null)
            {
                filtreResult.IntegrerLesElementsSupprimes |= filtre2.IntegrerLesElementsSupprimes;
                filtreResult.IgnorerVersionDeContexte     |= filtre2.IgnorerVersionDeContexte;
                filtreResult.IntergerParentsHierarchiques |= filtre2.IntergerParentsHierarchiques;
                filtreResult.IntegrerFilsHierarchiques    |= filtre2.IntegrerFilsHierarchiques;
                filtreResult.NeConserverQueLesRacines     |= filtre2.NeConserverQueLesRacines;
                if (filtre2.IdsDeVersionsALire != null)
                {
                    if (filtreResult.IdsDeVersionsALire != null)
                    {
                        Hashtable tblIds = new Hashtable();
                        foreach (int nId in filtreResult.IdsDeVersionsALire)
                        {
                            tblIds[nId] = true;
                        }
                        foreach (int nId in filtre2.IdsDeVersionsALire)
                        {
                            tblIds[nId] = true;
                        }
                        ArrayList lst = new ArrayList();
                        foreach (int nId in tblIds.Keys)
                        {
                            lst.Add(nId);
                        }
                        filtreResult.IdsDeVersionsALire = (int[])lst.ToArray(typeof(int));
                    }
                    else
                    {
                        filtreResult.IdsDeVersionsALire = filtre2.IdsDeVersionsALire;
                    }
                }
            }

            return(filtreResult);
        }
コード例 #21
0
        /// /////////////////////////////////////////////
        ///Le data du result contient le filtre
        public CResultAErreur GetFiltreData(  )
        {
            CResultAErreur result = CResultAErreur.True;

            if (ComposantPrincipal == null)
            {
                result.Data = null;
                return(result);
            }
            if (m_typeElementsFiltres == null)
            {
                result.EmpileErreur(I.T("The type of filter elements isn't valid|174"));
                return(result);
            }
            string strTable = CContexteDonnee.GetNomTableForType(m_typeElementsFiltres);

            if (strTable == "")
            {
                result.EmpileErreur(I.T("No table is associated with @1|175", DynamicClassAttribute.GetNomConvivial(m_typeElementsFiltres)));
                return(result);
            }

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(this);
            CFiltreDataAvance             filtre  = new CFiltreDataAvance(strTable, "");

            if (FormuleIntegrerParentsHierarchiques != null)
            {
                result = FormuleIntegrerParentsHierarchiques.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.IntergerParentsHierarchiques = true;
                }
                else
                {
                    filtre.IntergerParentsHierarchiques = false;
                }
            }
            if (FormuleIntegrerFilsHierarchiques != null)
            {
                result = FormuleIntegrerFilsHierarchiques.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.IntegrerFilsHierarchiques = true;
                }
                else
                {
                    filtre.IntegrerFilsHierarchiques = false;
                }
            }
            if (FormuleNeConserverQueLesRacines != null)
            {
                result = FormuleNeConserverQueLesRacines.Eval(ctxEval);
                if (result && result.Data is bool && (bool)result.Data)
                {
                    filtre.NeConserverQueLesRacines = true;
                }
                else
                {
                    filtre.NeConserverQueLesRacines = false;
                }
            }
            result = CResultAErreur.True;

            result = m_composantFiltre.GetComposantFiltreData(this, filtre);
            if (!result)
            {
                result.Data = null;
                result.EmpileErreur(I.T("Error in filter|176"));
                return(result);
            }
            CComposantFiltre composant = (CComposantFiltre)result.Data;

            if (composant == null)
            {
                filtre.Filtre = "1=1";
            }
            else
            {
                filtre.ComposantPrincipal = composant;
            }
            result.Data = filtre;
            return(result);
        }
コード例 #22
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);
        }
コード例 #23
0
        /// //////////////////////////////////////////
        public override CResultAErreur MyEval(CContexteEvaluationExpression ctx, object[] listeParametres)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                string strVal = listeParametres[0].ToString();
                Type   tp     = listeParametres[0] as Type;
                if (tp == null)
                {
                    tp = CActivatorSurChaine.GetType(strVal, true);
                }
                if (tp == null)
                {
                    tp = CActivatorSurChaine.GetType(strVal, false);
                }
                if (tp == null)
                {
                    result.EmpileErreur(I.T("The @1 type does not exist|221", strVal));
                    return(result);
                }
                string strTable = CContexteDonnee.GetNomTableForType(tp);
                if (strTable == null)
                {
                    result.EmpileErreur(I.T("The @1 type is not associated with a table|225", strVal));
                    return(result);
                }
                CFiltreDataAvance filtreAvance = new CFiltreDataAvance(strTable, listeParametres[1].ToString());
                for (int n = 2; n < listeParametres.Length; n++)
                {
                    filtreAvance.Parametres.Add(listeParametres[n]);
                }
                CComposantFiltre c = filtreAvance.ComposantPrincipal;

                CContexteDonnee contexteDonnee = null;
                if (ctx.ObjetSource is IObjetAContexteDonnee)
                {
                    contexteDonnee = ((IObjetAContexteDonnee)ctx.ObjetSource).ContexteDonnee;
                }
                if (contexteDonnee == null)
                {
                    contexteDonnee = (CContexteDonnee)ctx.GetObjetAttache(typeof(CContexteDonnee));
                }
                if (contexteDonnee == null)
                {
                    contexteDonnee = new CContexteDonnee(CSessionClient.GetSessionUnique().IdSession, true, false);
                    ctx.AttacheObjet(typeof(CContexteDonnee), contexteDonnee);
                }
                CFiltreData filtre = null;
                if (filtreAvance.HasFiltre)
                {
                    filtre = filtreAvance;
                }
                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteDonnee, tp, filtre);
                result.Data = liste;
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }

            return(result);
        }