2

SharePoint2007プロジェクトには次のシナリオがあります。30分ごとにSQLデータベーステーブルからSharePointリストを更新するタイマージョブ定義があります。

また、リストにアイテムイベントハンドラーを追加したため、ユーザーはSharePointユーザーインターフェイスからリストに新しいアイテムを追加できません。つまり、新しいリストアイテムは、SharePointオブジェクトモデルを介してタイマージョブ定義にのみ追加でき、UIから新しいアイテムを追加することはできません。

私の問題は-タイマージョブ定義から新しいアイテムを追加してもイベントハンドラーが実行されているのですが、アイテムがどのように追加されたかをイベントハンドラーでチェックできますか(オブジェクトモデルまたはユーザーインターフェイスを介して)。

どうもありがとう、Hrayr

4

3 に答える 3

2

あなたのためのいくつかのオプション。

タイマー ジョブから挿入にフラグを付ける

  • リストにフラグを設定します。「AddedFromTimerJob」のような列 (UI から非表示にすることができます) か、SPListItem.Propertiesに何かを追加します。
  • イベントレシーバーでフラグ/プロパティを確認します-存在する場合は通過させ、そうでない場合は拒否します。

またはスレッドのイベント レシーバーを無効にし、挿入を行い、イベント レシーバーを再度有効にします。

于 2011-07-20T12:03:40.583 に答える
1

まず第一に、アイテムをリストに追加しようとした後にイベントレシーバーを介してユーザーにエラーを提供するのではなく、新しいアイテムの追加を許可しない権限を設定してみませんか?

問題について - イベントの発火を一時的に無効にすることが可能です。たとえば、タイマー ジョブが実行されたら、終了するまでイベントの発生を無効にします。ただし、リストのすべてのイベント レシーバーが無効になるため、すべての状況に適しているとは限りません。ただし、ItemAdding/ItemAdded イベントで追加されたデータに対して何かを行うイベント レシーバーがない場合は機能します。

イベントの発生を一時的に無効にするためのコードは、ここで気に入ることができます。

于 2011-07-20T13:36:28.917 に答える
0

アイテム追加操作を行っているユーザーアカウントを確認できます。

タイマー ジョブを実行するアカウントの場合System.Threading.Thread.CurrentPrincipal.Identityは、SPEventPropertiesBase.Cancel =false を設定します。

于 2012-01-05T09:15:09.577 に答える