我IAlertUpdateHandler
在一个类中实现了接口,并用它来处理警报的创建和更新。代码被触发,但它通过一次又一次地调用自身进入无限循环。
实际上我想禁止电子邮件通知,所以我正在打电话a.Update(false);
,但这再次调用PreUpdate
或PostUpdate
方法并且有
StackOverFlowException
:(
我已经尝试从这两种方法中返回真/假,但没有任何帮助。
我IAlertUpdateHandler
在一个类中实现了接口,并用它来处理警报的创建和更新。代码被触发,但它通过一次又一次地调用自身进入无限循环。
实际上我想禁止电子邮件通知,所以我正在打电话a.Update(false);
,但这再次调用PreUpdate
或PostUpdate
方法并且有
StackOverFlowException
:(
我已经尝试从这两种方法中返回真/假,但没有任何帮助。
根据文档,您应该只返回 true 或 false。尝试注释掉 Update 调用并返回 true 或 false。如果您调用 Update,您将进入递归循环,并且您的 return 语句将永远不会被评估。
1
我知道这可能有点晚了,但我想无论如何都要帮助下一个。
我找到了解决这个问题的方法/hack。
我相信当从 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;
}
}
我已经测试过了,它似乎可以解决问题,希望这可以帮助某人:)