Question

Alors, voici mon problème:

J'ai une liste qui est utilisée à l'utilisateur notificate. (Annonces) Il est donc essentiel que les notifications de courrier électronique fonctionnent pour la plupart du temps. L'annonce (articles) s'enregistrées dans des dossiers, de sorte que seuls des groupes spécifiques et peuvent s'informer dans ces annonces. Jusqu'à présent, si bon.

Le problème est, quand j'ajouter de nouveaux dossiers par programme, ce qui arrive de temps en temps, la notification par courrier électronique obtient envoyer aussi. Je ne veux pas que cela se produise, donc est-il possible d'arrêter ces notifications pendant que je crée le dossier dans un programme EventReceiver? (ItemAdded sur une autre liste)

J'ai trouvé des façons de le faire manuellement, mais pas dans mon code. (Et ne pas oublier, je dois changer les choses plus tard) J'ai essayé le SystemUpdate sur l'élément au lieu de la mise à jour méthode normale et d'autres choses. Event-feu est désactivé bien sûr, aussi, mais rien ne fonctionne.

P.S. Il est un environnement SharePoint Server 2010

Était-ce utile?

La solution 2

J'ai réussi à trouver une réponse moi-même, enfin presque atleast.

D'après la réponse de Rob D'Ora (qui n'a pas travaillé, même si elle ressemblait à la bonne chose), je créé une méthode pour transformer des alertes on / off. (Peut-être pas la façon la plus efficace, mais cela fonctionne)

 public static void ToggleAlertStatus(SPWeb web, Guid listID,
     SPAlertType alertType, SPAlertStatus alertStatus)
 {
     SPSecurity.RunWithElevatedPrivileges(delegate()
     {
         using (SPWeb Web = new SPSite(web.Site.ID).OpenWeb(web.ID))
         {
             foreach (SPAlert alert in web.Alerts)
             {
                 if (alert.AlertType == alertType
                     && alert.ListID == listID
                     && alert.Status != alertStatus)
                 { // change the status if the current status is different,
                     // alert is set on the right list,
                     // and the alerttype is right, too.
                     web.AllowUnsafeUpdates = true;
                     alert.Status = alertStatus;
                     alert.Update();
                     web.AllowUnsafeUpdates = false;
                 }
             }
         }
     });
 }

Je sais que je joue un peu en sécurité avec « AllowUnsafeUpdates » et les « RunWithElevatedPrivileges », mais si j'appris une chose (surtout) avec SharePoint que c'est que la sécurité de jeu est toujours une bonne chose.

Autres conseils

Je suppose que vous avez des utilisateurs mettre en place leurs propres alertes, de sorte que vous ne pouvez pas vraiment gérer ce que les alertes sont créées, mais vous pouvez modifier le comportement des alertes existantes programatically.

Je recommande Itère SPWeb.Alerts, vérifiez chaque objet SPAlert pour voir si elle est portée définie à votre liste (alert.AlertType == == SPAlertType.List && alert.ListID YourListID), puis définir la propriété de filtre à un requête qui filtrer dossier articles. Essayez quelque chose comme ça (... ne fait pas test, donc YMMV):

    SPList list = SPContext.Current.Web.Lists.TryGetList("My List");
    foreach (SPAlert alert in SPContext.Current.Web.Alerts)
    {
        if (alert.AlertType == SPAlertType.List && alert.ListID == list.ID)
        {
            alert.Filter = "<Query><Neq><FieldRef Name=\"ContentType\" /><Value Type=\"Computed\">Folder</Value></Neq></Query>";
            alert.Update();
        }
    }

Je ne pense pas que je recommanderais de faire le tour / désactiver cette chaque fois ... allumer une fois et laissez-le ... vous pouvez également vérifier si le filtre est-il avant d'appliquer et mise à jour du SPAlert.

Hope this helps.

Mise à jour: Je l'avais mal réglé Type Entier au lieu de Computed . Avec elle sur Computed Filtre travaux.

Souhaitez-vous pas juste besoin de mettre une certaine logique dans votre fonction e-mail pour vérifier le type de contenu de l'article? Si elle est de type de contenu du dossier, ne rien faire, si c'est l'annonce, envoyez l'e-mail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top