EventReceiver を SharePoint サイトのすべてのリストに添付する
-
12-09-2019 - |
質問
リストが更新されたときに起動されるイベントレシーバーを作成できますか。イベントレシーバーに指定する必要がある listtemplateid により、コードは 1 種類のリストに特化したものになります。サイトのすべてのリストのイベントに対してコードを実行したい場合はどうすればよいでしょうか?
解決
私もまったく同じ要件を持っています。
イベントレシーバーをシステムにアタッチできる可能性があります ContentType
(すべてのコンテンツ タイプは、ID 0x のコンテンツ タイプを継承します)
それが可能かどうかを確認するには、FeatureReceiver を使用してフィーチャーを作成し、それをプログラムでシステム コンテンツ タイプに追加します。いくつかの詳細 ここ.
解決策を見つけるまでの私の道のり
さて、コンソールアプリでいくつかのテストを行いました。
- 追加してみました
EventReceiver
システムへ (0x). 。すべての子要素を更新する ContentType.Update(true,false) メソッドを呼び出しました - システムもContentType
更新も子もありません. 。これらの contentType を変更できないことがわかりました。ReadOnly
||Sealed
に設定された属性TRUE
- EventReceiver を項目 (0x01) に追加しようとしました
ContentType
. 。ここから見ると、すべてContentTypes
まだそのものを継承しています(を参照) ContentType 階層)。System から継承するカスタム展開されたコンテンツ タイプは存在する場合がありますが、GUI で作成されたコンテンツ タイプは存在しません。このコンテンツ タイプを更新すると、すべての子が実際に更新されますContentTypes
(これらを除くすべてのコンテンツ タイプReadOnly
またはSealed
)
グローバル EventReceiver をすべてのアイテムにアタッチする方法
したがって、機能する解決策は次のようになります。
- すべてのリストを繰り返し、設定します
Readonly
またはSealed
これらのコンテンツ タイプを一緒に持ちたい場合は false に設定しますEventReceivers
. - を追加してください
EventReceiver
リスト内の既存のコンテンツ タイプ (SPList.ContentTypes
) - EventReceiver を ContentType に追加 (
SPWeb.ContentTypes
) ID が 0x01 であるため、新しいリストには EventReceiver が自動的に追加されます。新しく作成されたコンテンツ タイプも継承されますEventReceivers
. 。すべてのサブウェブもContentTypes
継承するEventReceivers
.
3 つのステップはすべて、コンソール アプリケーションまたは PowerShell スクリプトにすることができます。または、サイト コレクション全体の機能 FeatureReceiver
結果
PS C:\Documents and Settings\Administrator> $web.contentTypes |ft id, name, EventReceivers, readonly, sealed
Id Name EventReceivers ReadOnly Sealed
-- ---- -------------- -------- ------
0x Sistēma {} False True
0x007F1DD730DB144C84... Darba kārtības vēsture {} True True
0x01 Ieraksts {, , , ...} False False
0x01003420C661289843... Darba kārtības ieraksts {, , , ...} False False
0x0101 Dokuments {, , , ...} False False
0x010100629D00608F81... Office datu savienoj... {} True False
0x010100B4CBD48E029A... Universālais datu sa... {} True False
0x010101 Veidlapa {, , , ...} False False
0x010102 Attēls {, , , ...} False False
0x010104 Nezināms dokumenta tips {} True False
0x010105 Lapu šablons {, , , ...} False False
0x010107 Lietotāja darbplūsma... {, , , ...} False False
0x010108 Wiki lapa {, , , ...} False False
0x010109 Pamatlapa {, , , ...} False False
0x01010901 Web daļu lapa {, , , ...} False False
0x01010A Saistīt ar dokumentu {, , , ...} False False
0x01010B Dublinas pamata kolo... {, , , ...} False False
0x0102 Notikums {, , , ...} False False
0x0103 Diskutējamais jautājums {, , , ...} False False
0x0104 Paziņojums {, , , ...} False False
0x0105 Saite {, , , ...} False False
0x0106 Kontaktpersona {, , , ...} False False
0x0107 Ziņojums {, , , ...} False False
0x0108 Uzdevums {, , , ...} False False
0x0108007122AD6D76CD... Darba kārtības uzdevums {, , , ...} False False
0x010801 Darbplūsmas uzdevums {, , , ...} False False
0x010802 Administratīvs uzdevums {, , , ...} False False
0x0109 Darbplūsmas vēsture {, , , ...} False False
0x010A Person {, , , ...} False False
0x010B SharePointGroup {, , , ...} False False
0x010C DomainGroup {, , , ...} False False
0x0110 Ziņa {, , , ...} False False
0x0111 Komentārs {, , , ...} False False
0x0116 Tālo Austrumu līgums {, , , ...} False False
0x0120 Mape {} False True
0x012001 RootOfList {} False True
0x012002 Diskusija {, , , ...} False False
申し訳ありませんが、私の WSS はローカライズされていますが、{, , , ...} は、コンテンツ タイプにいくつかのイベントレシーバーを追加したことを意味します。ご覧のとおり、 Readonly
または Sealed
属性 False は変更されません。
所属していません StackOverflow