Infopath : Formulaire avec un champ AutoInc sur un serveur SharePoint

AIT YAHIA Idir

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.
Commentez

- Titre : Infopath : Formulaire avec un champ AutoInc sur un serveur SharePoint

- Auteur : AIT YAHIA Idir

- Parution : 19 juin 2009

- Licence : 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.

Sommaire

- I. Pré-requis

- II. Introduction

- III. Mise en œuvre

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

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

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

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

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

- IV. Publication du formulaire

- V. Remerciements

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.

Cliquez sur le bouton ajouter

(cliquez ici pour aggrandir l'image)

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

(cliquez ici pour aggrandir l'image)

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

(cliquez ici pour aggrandir l'image)

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).

(cliquez ici pour aggrandir l'image)

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

(cliquez ici pour aggrandir l'image)

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

(cliquez ici pour aggrandir l'image)

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.

(cliquez ici pour aggrandir l'image)

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

Ensuite cliquez sur le bouton Insérer une formule

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

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

- 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.

Ajoutez une action

- 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.

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

- 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.

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.

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.

Choisissez la fonction max()

Allez chercher le champ ID

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

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.

Retour à l'article

Retour à l'article

Retour à l'article

Retour à l'article

Retour à l'article

Retour à l'article

Retour à l'article