Infopath : Formulaire avec un champ AutoInc sur un serveur SharePoint

Il est parfois nécessaire d'attribuer un numéro automatique pour vos formulaires InfoPath enregistrés sur un serveur SharePoint. Nous allons vous montrer dans ce tutoriel comment y arriver sans aucune ligne de code. nous allons prendre un cas pratique qui est celui d'un bon de commande interne.
6 commentaires Donner une note à l'article (4.5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Pré-requis

Avant de commencer, des connaissances sur la conception des formulaires InfoPath et sites SharePoint (des bibliothèques de documents en particulier) sont nécessaires afin de mieux comprendre ce qui va suivre.

II. Introduction

Dans ce tutoriel nous n'allons pas nous focaliser sur la création d'un formulaire InfoPath ou sur la création de site SharePoint, nous allons juste voir comment attribuer un numéro automatique aux formulaires enregistrés dans notre bibliothèque.

Pour réaliser ce tutoriel vous devez disposer de SharePoint Services et d'InfoPath 2007.

Afin d'arriver a notre but, l'astuce consiste à récupérer et incrémenter l'ID le plus grand de notre Librairie. Attribuer cet ID a notre formulaire au moment de son envoi au serveur, donc l'utilisateur ne verra le numéro qu'une fois que le formulaire a été envoyé. C'est un peu contraignant mais c'est inévitable pour ne pas avoir des doublons dans le cas d'une utilisation simultanée

III. Mise en œuvre

Nous supposons que vous avez déjà créé votre formulaire et une bibliothèque de formulaire InfoPath nommé Bon de Commande Interne.

Si ce n'est pas encore fait, ajoutez dans votre formulaire InfoPath, un champ Texte pour le numéro, que nous allons nommer ici NumBC.

Pour récupérer l'ID de notre DocLib nous aurons besoin de créer une connexion de données qui va aller chercher le numéro le plus grand sur notre serveur.

III-A. Définition des connexions de données.

Dans InfoPath allez dans le menu outils-> Connexions de données, vous verrez la fenêtre suivante.

Image non disponible

Cliquez sur le bouton ajouter

Image non disponible

Choisissez une connexion réception de données et cliquez sur suivant.

Image non disponible

Choisissez Bibliothèque ou liste SharePoint comme la source de données.

Image non disponible

