Bonjour à vous,
Je poursuis dans ma découverte de Sharepoint, et grâce à vous j'ai déjà résolu un problème important.
Ce sujet en est la suite.
Contexte :
Des EventReceiver itemUpdating et itemUpdated sont liés à une liste. Ils fonctionnent bien.
Besoin :
Il faut informer les utilisateurs des actions des EventReceiver.
Piste explorées :
Pour cela j'ai creusé la piste d'envoyer en paramètre à l'Url de redirection un mot clef qui sera interprété par du code javascript sur la page master.
Ce code javascript se chargera d'afficher la notification Sharepoint avec le bon contenu.
Problèmes rencontrés :
Le code javascript déclenchant la notification sharepoint (via SP.UI.Utility.addNotification) fonctionne bien.
Le problème se trouve au niveau de la redirection après que les EventReceiver aient fini leur travail.
J'ai lu qu'il était impossible de provoquer un changement de page depuis un EventReceiver asynchrone (ItemUpdated).
Même en bidouillant pour que le HttpContext.Current y soit accessible, pas moyen de changer la page active (pour passer des paramètres dans son url).
L'EventReceiver synchrone ItemUpdating semble plus prometteur, via currentContext.Response.Redirect.
Le problème est que la page ouverte est ouverte en popup (ou popin), ou sans doute dans un iframe.
La page actuelle ne change pas, donc aucun paramètre passé en Url, donc aucune notification.
Est-ce que vous avez une solution ? Une piste plus simple ? Une idée à tester ?
Merci d'avance
Edit : Solution
Dans l'EventReveiver ItemUpdating, je récupère le HttpContext.Current.
Avec cet objet je peux ajouter des variables à la session de l'utilisateur (currentContext.Session.Add("variable", "valeur")
J'écris donc dans ces variables les messages que je dois passer à l'utilisateur.
J'ai également modifié la master page. Un bout de code Javascript/asp vérifie les valeurs de ces variables de session et, le cas échéant, affiche son contenu via un SP.UI.Utility.addNotification.
Il y a quelques points à préciser cependant :
Activer les session, sans quoi elle seront à null dans l'EventReceiver :
http://www.elumenotion.com/Blog/List...st.aspx?ID=123
Autoriser les blocs de code dans la master page pour accéder aux variables de session : http://dev42.wordpress.com/2011/02/2...er-page-error/
Exemple de code :
Je n'ai volontairement pas mis toute la logique car elle est a adapter en fonction des cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <script type="text/javascript"> function ShowNotification() { SP.UI.Notify.addNotification('<%=Session["ns-notification"]%>', false); } ExecuteOrDelayUntilScriptLoaded(ShowNotification, "sp.js"); </script>
Partager