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 :