コード例 #1
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);
        }
コード例 #2
0
 public CFiltreDataAvance(string strTablePrincipale, CComposantFiltre composantPrincipal, params object[] parametres)
     : base(composantPrincipal != null ? composantPrincipal.GetString() : "", parametres)
 {
     m_composantPrincipal = composantPrincipal;
     m_strTablePrincipale = strTablePrincipale;
 }