Frage

Also hier ist mein Problem:

Ich habe eine Liste, die verwendet wird, um den Benutzer zu benachrichtigen. (Ankündigungen) Es ist daher wichtig, dass die E -Mail -Benachrichtigungen die meiste Zeit funktionieren. Die Ankündigung (Elemente) wird in Ordnern gespeichert, sodass nur bestimmte Gruppen informiert werden und diese Ankündigungen lesen können. So weit, ist es gut.

Das Problem ist, wenn ich programmgesteuert neue Ordner hinzufüge, was gelegentlich passiert, wird auch die E -Mail -Benachrichtigung versendet. Ich wünsche mir nicht, dass das passieren soll. Gibt es also eine Möglichkeit, diese Benachrichtigungen zu stoppen, während ich den Ordner programmgesteuert in einem EventReciver erstelle? (Element auf einer anderen Liste)

Ich habe einige Möglichkeiten gefunden, dies manuell zu tun, aber nicht in meinem Code. (Und um nicht zu vergessen, ich muss die Dinge später wieder ändern) Ich habe das SystemUpdate am Gegenstand anstelle des normalen Update-Methodens und einigen anderen Dingen ausprobiert. Event-Firing ist natürlich auch deaktiviert, aber nichts funktioniert.

PS: Es ist eine SharePoint Server 2010 -Umgebung.

War es hilfreich?

Lösung 2

Ich habe es geschafft, selbst eine Antwort zu finden, fast mindestens mindestens.

Basierend auf der Antwort von Rob D'Oras (die nicht funktioniert hat, obwohl es nach dem Richtigen aussah), habe ich eine Methode erstellt, um Warnungen ein-/auszuschalten. (Vielleicht nicht der effizienteste Weg, aber es funktioniert)

 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;
                 }
             }
         }
     });
 }

Ich weiß, dass ich ein bisschen sicher mit "DenunSafeUpdates" und den "runwitheLevatedPrivilegeges" gespielt habe, aber wenn ich eine Sache (vor allem) mit SharePoint gelernt habe, ist es immer eine gute Sache.

Andere Tipps

Ich gehe davon aus, dass Benutzer ihre eigenen Warnungen einrichten, sodass Sie dies nicht wirklich bearbeiten können, wenn die Warnungen erstellt werden, aber Sie können das Verhalten vorhandener Warnungen programmatisch ändern.

Ich würde empfehlen, spweb.alerts zu iterieren und jedes Spalert -Objekt zu überprüfen, um festzustellen, ob es in Ihre Liste gescopt ist Filtern Sie die Ordnerelemente heraus. Probieren Sie so etwas aus (... ... hat tatsächlich nicht getestet, also 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();
        }
    }

Ich glaube nicht der Spalert.

Hoffe das hilft.

Update: Ich hatte falsch eingestellt Typ zu Ganze Zahl Anstatt von Berechnet. Damit eingestellt auf Berechnet das Filter Arbeiten.

Müssten Sie nicht nur eine Logik in Ihre E -Mail -Funktion einfügen, um den Inhaltstyp des Elements zu überprüfen? Wenn es sich um einen Ordnerinhaltstyp handelt, senden Sie nichts, wenn es sich um Ankündigung handelt, die E -Mail.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top