Surcharge de preSearchIndex dans PlatformHooks

Request description

Bonjour,

J’essaie de surcharger preSearchIndex dans PlatformHooks mais j’ai l’erreur suivante

Class compilation error (status 1)
/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/RCIB/PlatformHooks.java:190: error: method does not override or implement a method from a supertype
	@Override
	^
1 error
#ERROR

Je souhaite utiliser ce hook pour filtrer des résultats dans la recherche globale uniquement.
J’ai tenté d’utiliser le Contexte mais en recherche globale le Contexte ne semble pas mis à jour et prend la valeur de la dernière instance de l’objet affichée.

Y a-t-il un autre moyen d’identifier si on est dans la recherche globale ou non ?

Merci d’avance
Emmanuelle

[Platform]
Status=OK
Version=5.3.51
BuiltOn=2024-10-07 16:56

Bonjour,

La signature de la méthode ne doit pas être la bonne si l’Override est en erreur.
Quel est le code en question ?

Pour une recherche globale à priori le contexte est forcé à ObjectDB.CONTEXT_NONE.

Bonjour et merci de ton retour rapide as usual,

Voici la méthode que j’ai utilisée avec CTRL+espace

	@Override
	public String preSearchIndex(Grant g, String search, List<String> objects, int context, ObjectDB parent) {
		
		return search;
	}

Je constate effectivement qu’il manque un paramètre par rapport à la JAVADOC, désolée !

Concernant le contexte, je constate que la recherche globale renvoie des résultats différents selon l’instance que j’ai utilisée avant car j’ai tenté de filtrer sur le contexte dans le preSearch. Si j’ai affiché un Form, j’ai 5 ; si j’ai affiché une liste en dernier, j’ai 2.

J’ai aussi une autre question sur ce sujet, surcharger le postSearchIndex influe-t-il sur le contenu de m_index ? Car j’ai l’impression que les lignes supprimées de rows ne sont pas dans la table.

	@Override
	public List<SearchItem> postSearchIndex(Grant g, List<SearchItem> rows, List<String> objects, int context, ObjectDB parent) {
		
		for (int i = 0 ; i < rows.size() ; i++)
		{
			SearchItem row = rows.get(i);
			
		//	AppLog.info("postSearchIndex object " + row.getObject() + " ddata " + row.getData() + " values " + row.values.get(0), g);
			
			if (row.getObject().equals("RciApplication") && row.getData().substring(0, 3).contains("1"))
			{
				rows.remove(i);
								//AppLog.info("Remove " + i + " size " + rows.size(), g);

			}
		}
		return rows;
	}

Ok le code snippet du ace-editor ne doit pas être le bon, on va regarder.

public String preSearchIndex​(Grant g, String search, List<String> objects, int context, ObjectDB parent, Map<String, String> filters)

Les hooks n’influencent pas le contenu de la table. Par contre ton indexation est peut être incomplète (par exemple suite à des imports en masse), il faut faire un rebuild complet depuis la liste des index.

Tu peux aussi regarder ce que vaut List<String> objects pour savoir si la recherche se limite à 1 ou N objets métiers (null=tous ou ceux cochés dans l’écran de recherche).

Ensuite si les BD sont différentes entre instances, le résultat ne sera pas identique, par exemple sur hsql il n’y pas d’index fulltext, donc c’est un simple “like” en base, pour les autres Simplicité utilise des recherches fulltext native (@@, match…).

Et sinon attention, faire un remove sur le tabeau du for…
il doit manquer un i-- après le remove !

Oui c’est du mauvais code, j’ai remplacé par une seconde liste :slight_smile:

Par contre j’ai un setFilter dans le preSearch qui semble s’appliquer au build des indexes, c’est possible ?

L’indexation fait une recherche des objets via les couches logiques pour en extraire les contenus indexables, donc ça passe par les hooks des objets.

Il faut inhiber vos règles de gestion dans ce cas, tout comme vous le feriez dans le cas d’un import de données ou un traitement de masse. C’est la même instance qui bosse pour l’indexation :

si isBatchInstance() ne rien faire.

1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.