Preset refinements when calling a SharePoint 2013 search results page

In a recent SharePoint 2013 publishing portal project for a customer, we had to use a content query web part to display news on an intranet portal. The news elements are all of the same content type which contains a taxonomy field used to specify the type of news. In the CQWP, the news are grouped by type and the customer wanted a link with «View all the XYZ news» for each group. Considering the many requirements, the way we did it was to link to a search page and to preset the refinement web part to automatically filter on the type of news.

The query string syntax for the refinement is a bit weird since it’s actually a JSON request that is URL encoded but once decoded it looks like this:

/Pages/results.aspx?k=YOUR_SEARCH_TERM#Default={"k":"YOUR_SEARCH_TERM","r":[{"n":"MANAGED_PROPERTY_NAME","t":["string(\"#GUID_FOR_THE_TERM_VALUE\")"],"o":"and","k":false,"m":null}]}

To use this solution, it means we have to get the term’s GUID for each type of news inside the CQWP’s XSLT. The main problem is that the taxonomy field only returns the name of the term, not its GUID.

We could have hardcoded the GUIDs but since our development process include deployment across many development environments, that wasn’t really doable (MMS term’s GUID are generated by SharePoint i.e. different for each environment). After a bit of thinking and searching, what we ended up doing was to access the hidden note field associated with every taxonomy field (something along the lines of «TaxonomyFieldName_0»). When called in a CQWP, the hidden field returns a string in the «term value|term GUID» format. Once we found that out, a simple string manipulation, URL encoding and some basic XSLT gave us the result we wanted. The result is something along the lines of:

<xsl:variable name="newsTypeGuid">
	<xsl:value-of select="substring-after(@TaxonomyFieldName_0,'|')" />
</xsl:variable>

<xsl:variable name="newsTypeUrl">
	<xsl:value-of select="concat('/Pages/results.aspx?k=%2A_YOUR_SEARCH_TERM_#Default=%7B%22k%22%3A%22_YOUR_SEARCH_TERM_%22%2C%22r%22%3A%5B%7B%22n%22%3A%22_MANAGED_PROPERTY_NAME_%22%2C%22t%22%3A%5B%22string(%5C%22%23', $newsTypeGuid, '%5C%22)%22%5D%2C%22o%22%3A%22and%22%2C%22k%22%3Afalse%2C%22m%22%3Anull%7D%5D%7D%0A')" disable-output-escaping='yes'/>
</xsl:variable>

<a href="{$newsTypeUrl}"><xsl:value-of select="@TaxonomyFieldName" /></a>

I really hope it helps / saves some time to someone!

 

* Il est assez rare que je publie des articles en anglais. Vu le caractère plutôt technique du billet courant j’ai choisi de faire cette publication dans la langue de Shakespeare pour simplifier le vocabulaire et afin de rejoindre un maximum de développeurs.

Advertisements

Et si on utilisait la recherche… pour plus.

Les fonctionnalités de recherche sont une partie intégrante de SharePoint depuis plusieurs versions. Les outils étaient présents dans MOSS 2007 et on pouvait déjà les étendre en y ajoutant Microsoft Search Server 2008. L’intégration de la recherche d’entreprise dans SharePoint 2010 et la possibilité d’y ajouter les capacités de FAST ont encore fait progresser les capacités. Finalement, la venue de SharePoint 2013 intégrant directement les aspects de FAST, les «display templates» et bien d’autres fonctionnalités permettent maintenant à la plateforme d’offrir aux usagers et aux administrateurs des capacités de repérage des actifs informationnels très évoluées. Mais est ce que la recherche doit nécessairement se limiter au traditionnel processus de saisie de mots clés afin d’obtenir une liste de résultats? La réponse est non et voici quelques exemples.

Annuaire d’entreprise

Faire plus avec la recherche
L’annuaire d’entreprise est une fonctionnalité qui peut être mise en place aisément dans SharePoint 2013 et qui offre une valeur d’affaire incroyable à l’organisation. Le processus est simple, utiliser l’application des profils usagers de SharePoint pour synchroniser les données à partir de Active Directory (ou d’autres sources) et le service de recherche afin de permettre de repérer très rapidement l’information. Le centre de recherche d’entreprise offre, à la base, la recherche de personnes. Il n’y a cependant aucune obligation de se limiter à l’affichage de type «résultats de recherche» par défaut. À l’aide des «display templates» intégrés à la recherche SharePoint 2013, il est très simple de modifier le rendu final pour l’afficher, par exemple, en format tabulaire, y inclure des données supplémentaires et pour permettre à l’usager de trier les résultats selon les propriétés qu’il juge pertinentes.

