Partie 1: Fonctionnement du Refinement Panel dans SharePoint 2010

Partie 1: Fonctionnement du Refinement Panel dans SharePoint 2010


Cet article fait partie d’une série de quatre articles traitant de la traduction des filtres de raffinement dans le composants « Refinement Panel » de Sharepoint 2010.


Contexte

Dans SharePoint 2010, un nouveau composant WebPart nommé « Refinement Panel » est disponible pour le search center. Ce composant ,très pratique, permet d’extraire automatiquement les métadonnées des documents présents dans les résultats de la recherche et d’en faire des filtres de recherche cumulables. Intéressant non?

Refinement panel

Certains d’entre vous qui ont eu l’occasion de travailler avec le search center de SharePoint 2010 et notamment ce composant ont du rencontrer un problème assez déroutant lorsqu’ils ont eu à ajouter leur propres filtres et que leur site était multilingue.

En effet,  il est tout à fait possible d’ajouter vos propres filtres à ce composant en modifiant le XML de configuration du WebPart. Cependant pour personnaliser les filtres, vous devez décochez une option qui se nomme « Use default configuration« . A partir du moment où vous décochez cette option, oubliez la traduction de vos filtres, mêmes ceux natifs SharePoint !

Option du composant Web Part

Cela peut s’avérer assez embêtant si vous travaillez sur un site multilingue et que vous avez besoin de créer vos propres filtres de recherches dans ce panneau.

Perte de la traduction lorsque l'on personnalise le composant

Ayant moi même du me confronter à cette dure réalité, je vous propose de vous partager quelques solutions pour remédier à ce problème à travers une série d’articles consacrés à ce sujet:

Cette première partie aura pour but de présenter rapidement le fonctionnement de la génération de filtres et les moyens de contournements possibles pour les traduire.

Fonctionnement du Refinement Panel

Tout d’abord, pour en savoir un peu plus sur ce composant, je vous conseille fortement de lire ce blog qui est l’un des seuls que l’on peut trouver sur le sujet en ce moment:

http://www.chaholl.com/archive/2010/08/20/creating-a-custom-refinement-filter-generator.aspx

Maintenant, voici la définition d’une catégorie, c’est à dire un regroupement de filtres, dans le XML de configuration du WebPart:

Ce qu’il faut retenir ici, c’est l’attribut « Type ». C’est bien cet attibut qui indique la classe de générateur de filtres à utiliser pour afficher les filtres dans le panneau de rafinement. Par défaut, il en existe 2:

  • ManagedPropertyFilterGenerator: Pour les métadonnées natives de SharePoint (Type de résultats, Auteur, Date de modification, etc..) basées sur une managed property de recherche. C’est ce type que vous utiliserez pour ajouter par exemple une de vos colonne SharePoint (en créant au préalable une managed property dans l’application de service de recherche).
  • TaxonomyFilterGenerator: Pour les métadonnées gérées. Ce filtre est capable automatiquement d’extraire les métadonnées gérées liées à vos documents et les afficher dans le panneau de filtres.

Dans chacun des cas, les filtres affichés ne tiennent pas comtpe de la langue du site. Pour remédier à cela, nous pouvons dériver ces deux classes pour modifier la génération des filtres. Pour tous les types de filtres La méthode permettant générer les filtres dans le panneau de raffinement est  GetRefinement(). A noter qu’on ne touche pas à la classe du WebPart du Refinement Panel en tant que tel, mais bien aux classes qui sont en charge de la génération des filtres, ce qui signifie que vous pouvez créer autant de générateurs que vous le souhaitez.

Cette méthode prend en entrée les filtres « bruts » extraits des résultats de recherche (refinedData) et renvoie la liste ceux-ci sous format XML (filterXml), qui sera ensuite mis en forme par le XSL du composant. Le paramètre maxFilterCats est le nombre de filtres à afficher par catégorie.  Voici un exemple de sortie pour cette méthode:

Les valeurs qui nous intéressent ici sont « Value » et « Tooltip« :

Pour modifier les filtres et leur appliquer la bonne traduction, il y’ a donc deux solutions:

  • Modifier les données dans le dictionnaire refinedData avant qu’elles soient transofrmées en XML
  • Modifier les données dans le XML généré avant de le retourner

Dans le prochain article, je détaillerai comment constuire un générateur de filtres pour les métadonnées gérées.


+ There are no comments

Add yours