Ignorer les accents dans la recherche

Hello,

Je reviens sur ce poste pour valider un code qui j’ai mis dans le search-spec.

Comme vous l’avez mentionné, je sais que ce n’est pas la bonne solution mais on aimerait évaluer le deux solutions proposées dans ce poste.

Je me suis inspiré de ce poste pour faire le code suivant :

Cette solution marche très bien mais j’aimerais le valider

voici le code

public void preSearch(){
	
	try{
		if (isMainInstance() && getGrant().getDBVendor("jdbc/simplicite") == Globals.DB_POSTGRESQL) {	 
			
			ObjectField ln = getField("DomsecoBoHabitantNomOfficiel");
			ObjectField fn = getField("DomsecoBoHabitantPrenomOfficiel");
			
			/* La première fois que le Hook preseach() est appelé */
			if(ln.isFiltered() && fn.isFiltered()){
				
				nomFiltre = ln.getFilter().trim();
				prenomFiltre = fn.getFilter().trim();
				
				String s1 = "lower_unaccent(t.hab_nom_officiel) = lower_unaccent( '" +  nomFiltre + "')" ;
				String s2 = " and ";
				String s3 = "lower_unaccent(t.hab_prenom_officiel) = lower_unaccent( '" +  prenomFiltre + "')" ;
				
				this.setSearchSpec(s1 + s2 + s3 ); 
				
				/*Si on fait une recherche par un nom et un prénom qui contiennent des accents,
				ils restent comme des filtres dans la liste.
				Donc, je le vide.
				*/
				ln.setFilter("%");
				fn.setFilter("%");
			}
			else if (ln.isFiltered() && !fn.isFiltered()){
				nomFiltre = ln.getFilter().trim();
				ln.setFilter("");
				this.setSearchSpec("lower_unaccent(t.hab_nom_officiel) =  lower_unaccent( '" +  nomFiltre + "')  ");
			}
			else if(!ln.isFiltered() && fn.isFiltered()){
				prenomFiltre = fn.getFilter().trim();
				fn.setFilter("");
				this.setSearchSpec("lower_unaccent(t.hab_prenom_officiel) = lower_unaccent( '" +  prenomFiltre + "')" );
			}
			else{
				this.setSearchSpec("1=1"); 
			}
			
			/* La deuxième fois que le Hook preseach() est appelé */
			if(nomFiltre.length()>0 && prenomFiltre.length()>0){
				String s1 = "lower_unaccent(t.hab_nom_officiel) = lower_unaccent( '" +  nomFiltre + "')" ;
				String s2 = " and ";
				String s3 = "lower_unaccent(t.hab_prenom_officiel) = lower_unaccent( '" +  prenomFiltre + "')" ;
				
				this.setSearchSpec(s1 + s2 + s3 ); 
			}
			else if (nomFiltre.length()>0){
				
				this.setSearchSpec("lower_unaccent(t.hab_nom_officiel) = lower_unaccent( '" +  nomFiltre + "')");
				
			}
			else if (prenomFiltre.length()>0){
				
				this.setSearchSpec("lower_unaccent(t.hab_prenom_officiel) = lower_unaccent( '" +  prenomFiltre + "')" );
			}else{
				
				this.setSearchSpec("1=1"); 
			}
		}
	}
	catch(Exception e){
		AppLog.error(getClass(), "preSearch", "Erreur" ,e, getGrant());
	}
}

et dans le postSearch()

public List<String[]> postSearch(List<String[]> rows){
	
	if(nomFiltre.length()>0){
		getField("DomsecoBoHabitantNomOfficiel").setFilter(nomFiltre);
		nomFiltre="";
	}
	
	if(prenomFiltre.length()>0){
		getField("DomsecoBoHabitantPrenomOfficiel").setFilter(prenomFiltre);
		prenomFiltre="";
	} 
	
	return rows
}

Je vous remercie d’avance.

1 Like