2010-04-07 26 views
0

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

其实我想压制电子邮件通知,所以我打电话a.Update(false);但这再次呼吁PreUpdatePostUpdate方法并没有 StackOverFlowException :(

我试图返回真/假由这两种方法,但没有

回答

0

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

+0

@Hirvox它说**,可用于防止更新或抛出SPException一个布尔值。* *我不想阻止更新,只是为了禁止订阅创建的电子邮件。 – TheVillageIdiot 2010-04-07 12:41:50

0

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

我发现一个解决方案/黑客这个问题。

我相信,当从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; 
    } 

} 

我已经测试过,似乎这样的伎俩,希望这可以帮助别人:)