SPLongOperation
Exécution d'opération longues
28/01/2010
1457 lectures
2 commentaires
3/5 (2 votes)
Souvent, en SharePoint, il est nécessaire de réaliser des opérations qui prennent beaucoup de temps. Pour cette raison, il est utile de disposer d'un système permettant de faire patienter l'utilisateur sans lui donner l'impression que les opérations ont plantées. Pour faire cela, il suffit d'utiliser la classe SPLongOperation qui permet d'afficher l'écran d'attente standard de SharePoint.
Pour illustrer nos propos, nous allons créer une WebPart qui permet de créer autant d'éléments que voulu dans une liste. Ici, nous allons les créer de manières traditionnelles, c'est à dire, via l'object model et non via la méthode batch. Ainsi, l'opération prendra réellement longtemps et ce sera plus simple d'illustrer nos propos. Avant toute chose, créez une liste nommée LongOperationList. Celle-ci contiendra les éléments que nous allons créer. Créez ensuite un nouveau projet de type WSP Builder Project et nommez-le LongOperation.
Cliquez ensuite avec le bouton droit de votre souris sur votre projet, choisissez Add > New Item, choisissez Web part Feature et nommez-la LongOperationWebPart :
Dans le fichier elements.xml qui s'ouvre automatiquement, modifiez la valeur des propriétés Group et QuickAddGroups sur AreaProg :
Dans tout le code généré par WSP Builder, ne gardez que la signature de la fonction CreateChildControls et le constructeur. Déclarez ensuite les directives suivantes :
La première chose que nous allons faire ensuite, c'est nous occuper de l'interface graphique de notre Web part. Tapez donc ceci en dehors de toute fonction :
Tapez maintenant ceci dans la fonction CreateChildControls :
Le code de cette fonction n'est pas très compliqué. Il permet simplement de définir l'interface graphique de notre Web Part pour demander à l'utilisateur d'entrer le nombre d'éléments à créer. Au final, cela donnera ceci :
Comme vous le voyez, nous déclarons une fonction pour l'événement Click de notre bouton. Nous allons donc devoir la déclarer :
C'est dans cette fonction que nous allons créer nos éléments. La manière d'afficher la page faisant patienter l'utilisateur est très simple. Effectivement, il suffit d'utiliser un objet de type SPLongOperation. Cet objet implémentant la classe IDisposable, il est nécessaire de fermer cet objet lorsque l'on ne l'utilise plus. La pratique habituelle est donc d'inclure les opérations dans un using :
La première chose que nous allons faire est de définir le titre et le message affiché sur la page d'attente :
Cette classe contient également deux fonctions importantes : Begin et End. C'est en fait entre ces deux fonctions que nous allons mettre les opérations à exécuter. Tapez donc :
La fonction Begin va donc afficher la page d'attente. Les instructions vont donc s'exécuter ensuite. Ici, ce n'est pas très compliqué, nous bouclons sur le nombre entré dans la zone de texte et nous créons autant d'éléments dans la liste LongOperationList. La fonction End va nous permettre de cacher la page d'attente et de revenir à une page. Nous devons spécifier l'adresse de la page de redirection. Ici, nous faisons passons l'URL de la page actuelle pour revenir à la même page, mais vous auriez très bien pu mettre l'adresse de Google ou autre.
Compilez et déployez votre projet pour passer au test. Une fois que vous avez activé votre feature, placez vous sur une Web Part Page et ajoutez votre Web Part. Entrez ensuite 200 dans la zone de texte pour voir cette page apparaitre :
Comme vous le voyez, les phrases que nous avons définies en propriété s'affichent bien. Remarquez aussi que vous êtes ensuite redirigé vers la page sur laquelle vous étiez avant.
Télécharger l'exemple
Pour illustrer nos propos, nous allons créer une WebPart qui permet de créer autant d'éléments que voulu dans une liste. Ici, nous allons les créer de manières traditionnelles, c'est à dire, via l'object model et non via la méthode batch. Ainsi, l'opération prendra réellement longtemps et ce sera plus simple d'illustrer nos propos. Avant toute chose, créez une liste nommée LongOperationList. Celle-ci contiendra les éléments que nous allons créer. Créez ensuite un nouveau projet de type WSP Builder Project et nommez-le LongOperation.
Cliquez ensuite avec le bouton droit de votre souris sur votre projet, choisissez Add > New Item, choisissez Web part Feature et nommez-la LongOperationWebPart :
Dans le fichier elements.xml qui s'ouvre automatiquement, modifiez la valeur des propriétés Group et QuickAddGroups sur AreaProg :
Dans tout le code généré par WSP Builder, ne gardez que la signature de la fonction CreateChildControls et le constructeur. Déclarez ensuite les directives suivantes :
La première chose que nous allons faire ensuite, c'est nous occuper de l'interface graphique de notre Web part. Tapez donc ceci en dehors de toute fonction :
Tapez maintenant ceci dans la fonction CreateChildControls :
Le code de cette fonction n'est pas très compliqué. Il permet simplement de définir l'interface graphique de notre Web Part pour demander à l'utilisateur d'entrer le nombre d'éléments à créer. Au final, cela donnera ceci :
Comme vous le voyez, nous déclarons une fonction pour l'événement Click de notre bouton. Nous allons donc devoir la déclarer :
C'est dans cette fonction que nous allons créer nos éléments. La manière d'afficher la page faisant patienter l'utilisateur est très simple. Effectivement, il suffit d'utiliser un objet de type SPLongOperation. Cet objet implémentant la classe IDisposable, il est nécessaire de fermer cet objet lorsque l'on ne l'utilise plus. La pratique habituelle est donc d'inclure les opérations dans un using :
La première chose que nous allons faire est de définir le titre et le message affiché sur la page d'attente :
Cette classe contient également deux fonctions importantes : Begin et End. C'est en fait entre ces deux fonctions que nous allons mettre les opérations à exécuter. Tapez donc :
La fonction Begin va donc afficher la page d'attente. Les instructions vont donc s'exécuter ensuite. Ici, ce n'est pas très compliqué, nous bouclons sur le nombre entré dans la zone de texte et nous créons autant d'éléments dans la liste LongOperationList. La fonction End va nous permettre de cacher la page d'attente et de revenir à une page. Nous devons spécifier l'adresse de la page de redirection. Ici, nous faisons passons l'URL de la page actuelle pour revenir à la même page, mais vous auriez très bien pu mettre l'adresse de Google ou autre.
Compilez et déployez votre projet pour passer au test. Une fois que vous avez activé votre feature, placez vous sur une Web Part Page et ajoutez votre Web Part. Entrez ensuite 200 dans la zone de texte pour voir cette page apparaitre :
Comme vous le voyez, les phrases que nous avons définies en propriété s'affichent bien. Remarquez aussi que vous êtes ensuite redirigé vers la page sur laquelle vous étiez avant.
Télécharger l'exemple






2 commentaires
dotNetFollower a dit:
Hello!
I have a similar article in my blog. Additionally I explained the reason of ThreadAbortException, which is sometimes thrown. The article is here - <a href="http://dotnetfollower.com/wordpress/2011/08/sharepoint-how-to-use-splongoperation/">http://dotnetfollower.com/wordpress/2011/08/sharepoint-how-to-use-splongoperation/</a>
Thanks!
Adrien M a dit:
Niquel, il manque un point qui peut être particulièrement intéressant, c'est lors de TRÈS grosse opération, une exception REQUEST TIME OUT intervient. Pour la corriger il existe plusieurs méthodes mais l'une d'entre elles serait de modifier le time out pour cette instance du code :
Server.ScriptTimeout = 3600;
Ajouter un commentaire