【问题标题】:Problem in implementing IAlertUpdateHandler interface实现 IAlertUpdateHandler 接口的问题
【发布时间】:2010-04-07 11:59:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: sharepoint email alerts sharepoint-alerts


    【解决方案1】:

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

    【讨论】:

    • @Hirvox 它说 一个布尔值,可用于阻止更新或引发 SPException。 我不想阻止更新,只是为了禁止创建订阅电子邮件。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 2011-03-19
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多