Le CSWP et l’affichage dynamique du contenu

Aussi, SharePoint 2013 introduit une nouvelle fonctionnalité pour les utilisateurs, le «Content search web part» (CSWP). Les capacités de ce contrôle sont immenses. En effet, en utilisant uniquement quelques modifications «front-end» pour ajuster le visuel (sans aucun code serveur), vous êtes en mesure de présenter l’ensemble des données présentes dans votre infrastructure SharePoint de la façon que vous désirez. C’est une capacité qui était présente, avec plusieurs limitations, dans les sites de publication SharePoint depuis la version 2007 grâce au «Content query web part» (CQWP). Le CSWP résout les deux lacunes principales de son prédécesseur, c’est à dire que le CQWP peut obtenir uniquement les données dans la collection de sites courante et que la personnalisation de l’aspect présentation est complexe et doit se faire en XSLT.

Faire plus avec la recherche 2Le CSWP, comme son nom l’indique, utilise les résultats d’une requête de recherche paramétrable, afin de présenter l’information pertinente (et contextuelle) à l’usager. La requête peut accéder une multitude de sources d’informations incluant tous les sites SharePoint, d’autres sites web (externes à SharePoint), des fichiers sur un partage, des données provenant d’un système de mission et bien d’autres. L’aspect visuel du CSWP est géré à travers les «display templates», donc en HTML et Javascript. Cette portion est donc beaucoup plus simple que la façon traditionnelle en XSLT.

En utilisant le CSWP, il est maintenant possible de construire un site portail, regroupant l’information de plusieurs sources (les actualités, annonces du club social, les anniversaires, les offres d’emploi, les éléments consultés fréquemment, etc.) en exploitant uniquement la recherche, les «display templates» et en éliminant presque 100% du développement traditionnel (.NET). Cette façon de faire permet de diminuer grandement le temps de développement, la complexité de gestion du code source ainsi que les efforts nécessaires pour l’entretien du site à travers le temps.

Intelligence d’affaire et tableaux de bord

Parallèlement, quand on parle d’intelligence d’affaire, on imagine souvent des plateformes complexes permettant de faire du «BI» à l’échelle des grandes organisations. Des solutions de «BI» d’une envergure plus modeste peuvent cependant être d’une grande valeur pour de plus petites entreprises (et même les plus grandes). Encore une fois, les fonctionnalités de recherche de la plateforme SharePoint 2013 peuvent répondre à ce type de besoins.

Lors d’un mandat, un partenaire désirait mettre en place une série de sites de projets basée sur un modèle standardisé. Chaque site devait comprendre un certain nombre d’informations sur l’état d’avancement du projet et celles-ci étaient présentées à l’équipe lors de la consultation page principale du site. En parallèle, l’équipe de direction souhaitait avoir une vision globale leur permettant de repérer rapidement les problèmes lorsqu’un projet présentait des signes de difficulté ou de retard. La proposition retenue afin de combler le besoin de la direction s’est donc appuyée sur les composantes de recherche, spécifiquement le CSWP, afin d’exécuter des requêtes précises sur les métriques de chaque projet et de présenter cette information sous forme de tableaux de bord (visuel et graphiques réalisés à l’aide de «display templates») dans un site réservé à la direction. La mise en place de ce type de solution est très rapide, exploite l’actif SharePoint déjà présent dans l’organisation et ne nécessite pas l’acquisition et l’implantation de solutions de «BI» coûteuses.

En résumé, la recherche de SharePoint est beaucoup plus qu’un simple champ texte et un résultat de recherche. Avec les améliorations à la plateforme (principalement dans la version 2013), la recherche de SharePoint est réellement un outil d’entreprise de grande valeur qui vous permet de regrouper l’information, extraire les éléments pertinents et les présenter comme vous le désirez sans nécessiter de développements complexes.