实现 IAlertUpdateHandler 接口的问题

发布于 2024-08-27 14:28:51 字数 272 浏览 6 评论 0原文

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

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

我尝试从这两种方法返回 true/false 但没有任何帮助。

I've implemented IAlertUpdateHandler interface in a class and used it for handling creation and updating of alerts. The code is fired but it goes into endless loop by calling itself again and again.

Actually I want to suppress email notification so I'm calling a.Update(false); but this again calls PreUpdate or PostUpdate method and there is
StackOverFlowException :(

I've tried returning true/false from both the methods but nothing is helping.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱要勇敢去追 2024-09-03 14:28:51

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

According to the documentation, you're supposed to just return true or false. Try commenting out the Update call and just return either true or false. If you call Update, you'll just go into the recursive loop and your return statement will never get evaluated.

神妖 2024-09-03 14:28:51

正如我在此处发布的:

我知道这可能有点晚了,但我认为无论如何都可以帮助下一个一。

我找到了这个问题的解决方案/黑客。

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

}

我已经测试过,它似乎可以解决问题。

As I posted here:

I know that it might be a bit late for this but I thought put it anyway to help the next one.

I found a solution/hack for this problem.

I beleive that when the alert is created from the UI the system fires an SPAlert.update(), so what I came up with is to do similar but ignore the update called from the UI to do that I added a custom property to the SPAlert property bag.

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

}

I have tested and it seems to do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文