Ensuite saisissez l'URL complète vers votre bibliothèque de documents comme indiqué sur la capture d'écran (vous pouvez faire un copier/coller dans la barre d'adresse de votre navigateur quand vous êtes sur votre librairie).

Image non disponible

Sélectionnez la librairie Bon de Commande Interne qui devrait apparaître dans votre liste.

Image non disponible

Décochez tous les autres champs à l'exception de la colonne ID et veillez a ce que la case Inclure les données pour le formulaire actif soit décochée
Cliquez sur suivant et ne faites rien dans la 6eme étape

Image non disponible

Nommez la connexion GetIDs et veillez aussi à décocher la case Extraire automatiquement les données à l'ouverture du formulaire.Cliquez sur Terminer

De la même manière, nous allons créer une autre connexion, mais cette fois ci d'envoi des données toujours vers une librairie ou liste SharePoint.

Image non disponible

Lorsque vous arrivez à la 3eme étape cliquez sur le bouton formule à côté du nom de fichier

Image non disponible

Ensuite cliquez sur le bouton Insérer une formule

Image non disponible

Allez chercher la fonction concat() et cliquez sur Ok. Ensuite vous aurez une fonction du genre concat(double-cliquer pour insérer un champ; double-cliquer pour insérer un champ; double-cliquer pour insérer un champ) , Insérer à la place du premier paramètre un nom pour votre bon de commande exemple "BCI N°". Pour le second paramètre cliquez sur le bouton "Inserer un champ ou un groupe" pour récupérer le Champ NumBC

Image non disponible

En résultat vous aurez une fonction qui ressemble a ceci concat("BC N°";NumBC). Vous pouvez cliquer sur vérifier la formule pour vous assurer qu'il n'y pas d'erreurs, cliquez sur OK et nommez votre connexion Envoi.

Nous pouvons maintenant fermer notre fenêtre Connexions de données.

III-B. Définition des paramètres d'envoi

Allez dans le menu Outils -> Options d'envoi

Image non disponible
  • cochez la case Autoriser les utilisateurs à envoyer ce formulaire
  • choisissiez l'option Effectuer une action personnalisée à l'aide des règles
  • cliquez sur le bouton Avancées et choisissez fermer le formulaire dans la liste de choix après l'envoi
  • cliquez ensuite sur le bouton Règles

Suite à une contrainte de la fonction max() qui renvoie une valeur NaN lorsque la bibliothèque est vide nous somme obligé de gérer à part le cas de la création du premier formulaire, pour ce faire nous allons créer trois règles conditionnelles au lieu d'une.

III-B-1. Récupérer ID courant

Nous allons tout d'abord créer une règle avec une seule action et sans condition pour récupérer la liste des IDs de notre bibliothèque grâce à la connexion GetIDs que nous avons définie précédemment.

Image non disponible

Ajoutez une action

Image non disponible
  • choisissez dans l'action Exécuter une requête via une connexion de données
  • choisissez la connexion GetIDs, Nommez la règle Récupération des IDs

III-B-2. Cas d'une bibliothèque vide

Quand le cas d'une bibliothèque vide est vérifié nous savons d'ores et déjà que le numéro à attribuer est 1.

Ajoutez une règle, cliquez sur le bouton définir une condition.

Image non disponible

Sélectionnez Sélectionnez un champ ou un groupe et vous verrez apparaitre la fenêtre qui suit

Image non disponible
  • Sélectionnez la source de données GetIDs
  • Allez chercher le champ ID
  • Sélectionnez Nombre d'occurrences de ID
  • Ok

Sélectionnez est égal à comme opérateur et Zéro pour la valeur.

Nous allons maintenant ajouter deux actions à notre règle.
La première : Sélectionnez une action de type Définir la valeur d'un champ, pour le champ choisissez NumBC et pour la valeur tapez tout simplement 1.

Image non disponible

Pour la deuxième action : Sélectionnez Envoyer via une connexion de données avec la connexion Envoi que nous avons créée en second lieu.

Image non disponible

Nous avons terminé avec notre deuxième règle, nommez la envoi 1er formulaire ou comme bon vous semble.

III-B-3. Cas d'une bibliothèque non vide

Nous allons maintenant créer notre troisième et dernière règle.
Définissez une condition comme nous l'avons fait avec la deuxième règle mais cette fois avec l'opérateur est supérieur à zéro
Ajouter une action de type Définir la valeur d'un champ comme nous l'avions fait avec la deuxième action mais pour la valeur de champs insérer une formule et cliquez sur ajouter Insérer une fonction.

Image non disponible

Choisissez la fonction max()

Image non disponible

Allez chercher le champ ID

Image non disponible

Ajouter +1 à la fonction : max(@ID)+1

Image non disponible

En final vous aurez une action qui ressemble à ceci.

Nous allons maintenant ajouter une deuxième action de type Envoyer via une connexion de données comme nous l'avions fait avec la deuxième règle.
Nommez votre règle envoi formulaire et fermez toutes vos fenêtres

IV. Publication du formulaire

Et voila c'est fini vous pouvez dès à présent publier et tester votre formulaire
Remarquez qu'après l'insertion du premier formulaire sur votre serveur, la deuxième règle et les conditions que nous avons définies ne servent plus à rien et engendrent des traitements inutiles, il est préférable de les supprimer et de ne garder que la première et troisième règle en ôtant la condition.

V. Remerciements

Je tiens à remercier infiniment Ludovic LEFORT pour son aide précieuse lors de l'écriture de ce premier tutoriel, ainsi que Thomas LEVESQUE pour sa relecture.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2009 AIT YAHIA Idir. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.