所以这是我的问题:

我有一个用于通知用户的列表。 (公告)因此,在大多数情况下,电子邮件通知必须工作。公告(项目)被保存在文件夹中,因此只有特定的小组才能通知并可以阅读这些公告。到目前为止,一切都很好。

问题是,当我以编程方式添加新文件夹(偶尔会发生)时,电子邮件通知也会发送出去。我不希望发生这种情况,因此,当我在EventReceiver中以编程方式创建文件夹时,是否有任何方法可以停止这些通知? (在另一个列表上添加项目)

我找到了一些手动执行此操作的方法,但不在我的代码中。 (而且不要忘记,我需要稍后再重新更改)我尝试了该项目的Systemuptate,而不是正常的更新方法和其他一些内容。当然,事件射击也是禁用的,但没有任何效果。

PS:这是SharePoint Server 2010环境。

有帮助吗?

解决方案 2

我设法自己找到了一个答案,几乎至少。

根据Rob d'Ora的答案(即使看起来像是正确的事情),我创建了一种打开/关闭警报的方法。 (也许不是最有效的方法,但起作用)

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

我知道我在“ allowunsafeupdates”和“ runwitheleveedprivileges”中玩耍有些安全,但是如果我学到了一件事(尤其是),那就是SharePoint比Share Play Safe总是一件好事。

其他提示

我假设您有用户设置自己的警报,因此在创建警报时无法真正处理此警报,但是您可以按编程更改现有警报的行为。

我建议通过spweb.alerts进行迭代,检查每个spalert对象以查看是否范围范围范围(alert.alerttype == spalerttype.list && alist.list.listid == yourlistid),然后将过滤器属性设置为询问属性过滤文件夹项。尝试这样的事情(...实际上没有测试,所以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();
        }
    }

我不认为我建议每次打开/关闭此操作...将其打开一次并打开...您也可以检查一下过滤器是否首先在使用之前,然后进行更新并进行更新Spalert。

希望这可以帮助。

更新:我设置了错误 类型整数 代替 计算. 。它设置为 计算筛选 作品。

您不需要在电子邮件功能中放置一些逻辑即可检查项目的内容类型吗?如果是文件夹内容类型,则无所事事,如果是公告,请发送电子邮件。

许可以下: CC-BY-SA归因
scroll top