IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Sharepoint .NET Discussion :

Envoyer notification depuis Event Receiver [Débutant]


Sujet :

Développement Sharepoint .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut Envoyer notification depuis Event Receiver
    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 :
    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>
    Je n'ai volontairement pas mis toute la logique car elle est a adapter en fonction des cas.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut
    J'ai peur de ne pas avoir tout compris.

    Tu veux alerter les utilisateurs lorsque différentes actions ont lieu sur une liste (via ton EventReceiver) et afficher ces alertes en page d'accueil ?

    Tu peux alimenter une liste de tâches et afficher la WebPart Mes tâches en page d'accueil par exemple.

  3. #3
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Par défaut
    Bonjour,

    quel est le but de la redirection? SI vous arriver à utiliser les notifications via addNotification(); => pourquoi ne pas ajouter un lien directement dans cette notification? en quoi cela ne correspond pas à votre besoin?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    Bonjour,

    merci pour vos réponses.

    @SONY30 : Les informations ne doivent pas être conservées, c'est juste pour que les utilisateurs soient informés que la dll à fait quelque chose. Ces messages apparaitront très souvent, donc les mettre dans une liste n'est pas la solution.
    Le comportement de la notification Sharepoint correspondrait bien. Je n'ai pas besoin de conserver ces informations. Il faut juste qu'elles soient présentées à l'utilisateur sans que celui-ci doive faire quelque chose de précis comme aller dans une liste pour voir la dernière information écrite.

    @Lapinpanda : Le but de la redirection était de passer un paramètre dans l'url, paramètre qui déclencherait ensuite l'apparition de la notification, qui dit a l'utilisateur : "la dll a fait ça".
    La redirection était juste un moyen, pas une fin.

    Je vais reformuler le besoin en essayant d'être plus clair :
    La dll provoque des changements sur les items ajoutés et modifiés.
    Les utilisateurs peuvent penser que ces changements ne sont pas normaux et/ou ne pas comprendre.
    Donc, à chaque fois que ces changements sont effectués,
    il faudrait que l'utilisateur soit informé automatiquement, sans qu'il ne fasse quelque chose de précis, que des changements ont été effectués en arrière plan.


    Passer un paramètre dans l'url et l'afficher en notification était juste une piste, qui semble avoir avorté a cause du comportement de la redirection.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut
    Ce que tu veux faire est impossible en l'état... ou alors je comprends pas...

    Admettons que la direction via l'EventReceiver fonctionne (pas sûr!), tu vas lancer la page d'accueil et donc tes notifs seulement pour la personne qui a fait l'action sur ta liste... les autres personnes n'auront aucune notif...

    Tu charges (via ton eventreceiver) dans une liste custom toutes les actions de ta liste que tu affiches en page d'accueil via une WebPart qui se rafraichi toutes les x secondes... faut penser à purger cette listecustom.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    Un des problèmes est que la redirection ne fonctionne pas justement

    Dans l'hypothèse que tu exposes les utilisateurs seront renvoyés vers la page d'accueil. Ça perturbera leur utilisation. S'ils doivent modifier 10 fichiers, ils vont devoir retourner dans la liste 10 fois.

    En oubliant complètement la piste de passer par une redirection, aucun moyen de lancer une popup ? Une notification ?
    Idéalement cette notification serait 100% client-side et éphémère, pas d'élément ajouté à une liste ou autre.

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut
    dsl j'avais mal lu, je croyais que c'était ton besoin d'alerter en page d'accueil.

    ce que je voulais dire, c'est que ta notification ne s'affichera seulement que pour la personne qui a modifié l'élément => peu d'intérêt...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    C'est pourtant ce qu'il faudrait
    La personne fait des modifications, on l'informe que d'autres modifications ont été faites en arrière plan. Les autres n'ont pas vraiment besoin de le savoir.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut
    Si la notification est geree 100% client side, l'event receiver qui est 100% server side (hors du flux normal de donnees) ne suffit pas.

    Un bon vieux message dans le formulaire d'insertion (e.g.: au dessus du bouton OK) qui previent l'utilisateur qu'il peut y avoir des modifs en arriere plan ne suffit-il pas?

    Si non, depuis l'ER -> un email. C'est radical.

    Ou alors, il faut soit utiliser l'ER pour mettre a jour une liste de "notifications" consommee d'une maniere ou d'une autre par un module client, tres probablement javascript.

    C'est pas un fonctionnement Push, ca me parait donc lourd juste pour ce besoin.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Par défaut
    Bonjour,

    J'ai finalement trouvé une solution à mon problème, la voici :

    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 :
    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>
    Je n'ai volontairement pas mis toute la logique car elle est a adapter en fonction des cas.


    Je peux donc contrôler la session de l'utilisateur et y mettre les messages que je veux afficher.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] envoyer une notification depuis une methode de listener
    Par mandzokich dans le forum Symfony
    Réponses: 10
    Dernier message: 02/09/2014, 20h55
  2. Impossible d'envoyer mails depuis redemarrage du serveur
    Par alex_m94 dans le forum Exchange Server
    Réponses: 2
    Dernier message: 17/03/2008, 15h26
  3. Notification depuis mySQL vers un client
    Par ZeKlubb dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/10/2007, 09h28
  4. Réponses: 2
    Dernier message: 05/11/2005, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo