/*/////////////////////////////////////////////////// * 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); }
public CFiltreDataAvance(string strTablePrincipale, CComposantFiltre composantPrincipal, params object[] parametres) : base(composantPrincipal != null ? composantPrincipal.GetString() : "", parametres) { m_composantPrincipal = composantPrincipal; m_strTablePrincipale = strTablePrincipale; }