Extension Recherche Simple Webtop

De EjnTricks

Sur l'interface Webtop, une zone de saisie permet de réaliser une recherche simple, dite rapide. Par défaut celle ci effectue une recherche plein texte avec la valeur saisie par l'utilisateur. Dans le cas ou le moteur de recherche plein texte n'est pas activé, cette recherche est effectuée, avec l'opérateur OU, sur les attributs:

  • object_name
  • title
  • subject

L'objectif de cette extension est de rajouter un filtre pour ne retourner que les objets dont l'attribut description contient la valeur Recover.

Les extraits de code respectent les bonnes pratiques présentées sur la page Bonnes_Pratiques_Webtop.

Hand-icon.png Votre avis

Current user rating: 93/100 (1 votes)

 You need to enable JavaScript to vote


Version 5.3 SP2

L'exécution de la recherche simple a été identifiée dans le composant search définit par le fichier XML webtop/config/searchex_component.xml. Seule la classe d'instance doit être modifiée pour implémenter cette modification.

XML format icon.png Fichier XML

L'extension est donc définie à l'emplacement custom/config/webtop/searchex_component.xml afin de spécifier une nouvelle classe d'instance:

Java format icon.png Classe d'instance

Après analyse du code standard, la méthode identifiée pour la construction de la requête est buildQueryFromKeywords(String keywords). La modification apportée permet de:

  • Exécuter le code standard pour construire la définition de la recherche.
  • Récupérer la définition de la recherche et ajouter un filtre.

Study icon.png Analyse

Ce code, aussi simple soit-il, nécessite une certaine analyse afin de trouver le point d'entrée permettant d'atteindre l'objectif. Ce paragraphe résume les différentes étapes afin d'identifier le point d'entrée.

Webtop Component Icon.png Composant titlebar

La recherche simple est affichée au niveau de la barre de titre de Webtop. Il faut donc regarder ce composant afin de comprendre comment cette recherche est exécutée.

XML format icon.png La définition XML de titlebar se trouve à l'emplacement webtop/config/titlebar_component.xml, permettant de trouver la page JSP.


XML format icon.png Au sein de cette page, la fonction Javascript onClickSearch est appelé en cliquant sur le bouton "GO". Celle ci appelle le composant search avec le contenu de la zone de saisie identifiée par txtSearch pour l'argument query.

Webtop Component Icon.png Composant search

La définition de ce composant se situe dans le fichier webtop\config\searchex_component.xml, où seule la classe d'instance est spécifiée. C'est également une extension du composant défini dans la couche webcomponent à l'emplacement webcomponent/config/library/search/searchex/search_component.xml.

Java format icon.png Le contenu de la classe com.documentum.webtop.webcomponent.search.SearchEx est assez minimaliste. Il permet juste de définir la page jsp à afficher en fonction du contexte de l'utilisateur.

Il faut donc regarder dans la classe parente. La première analyse conduit à la méthode onInit

Il semblerait que la fonction initSearch(ArgumentList args) soit intéressante, mais elle n'est appelée que si la fonction delegateDqlSearch(ArgumentList args) retourne false.

Celle ci retourne vrai que dans le cas où:

  • Argument queryType est non null.
  • Et argument queryType n'est pas string
  • Et argument queryType n'est pas objectId
  • Et argument queryType n'est pas queryDef
  • Et argument queryType n'est pas queryId

Or celui ci n'est pas spécifié lors de l'appel depuis la barre de titre. Donc sa valeur est nulle, entraînant le retour de la valeur false, entraînant l'exécution de la méthode initSearch(ArgumentList args).

Lors de l'exécution de cette méthode, il y a un appel sur la méthode buildQuery(ArgumentList args) qui va construire la définition de cette requête en fonction des arguments d'appel au composant:

Pour rappel, le seul argument envoyé au composant est query avec la valeur saisie par l'utilisateur. Donc la variable strQueryType sera nulle, entraînant l'appel à la méthode buildQueryFromKeywords(String strKeywords).

Une instance de IDfQueryBuilder est initialisé en y ajoutant un filtre de type "recherche plein texte". C'est cette instance qui porte la définition de la recherche à exécuter. La méthode étant "protected", il est possible de la surcharger pour y apporter un nouveau comportement. Ce qui permet de réaliser l'objectif de l'article, à savoir rajouter un filtre dans la définition de la recherche.