/// //////////////////////////////////////////////////////////////// public static CFiltreDataAvance ConvertFiltreToFiltreAvance(string strTable, CFiltreData filtre) { if (filtre is CFiltreDataAvance) { return((CFiltreDataAvance)filtre.GetClone()); } string strFiltre = filtre.Filtre; if (!filtre.HasFiltre) { return(new CFiltreDataAvance(strTable, "")); } //Remplace is null et is not null par has et hasno string strUpper = strFiltre.ToUpper(); if (strUpper.Contains("IS NULL") || strUpper.Contains("IS NOT NULL")) { Regex expReg = new Regex("[( ]*(?<P1>[^ ]+)[) ]*(?<OP>is null|is not null)", RegexOptions.IgnoreCase); strFiltre = expReg.Replace(strFiltre, new MatchEvaluator(RemplaceIsNullForAvance)); } CResultAErreur result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(strFiltre, strTable); if (!result) { result.EmpileErreur(I.T("Error while analyzing filter @1|134", strFiltre)); throw new CExceptionErreur(result.Erreur); } CFiltreDataAvance retour = new CFiltreDataAvance(strTable, (CComposantFiltre)result.Data); foreach (object parametre in filtre.Parametres) { retour.Parametres.Add(parametre); } return(retour); }
/// //////////////////////////////////////////////////////////////// protected CResultAErreur CalculeComposantPrincipal() { m_composantPrincipal = null; CResultAErreur result = CAnalyseurSyntaxiqueFiltre.AnalyseFormule(Filtre, m_strTablePrincipale); if (!result) { return(result); } m_composantPrincipal = (CComposantFiltre)result.Data; return(result); }
/*/////////////////////////////////////////////////// * 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); }