我在类中实现了IAlertUpdateHandler
接口,并用它来处理警报的创建和更新。代码被触发但它通过一次又一次地调用自己进入无限循环。
其实我想要取消电子邮件通知,因此我正在调用a.Update(false);
,但这会再次调用PreUpdate
或PostUpdate
方法,并且
StackOverFlowException
:(
我尝试从这两种方法中返回true / false但没有任何帮助。
答案 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;
}
}
我已经测试了,它似乎做了诀窍希望这有助于某人:)