Limiter le nombre de réponses d’une enquête

Bien souvent lors de la mise en place d’un SharePoint il est nécessaire de faire de nombreux ajustements par rapport aux fonctionnalités de base. Il est alors possible de sortir l’artillerie lourde et de développer (ou redevelopper) les fonctionnalités manquantes. On peut également “bricoler” l’existant lorsque les modifications à apporter sont minimes et concernent principalement l’interface utilisateur.

Prenons l’exemple d’une enquête. Le nombre de réponses par utilisateur peut bien entendu être limité mais le nombre de réponses au total est en revanche illimité. Si on utilise ce type de liste pour gérer une liste d’inscriptions à un évènement dont le nombre de places est restreint il va donc falloir effectuer quelques modifications.

La méthode que je vais utiliser est assez simple et peut-être appliquée à de nombreux problèmes : un DataForm WebPart et un peu de Javascript.

Le principe

Ma liste enquête comporte 2 questions : “Serez-vous présent?” et “Combien de personnes vous accompagneront?”.

survey

Lors de la validation à l’aide de l’un des deux boutons Terminer il faut donc vérifier si le nombre maximal d’inscriptions est atteint ou non et afficher un message en conséquence.

Je vais donc commencer par ajouter un DataForm WebPart à la page d’ajout d’un élément NewForm.aspx.
Ce WebPart récupérera le nombre total d’inscriptions déjà enregistrées puis générera du JavaScript pour effectuer la validation.

DataForm WebPart

Je commence par ajouter un DFWP (DataForm WebPart) à la page NewForm.aspx de ma liste enquête à l’aide de SharePoint Designer. Je l’ajoute juste après le ListForm WebPart dans la zone de WebPart.

Note : Il faut absolument éviter de modifier le ListForm WebPart déjà présent qui permet d’afficher le formulaire d’ajout d’un nouvel élément. Ne supprimez d’ailleurs jamais ce WebPart d’une page NewForm ou EditForm. Si vous souhaitez le remplacer cachez-le (attribut IsVisible).

Pour ajouter le DFWP : menu Vue de données –> Insérer une vue de données. Ensuite dans le panneau “Bibliothèque de sources de données”, clic sur le nom de la liste enquête –> “Afficher les données”.
On séléctionne alors la colonne “Serez-vous présent?” (ou n’importe quelle autre colonne puisque de toutes façons nous allons supprimer l’affichage qui sera généré par SharePoint Designer) puis “Insérer les champs sélectionnés en tant que” –> “Affichage de plusieurs éléments”.

dfwp_original

Filtrons maintenant les éléments retournés. En effet nous n’avons pas besoin de prendre en compte ceux dont la case “Serez-vous présent?” n’est pas cochée. On ouvre les tâches du DFWP (petite flèche en haut à droite du WebPart lorsqu’il est sélectionné) puis “Filtrer”. On indique alors que la colonne “Serez-vous présent?” doit avoir la valeur “Oui”.

dfwp_filter

Toujours dans les tâches du DFWP j’ajoute un paramètre “Limit” qui me permettra de configurer rapidement le nombre maximal de personnes pouvant s’inscrire.

dfwp_parameters

Dans l’affichage Code il va maintenant falloir faire le ménage. En effet je n’ai pas besoin d’afficher les différents éléments, je recopie donc simplement la variable Rows dans le template principal et je supprime les autres templates.

Il ne me reste alors plus que ca:

Ayant recopié tout le WebPart on s’y perd un peu. La seule partie qui nous intéresse pour le moment c’est celle qui se trouve entre les balises <XSL></XSL> :

C’est déjà plus clair. On remarque que mon template ne fait absolument rien pour le moment. Je vais commencer par rajouter quelques variables :

La variable “inscrits” contient donc le nombre total d’enregistrements retournés. Sachant que j’ai défini un filtre auparavant on n’obtient le nombre total d’enregistrements dont la valeur de “Serez-vous présent?” est égale à “Oui” c’est à dire le nombre d’inscrits.

La variable “inscripts_plus” contient le nombre d’accompagnateurs au total grâce à la fonction sum. Vérifiez bien que le paramètre concorde avec le votre.

Enfin je stocke le nombre d’inscrits au total dans la variable “total”.

JavaScript

Maintenant que le DFWP est configuré et qu’il me retourne les valeurs dont j’ai besoin il ne me reste plus qu’à ajouter le code JavaScript permettant de faire la validation. Je l’ajoute dans le template XSL juste après les variables:

L’utilisation de <xsl:value-of/> me permet d’injecter la valeur des variables XSL dans le code JavaScript.
Je récupère les différents éléments à l’aide de la fin de leurs IDs ce qui me permet de copier ce Webpart d’une enquête à l’autre. En effet l’id des contrôles est construit sur l’ID du Webpart et sur d’autres éléments fixes (TextBox, BooleanField, diidIOSaveItem).

Au final l’utilisateur obtiendra un message d’erreur (alert) lorsque le nombre d’inscriptions est dépassé.

result

Modification du paramètre Limit

Comment modifier rapidement le paramètre permettant de limiter le nombre d’inscriptions? Soit vous ouvrez SharePoint Designer et vous modifier la valeur par défaut soit vous utilisez votre navigateur.

Pour cela affichez la page NewForm.aspx de votre enquête où se trouve le DFWP. Ajoutez alors à l’URL le paramètre “ToolpaneView” avec une valeur de 2. Ce qui donne http://[urldel’application]/[site]/[enquete]/NewForm.aspx?Source=[URLderetour]&ToolpaneView=2. C’est ce qu’on appelle le ToolpaneView Hack.

La page s’affiche alors en mode d’édition. Si votre DFWP se trouve bien dans la zone de Webpart (à vérifier dans le code) alors vous avez la possibilité de le modifier. Dans le panneau de modification utilisez l’éditeur de paramètres pour modifier la valeur de Limit. Vous devez enregistrer les modifications puis quitter la page et y revenir pour vérifier le résultat.

Conclusion

L’exemple que je donne ici est très simple et il manque certaines étapes de validation. On pourrait par exemple désactiver le formulaire lorsque le nombre d’inscriptions est atteint. Il serait également plus intuitif d’afficher le nombre de places restantes sur le formulaire. Tout cela es bien entendu possible en JavaScript.

Le but de cet exemple était donc de montrer que l’utilisation d’un DFWP peut aller bien au délà du simple affichage de données et qu’il se révèle très pratique dans de nombreux cas.

Leave a Reply

Your email address will not be published. Required fields are marked *