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.

 

Maximiser SharePoint par la simplicité

Dans ma carrière en TI, j’ai eu l’occasion de participer à l’implantation de la plateforme SharePoint dans des organisations de toutes les tailles. Avec le temps, j’ai eu la chance de participer à de très belles réalisations mais aussi à des projets qui se sont soldés par des échecs. Les raisons pour l’échec d’un projet en TI sont multiples, cependant un élément ressort souvent pour expliquer les déboires d’un projet utilisant SharePoint : on aborde le projet SharePoint comme on le ferait avec un projet de développement traditionnel.

Utiliser la plateforme sans la redéfinir

L’erreur principale dont je suis témoin lors de mes mandats est l’adoption de la plateforme sans en comprendre le fonctionnement. Si le souhait est de répondre à 100% des besoins d’affaires d’une organisation ou d’une unité administrative sans aucune adaptation des processus, oubliez tout de suite SharePoint. C’est techniquement possible de le faire, cependant lorsqu’on tombe en mode développement – en opposition à paramétrisation – dans SharePoint, les efforts nécessaires explosent rapidement.

On peut utiliser SharePoint comme plateforme de développement mais ce genre d’entreprise demande une profonde réflexion en amont afin de s’assurer que tout est bien attaché et qu’on n’aura pas de surprise lors de la réalisation.

Si vous avez besoin d’espaces de collaboration ou encore d’un site de publication, ne vous lancez pas dans un développement complexe. Des centaines d’ergonomes, d’ingénieurs logiciels, d’architectes d’information, d’experts en sécurité, etc. chez Microsoft ont déjà passé un nombre incalculable d’heures à réfléchir, à perfectionner la plateforme et à la rendre personnalisable. Assurez-vous de bien comprendre ce que SharePoint peut faire et personnalisez l’outil dans ce cadre.

La décision d’utiliser un progiciel c’est aussi la décision de revoir ses processus d’affaire de façon à les appuyer sur la technologie existante sans la dénaturer (bien qu’il soit souvent pertinent de faire des modifications mineures à la plateforme).

Finalement, un conseil que je peux offrir à une organisation qui désire introduire la plateforme SharePoint c’est d’y aller graduellement, commencez par l’intégration de composantes simples et «vanilles» comme une intranet vitrine (publication), des sites d’équipe ou encore un répertoire d’entreprise basé sur la recherche de personnes. Ces éléments natifs vous permettront d’évaluer les bénéfices de SharePoint pour votre organisation, de faire une gestion du changement graduelle auprès de vos usagers et pourront devenir un tremplin pour vous lancer dans des projets plus complexes qui incluront du développement.

Les apps SharePoint, inutiles?

Encore une fois, je suis bien d’accord avec M. Furuknap. Le modèle des apps proposé par Microsoft dans la version 2013 de SharePoint n’apporte pas d’avantages et ne permet pas de régler de nouveaux problèmes par rapport aux autres méthodes de développement de la plateforme.

Prenez quelques minutes pour lire son article à ce sujet: http://blog.furuknap.net/sharepoint-2013-app-model-the-jury-is-back

 

Développement SharePoint… sur Amazon!?!

Les solutions pour mettre en place des environnements de développement SharePoint sont multiples. Avec quelques collègues, nous avons récemment réfléchi pour trouver une solution abordable et flexible. Voici quelques critères que nous avons identifiés :

  • permet d’avoir autant d’environnements SharePoint que nécessaire;
  • permet d’avoir accès à un domaine central (pas attaché à l’une ou l’autre des machines de développement);
  • avoir un coût mensuel raisonnable;
  • ne nécessite pas l’installation de serveurs physiques;
  • est performante;
  • disponible partout;
  • ne nécessitant pas d’avoir une machine physique très performante (et très lourde dans le cas d’un portable).

Après avoir analysé les diverses pistes de solution, Metalogique a décidé d’opter pour une infrastructure dans le cloud basée sur l’offre d’Amazon. Dans un premier temps, nous avons mis en place un VPC permettant d’avoir un réseau privé dans le cloud d’Amazon et de permettre la communication entre les diverses machines par leur interface réseau privé. Ensuite j’ai fait l’installation d’un contrôleur de domaine et d’un serveur TFS en utilisant des instances EC2 de petite taille. Ces deux serveurs roulent 24/7 et sont suffisamment performants pour notre équipe d’une dizaine de développeurs.

Ensuite, chaque développeur peut gérer sa (ou ses) machine de développement SharePoint. La configuration initiale de celle-ci est entièrement scriptée et prend moins d’une heure. On utilise des instances r3.large (6.5 ECU, 15GB ram) qui sont très performantes et relativement économiques (0.30$ / h incluant Windows et SQL Express). Il est aussi très facile d’augmenter la capacité d’une instance dans le cas où cela serait nécessaire.

