0

クラスにインターフェイスを実装IAlertUpdateHandlerし、それを使用してアラートの作成と更新を処理しました。コードは起動されますが、自分自身を何度も呼び出すことで無限ループに入ります。

実際にはメール通知を抑制したいので呼び出してa.Update(false);いますが、これも呼び出しPreUpdateまたはPostUpdateメソッドであり、 StackOverFlowException:(

両方のメソッドから true/false を返そうとしましたが、何も役に立ちません。

4

2 に答える 2

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

}

私はテストしました、そしてそれはこれが誰かを助けることを願ってトリックをするようです:)

于 2010-06-02T20:20:02.800 に答える
0

documentationによると、trueまたはfalseを返すだけです。Update 呼び出しをコメントアウトして、true または false を返すようにしてください。Update を呼び出すと、再帰ループに入るだけで、return ステートメントは評価されません。

于 2010-04-07T12:24:19.343 に答える