实现IAlertUpdateHandler接口时出现问题

时间:2010-04-07 11:59:13

标签: sharepoint email alerts sharepoint-alerts

我在类中实现了IAlertUpdateHandler接口,并用它来处理警报的创建和更新。代码被触发但它通过一次又一次地调用自己进入无限循环。

其实我想要取消电子邮件通知,因此我正在调用a.Update(false);,但这会再次调用PreUpdatePostUpdate方法,并且 StackOverFlowException :(

我尝试从这两种方法中返回true / false但没有任何帮助。

2 个答案:

答案 0 :(得分:0)

根据documentation,你应该只返回真或假。尝试注释掉Update调用,只返回true或false。如果你调用Update,你将进入递归循环,你的return语句永远不会被评估。

答案 1 :(得分:0)

1

我知道这可能有点晚了,但我认为无论如何都要帮助下一个。

我找到了解决这个问题的方法。

我相信当从UI创建警报时,系统会触发一个SPAlert.update(),所以我想出的是做类似但是忽略从UI调用的更新来执行此操作我添加了自定义属性到SPAlert属性包。

public bool PreUpdate(SPAlert a, SPWeb web, bool newAlert, string properties)
{
    if (CHECK_IF_SUPPRESSING_EMAIL && !a.Properties.ContainsKey("CustomUpdate"))
    {
        //add a property to identify this update
        a.Properties.Add("CustomUpdate", ""); //can be called anything :)
        a.Update(false);
        //return false to ignore the update sent by the UI
        return false;
    }
    else 
    {
       //no changes here proceed with custom behaviour
       return true;
    }

}

我已经测试了,它似乎做了诀窍希望这有助于某人:)