24 septembre 2013

INFOPATH : Filtrer connexion de données

Aujourd'hui un article sur une optimisation de formulaires InfoPath! Dans 90% des cas, les concepteurs de formulaires InfoPath vont chercher des informations dans des listes ou bibliothèques SharePoint (liste des clients, projets, produits, fournisseurs, références,...).
 
Dans la plupart des cas d'utilisation, tout se passe très bien. Mais dans certaines configurations, l'utilisateur peut rencontrer de gros problèmes de performances lors de la récupération de données:
  • Connexion internet limitée,
  • Très grand nombre d'éléments à récupérer.
 
La solution la plus simple reste de filtrer les résultats à renvoyer à l'aide d'une zone de texte de recherche ou d'une barre de lettre : A, B, C, D,...
 
Une fois la méthode de filtre créée, il sera nécessaire de filtrer la source de données.
Pour se faire, il ne faudra pas utiliser la connexion de données vers une bibliothèque ou liste SharePoint proposée nativement par InfoPath.
Mais plutôt une connexion de données en mode "réception de données" de type "Service web REST" (voir ci-dessous) :
 
 
 
 
Cette méthode de connexion de données permettra d'utiliser le service "listdata.svc" (API Rest) qui est proposé nativement depuis SharePoint 2010.
Pour les novices, ce service permet d'accéder aux données de votre liste  SharePoint nommée par exemple "Produits" en utilisant l'url suivante : http://monsite/_vti_bin/listdata.svc/Produits . Vous pourrez vérifier en tapant l'url dans votre navigateur que SharePoint vous renvoie le résultat au format XML.
 
Techniquement le but sera de modifier l'url de la connexion de données à l'aide des méthodes de filtre proposées par le service REST.
Vous trouverez quelques exemples basiques d'utilisation sur le site de Microsoft : http://msdn.microsoft.com/fr-fr/library/ff521587(v=office.14).aspx
 
Il sera donc nécessaire de modifier l'url de connexion afin de filtrer les valeurs renvoyées. Par exemple, si vous placez un  bouton à côté de votre zone de texte de recherche dans InfoPath, il suffira de rajouter une action sur celui-ci.
Cette action aura pour but de modifier l'url d'accès à la connexion de données de la façon suivante:
concat("http://monsite/_vti_bin/listData.svc/Produits?$filter=substringof('", txtZonedetexteRecherche, "',tolower(NomColonneSharePoint)) eq true")
 
où:
  • "txtZonedetexteRecherche" correspond au champ du formulaire InfoPath permettant de réaliser le filtre,
  • "NomColonneSharePoint" correspond au nom de la colonne permettant de réaliser le filtre dans la liste "Produits".

15 septembre 2013

INFOPATH : Conversion PDF

Une demande récurrente au niveau des formulaires InfoPath reste la possibilité de convertir simplement les formulaires d'entreprise vers le format PDF.
 
Cette fonctionnalité est incluse nativement dans les formulaires InfoPath client lourd (ouverts via Microsoft Office InfoPath) avec le possibilité de réaliser des exports en XPS ou PDF.
 
Par contre, du côté InfoPath Forms Services (formulaire ouvert depuis une page Web via SharePoint Server), il n'existe pas fonctionnalité offerte par défaut. Mais cela ne veut pas dire pour autant que cela n'est pas possible!
 
Il est possible d'utiliser bien-sûr des composants tiers (notamment Muhimbi) qui réalisent très bien ce genre d'action.
 
Nous allons plutôt nous intéresser à un service souvent méconnu qui est inclus dans SharePoint Server : "Word Automation Service".
Dixit la page MSDN : "Word Automation Services assure la conversion sans assistance du côté serveur de documents dans des formats pris en charge par l’application cliente Microsoft Word.
En d’autres termes, Word Automation Services réplique pour le serveur la fonctionnalité « Enregistrer sous » de l’application cliente Word."
 
Concrètement il permet de convertir des les formats d'entrée suivants:
  • Documents au format de fichier Open XML (.docx, .docm, .dotx, .dotm)
  • Documents Word 97-2003 (.doc, .dot)
  • Fichiers RTF (.rtf).
  • Page Web à fichier unique (.mht, .mhtml).
  • Documents Word 2003 XML (.xml)
  • Document XML Word (.xml)
Les formats de sortie pourront être XPS ou PDF.
 
Il existe notamment une limitation dans SharePoint 2010. Ce service ne peut fonctionner que sur des fichiers qui sont physiquement stockés (pas de pris en compte des flux).
 
Voici un très bon tutorial permettant de convertir un formulaire InfoPath en PDF via le passage par un document Word : http://www.bizsupportonline.net/infopath2010/videos/convert-infopath-word-pdf-sharepoint-2010.htm
 
 
Remarque importante : SharePoint 2013 inclut de nouvelles fonctionnalités intéressantes au niveau de ce service :
  • Fonctionnalité de conversion à la demande ajoutée en supplément de la conversion via le travail du minuteur,
  • Possibilité de convertir des flux (uniquement dans le cas de la conversion à la demande évidemment).
Ainsi, il est à présent possible de convertir directement le formulaire InfoPath sans passer par son équivalent en modèle Word. Il sera possible de passer le flux HTML du formulaire (via la transformation du XSL et du XML) au service afin de générer la conversion en mode PDF!
 
Bonnes conversion!

8 septembre 2013

SHAREPOINT : Migration des layouts de page

Lors du déplacement de sites SharePoint entre diverses plateformes ou lors de migration, vous pouvez être amené à rencontrer un problème récurrent sur les gabarits de pages (nommés "layouts de page").
 
Pour quelques raisons obscures (pages modifiées manuellement,...), certains "layouts" de pages appliqués aux pages de votre site ne sont pas correctement mis à jour et pointent toujours vers l'ancien emplacement.
 
Par exemple, pour un site déplacé de la production vers un environnement de validation, vous pourrez éventuellement rencontrer des pages qui pointent toujours vers un gabarit de page de la production. Cela causera évidemment de nombreux effets indésirables lors de l'utilisation ou l'édition de ces pages. Il faudra donc modifier ce genre de page afin de préciser le lien vers le layouts correct.
 
Cette modification n'est pas compliquée, mais le plus contraignant reste la détection de toutes les pages non correctement configurées.
Pour se faire, j'ai réalisé un script PowerShell sans prétention permettant d'afficher la liste des pages du site n'utilisant pas les layouts de page définis sur le site actuel:
 
Script de détection des gabarits de pages non corrects
 
 
Ce script prend en paramètre l'url de la collection de sites à étudier. Il vérifiera ensuite la liste des pages de publication de votre site afin de détecter les layouts comprenant une url spécifique.