スプリストの電子メールノティフィクションを一時的にのみ(およびプログラム的に)非アクティブ化する

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/18032

  •  22-10-2019
  •  | 
  •  

質問

だからここに私の問題があります:

ユーザーに通知するために使用されるリストがあります。 (発表)したがって、電子メール通知がほとんどの場合機能することが不可欠です。発表(アイテム)はフォルダーに保存されるため、特定のグループのみが情報に基づいてこれらの発表を読むことができます。ここまでは順調ですね。

問題は、プログラムで新しいフォルダを追加すると、時々発生する場合、電子メール通知も送信されます。私はそれが起こることを望んでいないので、EventReceiver内でプログラムでフォルダーを作成している間、これらの通知を停止する方法はありますか? (別のリストに項目を掲載)

これを手動で行う方法を見つけましたが、コード内ではありません。 (そして忘れないでください、私は後で物事を戻す必要があります)私は通常のアップデートメソッドやその他のものの代わりに、アイテムのSystemUpDateを試しました。もちろん、イベントファイリングも無効になっていますが、何も機能しません。

PS:SharePoint Server 2010環境です。

役に立ちましたか?

解決 2

私はなんとか自分で答えを見つけることができました。

Rob D'Oraの答え(正しいことのように見えても機能しませんでした)に基づいて、アラートをオン/オフにする方法を作成しました。 (おそらく最も効率的な方法ではないかもしれませんが、それは機能します)

 public static void ToggleAlertStatus(SPWeb web, Guid listID,
     SPAlertType alertType, SPAlertStatus alertStatus)
 {
     SPSecurity.RunWithElevatedPrivileges(delegate()
     {
         using (SPWeb Web = new SPSite(web.Site.ID).OpenWeb(web.ID))
         {
             foreach (SPAlert alert in web.Alerts)
             {
                 if (alert.AlertType == alertType
                     && alert.ListID == listID
                     && alert.Status != alertStatus)
                 { // change the status if the current status is different,
                     // alert is set on the right list,
                     // and the alerttype is right, too.
                     web.AllowUnsafeUpdates = true;
                     alert.Status = alertStatus;
                     alert.Update();
                     web.AllowUnsafeUpdates = false;
                 }
             }
         }
     });
 }

「Allowunsafeupdates」と「RunwithelevededPrivileges」で少し安全にプレイしたことは知っていますが、SharePointで(特に)SAFEをプレイすることが常に良いことであることよりも(特に)1つのことを学んだことがあるなら。

他のヒント

ユーザーが独自のアラートを設定していると仮定しているので、アラートが作成されると実際にこれを処理することはできませんが、既存のアラートの動作をプログラムで変更できます。

spweb.Alertsを介して反復することをお勧めし、各スパラートオブジェクトをチェックして、リストにスコープされているかどうかを確認します(alert.alerttype == spalerttype.list && alert.listid == yourlistid)。フォルダーアイテムを除外します。このようなことを試してみてください(...実際にはテストしなかったので、YMMV):

    SPList list = SPContext.Current.Web.Lists.TryGetList("My List");
    foreach (SPAlert alert in SPContext.Current.Web.Alerts)
    {
        if (alert.AlertType == SPAlertType.List && alert.ListID == list.ID)
        {
            alert.Filter = "<Query><Neq><FieldRef Name=\"ContentType\" /><Value Type=\"Computed\">Folder</Value></Neq></Query>";
            alert.Update();
        }
    }

私は毎回これをオン/オフにすることをお勧めしないと思います...一度オンにしてオンのままにします...フィルターを適用して更新する前に最初にそこにあるかどうかを確認することもできますスパラート。

お役に立てれば。

更新:誤って設定しました タイプ整数 それ以外の 計算された. 。それが設定されています 計算された フィルター 作品。

アイテムのコンテンツタイプを確認するために、電子メール関数にロジックを配置するだけではありませんか?フォルダーのコンテンツタイプの場合は、何もしないでください。発表している場合は、メールを送信してください。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top