我在类中实现了IAlertUpdateHandler
接口,并用它来处理警报的创建和更新。代码被解雇,但它通过一次又一次地调用自己进入无限循环。实施IAlertUpdateHandler接口时出现的问题
其实我想压制电子邮件通知,所以我打电话a.Update(false);
但这再次呼吁PreUpdate
或PostUpdate
方法并没有 StackOverFlowException
:(
我试图返回真/假由这两种方法,但没有
我在类中实现了IAlertUpdateHandler
接口,并用它来处理警报的创建和更新。代码被解雇,但它通过一次又一次地调用自己进入无限循环。实施IAlertUpdateHandler接口时出现的问题
其实我想压制电子邮件通知,所以我打电话a.Update(false);
但这再次呼吁PreUpdate
或PostUpdate
方法并没有 StackOverFlowException
:(
我试图返回真/假由这两种方法,但没有
根据documentation,你应该只是返回true或false,尝试注释掉Update调用,并返回true或false,如果你调用Update,你只需要进入递归循环和你的return语句将永远不会被评估
我知道这可能会有点迟,但我认为无论如何要帮助下一个。
我发现一个解决方案/黑客这个问题。
我相信,当从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;
}
}
我已经测试过,似乎这样的伎俩,希望这可以帮助别人:)
@Hirvox它说**,可用于防止更新或抛出SPException一个布尔值。* *我不想阻止更新,只是为了禁止订阅创建的电子邮件。 – TheVillageIdiot 2010-04-07 12:41:50