Concerne : Infopath Forms Services (Infopath 2010 + Sharepoint Entreprise 2010).
Problématique : le contrôle image en mode navigateur impose d’utiliser une image déjà stockée ailleurs, dont on fournit l’URL (soit saisie par l’utilisateur, soit calculée).
Je veux retrouver en IFS la facilité des images embarquées (disponible en client Infopath Filler), pour que l’utilisateur clique sur un bouton pour charger l’image de son choix.
Exemples d’utilisation :
- Un trombinoscope où l’utilisateur place lui-même sa photo
- Une gestion des factures fournisseurs où il est nécessaire de visualiser la facture scannée pour approuver son paiement…
Etape 1 : Utiliser le contrôle Pièce jointe de Sharepoint
Modifier l’étiquette pour indiquer qu’on veut joindre une image (ex. « Votre photo: » )
Etape 2 : Créer un champ, de type image, et l’insérer dans un contrôle qui affichera la pièce jointe :
- Le mettre en lecture seule
- Dans la valeur par défaut (recalculée), utiliser l’assistant pour sélectionner le champ PieceJointe
Etape 3 : Débrancher la recherche de l’image tant qu’elle n’est pas enregistrée
En effet ce n’est qu’après que l’élément est enregistré que la pièce jointe sera enregistrée de son côté et donc que son URL (commençant par l’adresse de du site) sera exploitable ; tant qu’on est en création, le champ PièceJointe ne contient qu’une info provisoire (le nom du fichier, sans le chemin http://...) que le contrôle image ne peut pas exploiter, ce qui plante l’enregistrement.
Il faut donc tester si la PJ est enregistrée… voici une méthode.
Modifier la valeur par défaut du champ image comme suit :
ou en mode xpath
Code : Sélectionner tout - Visualiser dans une fenêtre à part sous-chaîne-après(concat(commence-par(Pièces jointes; "http"); Pièces jointes); "true")
Explication :
Code : Sélectionner tout - Visualiser dans une fenêtre à part substring-after(concat(starts-with(../my:Attachments, "http"), ../my:Attachments), "true")
- Si Piècesjointes commence par http, la valeur sera celle de PiecesJointes
- Sinon, elle sera vide.
Comme xpath n’a pas de fonction SI, je concatène la valeur à tester derrière le résultat du test ;
- ce résultat renvoie true ou false
- J’extrait de la chaine concaténée la souschaine qui suit le texte true,
- j’obtiens donc soit mon info, soit vide, selon que true est présent ou pas.
C'était une petite contribution histoire de donner des idées. Bonnes recherches à tous.
Partager