Utiliser les composants AJAX d`interface utilisateur
Transcription
Utiliser les composants AJAX d`interface utilisateur
Utiliser les composants AJAX d’interface utilisateur avec des messages provenant d’un formulaire infopath 2010 Rédacteur : Laurent Mrejen Date : Mars 2011 Introduction Infopath 2010 est un outil permettant la construction de formulaires interactifs, que l’on peut envoyer par messagerie, visualiser hors ligne… . Les nouvelles possibilités offertes par cette nouvelle version comme la refonte ergonomique de l’éditeur, une meilleure intégration dans SharePoint avec la possibilité de personnaliser les formulaires de listes etc, font d’infopath 2010 un compagnon idéal dans la personnalisation et la construction d’applications métiers sur SharePoint. Néanmoins, malgré beaucoup de nouveautés, Infopath 2010 ne permet pas, de façon instantanée, de communiquer avec l’interface AJAX de Sharepoint 2010. Vous ne voyez peut être pas de quoi je parle. Sharepoint 2010 arrive avec un jeu de composants nouvellement crée permettant une meilleure expérience utilisateur. Ainsi, une barre de statut a vu le jour en dessous du ruban. Cette dernière affiche des messages de notifications sous différentes couleurs suivant l’état du message. Un autre composant fort utile est la fenêtre de notification, une petite fenêtre s’affichant sur la droite et donnant une information sur l’exécution d’un traitement. Figure 1 : Fenêtre de notification (image du blog de Chris O’brien) Figure 2 : Barre de statut (image du blog de Chris O’brien Malgré de nombreuses nouveautés sur Infopath 2010, il n’était pas possible (à ma connaissance et j’ai cherché ;-) ) d’utiliser nativement ces composants pour prévenir l’hôte qu’une action dans le formulaire est en cours ou est terminée et qu’il faut afficher un message à l’aide d’un des deux composants AJAX présentés plus haut. A la fin, voila ce que vous devez obtenir : Notre formulaire Notre notification du traitement Dans ce tutoriel nous allons voir comment construire une liaison entre le site sharepoint hôte et le composant form webpart affichant le formulaire. Etat des lieux avant le développement Avant de commencer à parler de développement, analysons déjà ce qu’infopath 2010 nous offre comme possibilité d’intéraction avec SharePoint 2010. Nous savons que la form webpart permet d’embarquer un formulaire infopath dans une page de composants webpart. Cette webpart est connectable avec d’autres webpart par le biais de la connexion webpart classique. Dans infopath 2010, cela se traduit par la promotion de propriétés de connexion ci-dessous : Par ailleurs, nous savons aussi qu’il est possible de forcer un évènement comme le clic sur un bouton ou le changement d’une valeur dans une liste déroulante à envoyer un message au serveur et cela en jouant sur les propriétés du contrôle comme dans la figure ci-après : Maintenant, nous allons ajouter une demande spécifique d’envoi de données pour mettre à jour la connexion webpart. Pour ce faire, nous rajoutons dans notre bouton la règle suivante « SendToSharePoint ». Cette règle possède juste une action d’envoi de données vers les connexions webparts. Récapitulons. A l’aide des outils et composants natifs, nous pouvons : - Intégrer un formulaire dans une page sharepoint - Connecter ce formulaire avec une autre webpart présente dans la page - Dans l’outil de conception, créer un champ utilisable pour cette connexion - Créer une règle ou un code .net de modification de la valeur de ce champ à la fin du traitement considéré. o Cela va permettre de créer une connexion de données avec une autre webpart - Forcer le formulaire à renvoyer toujours la valeur modifiée du champ. o Cela forcera la page à se recharger et donc à un code javascript à s’exécuter Ce que nous n’avons pas reste donc un interpréteur de la valeur de ce champ pour entrainer l’affichage d’une fenêtre de notification. Il ne nous reste donc plus qu’à le créer ! Création de la webpart de consommation du message infopath Comme nous l’avons vu précédemment, nous pouvons relier notre formulaire embarqué dans une page via une form webpart avec un autre composant webpart. Nous allons maintenant créer cette webpart qui va transmettre l’ordre à la page d’afficher la fenêtre de notification. Tout d’abord, nous allons expliquer comment marche cette fenêtre de notification. La fenêtre de notification est un composant SharePoint natif utilisant la technologie AJAX. C'est-àdire qu’il s’exécute localement sur le poste client et est instanciable à l’aide d’un code javascript comme le suivant : SP.UI.Notify.addNotification('Mon premier message') Ce que nous allons faire est donc une webpart qui va générer ce code dans la page et qui va remplacer le texte dans la parenthèse par la valeur du message provenant de la variable Message du formulaire. Voila un exemple de code source permettant de créer le composant webpart : [ToolboxItemAttribute(false)] public class DisplayFormMessageWebPart : WebPart { private IWebPartField MessageProvider; private object MessageValue; private void GetFieldValue(object fieldValue) { MessageValue = fieldValue; } [ConnectionConsumer("FormMessage")] public void SetConnectionInterface(IWebPartField provider) { MessageProvider = provider; } protected override void CreateChildControls() { Literal l = new Literal(); if (MessageProvider != null) { MessageProvider.GetFieldValue(new FieldCallback(GetFieldValue)); if (MessageValue.ToString() != string.Empty) { l.Text = "<script type='text/javascript'>" + "function ShowMessage(){" + "SP.UI.Notify.addNotification('" + MessageValue.ToString() + "');}\n" + "ExecuteOrDelayUntilScriptLoaded(ShowMessage, \"sp.js\");</script>"; ; } } this.Controls.Add(l); } } Expliquons un peu ce code : Ce composant possède une variable de type IWebPartField. C’est ce champ qui va recevoir la valeur de la variable Message du formulaire infopath. Ce type de champ est disponible dans l’API .net pour permettre la connexion entre webparts. Pour recevoir la valeur d’un autre composant webpart, il est nécessaire d’instancier les deux fonctions « GetFieldValue » et « SetConnectInterface ». La fonction « GetFieldValue » renseigne la valeur du message du formulaire infopath et « SetConnectionInterface » rend disponible la liaison lors du paramétrage de la webpart dans la page (n’oubliez pas de renseigner la propriété « ConnectionConsumer »). Le reste du code .net ne fait qu’écrire si la connexion existe et si le message n’est pas un code javascript dans la page. J’aimerai quand même attirer votre attention sur l’utilisation de la fonction javascript présente dans l’api Sharepoint « ExecuteOrDelayUntilScriptLoaded() ». Cette dernière est nécessaire pour que l’affichage de votre fenêtre de notification se fasse sans erreur et après le chargement du framework javascript. Si vous ne l’utilisiez pas, vous auriez une erreur. Et voila vous n’avez plus qu’à compiler votre webpart et à la déployer dans une solution (sandbox si vous êtes sur le cloud) et à l’ajouter dans votre page. Conclusion Dans ce tutoriel, nous avons vu comment créer un connecteur entre un formulaire infopath 2010 embarqué dans une form webpart et les contrôles AJAX SharePoint. Pour aller plus loin, vous pourriez modifier le code de la webpart de connexion afin de rediriger le message vers la barre de statut et de changer la couleur de cette dernière suivant la nature du message. Vous pourriez aussi ajouter une variable à mettre dans la toolpart permettant de paramétrer l’endroit où la notification va s’afficher.