0

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

实际上我想禁止电子邮件通知,所以我正在打电话a.Update(false);,但这再次调用PreUpdatePostUpdate方法并且有 StackOverFlowException:(

我已经尝试从这两种方法中返回真/假,但没有任何帮助。

4

2 回答 2

0

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

于 2010-04-07T12:24:19.343 回答
0

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;
    }

}

我已经测试过了,它似乎可以解决问题,希望这可以帮助某人:)

于 2010-06-02T20:20:02.800 回答