Un seul problème avec cette solution. Si les machines de développement roulent 24/7, on paie entre trois et quatre fois trop cher car les employés ne les utilisent que 7-8h par jour. À moins de donner l’accès à tous les employés à la console de gestion Amazon (avec tous les droits sur le compte), il est impossible pour un développeur d’arrêter ou de démarrer son instance à la demande.

Encore une fois, la solution est assez simple. J’ai développé une application web MVC .NET utilisant le SDK AWS .NET afin de se connecter au compte AWS de Metalogique et de présenter au développeur uniquement les machines lui étant assignées (en utilisant les tags). Le développeur n’a qu’à se connecter à l’application MVC, et démarrer ou arrêter sa machine au début ou à la fin de sa journée de travail.

Il serait également possible d’automatiser le démarrage ou la fermeture des instances selon un horaire prédéfini, mais la solution actuelle convient à nos besoins pour le moment.

Depuis l’implantation, la solution fonctionne très bien. La performance est intéressante, on peut se connecter en RDP aux machines de n’importe où, le coût est accessible à une PME, pas besoin de faire l’entretien de serveurs physiques, plus besoin de trainer un portable de 15lbs (vive les ultrabooks) et ça peut fonctionner avec d’autres applications (j’ai récemment créé une instance Linux pour un collègue en mandat).

Je vous invite à me contacter si vous avez des questions ou des commentaires. Si l’intérêt est là, je ferai un autre billet sur les aspects plus techniques de la configuration.

SharePoint «on premise» n’est pas mort!

Mon travail m’amène souvent à discuter avec mes clients et à envisager des scénarios de migration de leurs contenus et infrastructure vers SharePoint dans le «cloud». Les raisons sont multiples : simplifier la gestion, éviter d’entretenir des serveurs, réduire les besoins au niveau des backups, etc. L’avenue du «cloud» n’est cependant pas toujours possible. Parfois la cause est de nature légale, souvent le client désire avoir le contrôle à 100% de la plateforme afin de développer des solutions d’affaire complexes.

Des rumeurs ont circulées dans les derniers mois au sein de la communauté SharePoint que Microsoft envisageait éliminer la version «on premise» de SharePoint Server pour se concentrer uniquement sur la version «cloud». C’est faux. Jeff Teper (Vice-président corporatif des services Office et serveurs chez Microsoft) a clairement indiqué lors du SPC 2014 que Microsoft travaille activement à la prochaine version de SharePoint et que celle-ci (et les suivantes) comprendra une version «on premise». N’ayez donc pas d’hésitation, si vous envisagez mettre en place des solutions basées sur un modèle «on premise». Microsoft continuera à vous supporter et à faire évoluer le produit dans les prochaines années.

Vous pouvez consulter le blog de Bjørn Furuknap pour plus de détails sur le sujet.

Chronique Drag’n’Point: Aujourd’hui les utilisateurs gèrent le contenu: quand les utilisateurs géreront-ils le contenant ?

Avec l’usage des plateformes collaboratives et de gestion documentaire tels que SharePoint, les utilisateurs sont à même de créer leurs contenus dans des environnements dont l’architecture fut pensée et établie au préalable. Il s’agit ni plus ni moins d’une structure documentaire enrichie et sécurisée en mode web. Certes il s’agit d’un énorme pas si l’on se compare aux traditionnels serveurs de fichiers.

Toutefois, il est encore difficile de faciliter l’adhésion des utilisateurs à cette plateforme fantastique, non pas à cause du manque des fonctionnalités qu’elle possède, mais bien parce que nous offrons l’outil dans un cadre trop rigide à l’intérieur duquel l’utilisateur n’a pas la possibilité de le personnaliser à sa convenance.

Dans cet ordre d’idées, le Groupe Metalogique a fait plusieurs brainstorms et analyses afin de voir comment il serait possible de fournir à l’utilisateur un espace personnalisable sous format tableau de bord tout en requérant un minimum de connaissances technologiques, voire aucune connaissance. Suite à ces ateliers, Metalogique s’est associé à la firme Solutions pour SharePoint, développeur de Drag’n’Point, qui a créé des outils permettant aux utilisateurs de gérer leur environnement de façon si simple que ça amène l’expérience utilisateur à un niveau qu’il est difficile d’atteindre de façon native.

Ensemble, l’équipe de Drag’n’Point et Groupe Metalogique vont unir leurs efforts en vue de poursuivre l’amélioration de cette démarche de personnalisation auquel cette solution répond déjà de belle façon.

Un incontournable à utiliser http://www.dragnpoint.com/