21 janvier 2014

InfoPath : Impossible d'exècuter la requête pour le DataObject

Lors de l'utilisation de formulaire InfoPath dans SharePoint, de nombreux utilisateurs font face au message d'erreur suivant suite à l'utilisation de connexion de données vers un site SharePoint :

Impossible d'exécuter la requête pour le DataObject suivant : NomDataObject
La réponse SOAP indique une erreur :
Le serveur n'a pas reconnu la valeur de l'en-tête HTTP SOAPAction :

http://schemas.microsoft.com/sharepoint/soap/GetObjectIdFromUrl.

Dans 99% des cas, cela provient du fait que la version d'InfoPath utilisée n'est pas identique à la version de votre SharePoint.
Il faudra ainsi tout d'abord vérifier que le mode de compatibilité de votre formulaire correspond. Pour cela, suivre les actions suivantes:
  1. Cliquer sur "Fichier",
  2. Cliquer sur "Options du formulaire",
  3. Cliquer sur "Compatibilité",
  4. Si vous publiez un formulaire sur SharePoint 2010, il faudra vérifier que vous n'êtes pas en mode de compatibilité "InfoPath Form Services" qui correspond à un InfoPath Forms Services pour SharePoint 2013:



Ainsi, InfoPath va pouvoir communiquer avec les web services de SharePoint sans erreurs (pas de problème de schéma ou autre,...)
Simple, mais cela peut éviter de sacrés nœuds au cerveau...

8 janvier 2014

SharePoint 2010 : Politique de rétention

Aujourd'hui un article rapide sur les politiques de rétention dans SharePoint 2010.
Cette fonctionnalité permet de répartir l'information (supprimer, déplacer, enlever le versioning) selon divers critères (Date de création ou de modification, Fin de publication).
 
 
Elle permet par exemple de veiller à ce que les préconisations de Microsoft soient respectées en ce qui concerne les limitations du nombre d'éléments dans les listes et bibliothèques.
Ceci est clairement à utiliser dans le cadre de sites comprenant des informations saisies et mises à jour régulièrement. Dans un cas concret, il sera ainsi possible de déplacer des actualités d'un site vers une liste "Actualités-Archive" en les conditionnant sur le nombre de jours, mois ou années après leur création.

Pour activer la rétention au niveau d'une liste ou bibliothèque, il suffit de suivre les étapes suivantes:
  • Se placer sur une liste ou bibliothèque,
  • Aller dans les paramètres de celle-ci via le ruban,
  • Cliquer sur "Paramètres de la stratégie de gestion des informations",

Note : Si vous souhaitez mettre en place une politique de rétention globale, il existe une interface au niveau de l'administration de la collection de sites nommée "Stratégie de la collection de sites".

Par contre, dans un site de publication par défaut, il est uniquement possible de positionner cette rétention sur un type de contenu.
Afin de pouvoir l'utiliser au niveau site ou bibliothèque/liste, il faudra activer la fonctionnalité de collection de sites nommée "Rétention basée sur des bibliothèques et des dossiers":

Il sera à présent possible de définir une politique de rétention au niveau bibliothèque ou dossiers:


 
Puis de créer la rétention qui convient sur ce contenu:

 

28 décembre 2013

INFOPATH : Fonction msxsl:string-compare

Lors de l'utilisation d'InfoPath, vous pouvez parfois avoir la nécessité de comparer divers éléments saisis ou récupérés dans le formulaire : texte et dates.
Malheureusement, les fonctions proposées nativement pas l'interface d'InfoPath peuvent ne pas correspondre à vos besoins. Sachez qu'il est possible d'utiliser d'autres fonctions cachées via l'interface natives!
 
Cela est le cas par exemple pour la fonction msxsl:string-compare.
Voici 2 cas concrets d'utilisation de cette fonction pouvant venir en aide :
  • Comparaison de texte non sensible à la casse : msxsl:string-compare(my:ChampUtilisateur, xdUser:get-UserName(), "", "i") = 0 (où le paramètre "i" signifie case-insensitive),
  • Comparaison de dates pour vérifier la validité d'une date de fin par rapport à une date initiale : msxsl:string-compare(my:DateDebut, my:DateFin) <= 0
 
Afin d'utiliser cette fonction, il sera nécessaire de passer en mode "Modifier l'expression XPath" puis copier les lignes:
 
 

16 décembre 2013

INFOPATH 2010 : Image liée

Une fonctionnalité sympathique d'InfoPath est de pouvoir embarquer des images liées depuis une url. Cela peut-être utile dans le cadre de formulaires comprenant de nombreuses images (bandeau, indicateurs, pictos,...):



Cette fonctionnalité disponible avec InfoPath Forms Services permet donc par exemple d'externaliser les images dans une bibliothèque de formulaires. Cela réprésente un double avantage à mes yeux:
  • Facilité de modification d'une image sans republier le formulaire (très utile pour des formulaires approuvés par l'administrateur qui doivent être publiés via l'administration centrale),
  • Allègement de la taille du formulaire (notamment dans le cas d'utlisation de bannières ou de nombreuses images),
 
Malgré tout, il existe un petit problème avec ce contrôle.
Prenons un exemple simple: Un formulaire comprenant une image liée et une section masquée ou non selon le clic sur des boutons "Plier"/"Deplier".
 
Lors de l'ouverture du formulaire dans InfoPath Forms Services, l'image est correctement affichée:


 
Par contre, lors du clic sur le bouton "+" pour afficher les champs, la section s'affiche correctement mais l'image disparaît lors du postback (et laisse sa place à une icône) :


Lors du prochain postback, l'image réapparaitra comme par magie... En gros, ce n'est pas utilisable en l'état.
 
Le problème provient tout simplement du fait de l'utilisation d'une URL relative pour afficher l'image (par exemple "/_layouts/images/siteicon.png"). L'url relative permet de retrouver l'image lors du premier affichage mais pas lors de tous les postbacks, ce qui nous fait un joli bug...
J'ai détecté cette erreur en testant sur un SharePoint 2010 post SP1 mais après quelques tests, il s'avère que le problème est toujours présent sur le SP2 de SharePoint 2010...

Moralité : N'oubliez donc pas de positionner une URL complète pour l'image liée lorsque vous utilisez ce type de champ.

8 décembre 2013

INFOPATH : Numérotation zone extensible

Aujourd'hui, un article traitant d'un besoin récurrent des utilisateurs InfoPath : il s'agit de la numérotation automatique des lignes d'une zone extensible (tableau ou section).
 
Pour cela, il suffit de suivre les étapes suivantes:
  • Se positionner sur un champ de votre zone extensible,
  • Aller dans les propriétés de ce champ puis modifier la valeur par défaut en cliquant sur le bouton "Fx":
  • Sélectionner "Modifier une expression XPath avancée" puis copier la formule suivante : count(../preceding-sibling::*) + 1
 
  • Cliquer sur "OK" puis "OK",
A présent, si vous passez en mode "Preview", vous pourrez voir que le numéro est automatiquement pré-rempli lors de l'ajout d'une nouvelle ligne à votre zone extensible :