私は、サイトコレクション全体を通して少数のリストに使用されていたサイトコンテンツタイプを持っています。そのコンテンツタイプでは、ItemAddingイベントを処理するイベントレシーバーについて説明します。これは正常に動作します。これでItemUpdatingも処理できるようにコンテンツタイプを更新する必要があります。 OTTOMH、簡単にバージョンを追跡できるように思えたので、コンテンツタイプのXMLを単純に変更しようとしました。これは、私の更新がサイトのコンテンツタイプに適用されたが、このコンテンツタイプを使用していた私のリストには適用されなかったという意味で機能しました。これは多くのことが期待された。あなたがインストールされ を持っており、その内容 タイプをアクティブにした後、どのような状況下では既に展開されているSharePointコンテンツタイプを更新して、追加のアイテムイベントを処理します。
はあなたがコンテンツタイプのコンテンツタイプ定義 ファイルを更新 必要があります。そして、私は、SharePoint SDKは、そのgrim viewを取ることに気づきました。 Windows SharePoint Servicesは コンテンツに加えられた変更を追跡しません 型定義ファイル。したがって、 には、 のサイトコンテンツタイプの変更を子コンテンツタイプ にプッシュダウンする方法がありません。
SDKは、UIまたはコードを使用して変更をプッシュする方法を説明する2つのセクションを示しています。 UIはイベント受信者にフックを提供しないので、私はコードパスを選択すると思います。
私はこのような何かを、ちょうどコンテンツタイプのリストのコピーに新しいイベントレシーバーを追加することができるだろうと思った:
SPList list = web.Lists["My list"];
SPContentType ctype = list.ContentTypes["My content type"];
// Doesn't work -- EventReceivers is null below.
ctype.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
しかし、漁獲量がctype.EventReceiversがここにnullであるということです私はItemAddingを既にこのリストにフックアップしています。それはリスト自体に移動されたようです。したがって、リストには有効なEventReceiversコレクションがあります。だから、
SPList list = web.Lists["My list"];
list.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
、私はカップルの質問がある:
- はちょうど直接リストに新しいイベントレシーバーを追加し、ちょうど完全に私のコンテンツタイプを忘れるこれを行うには正しい方法ですか?
- この変更を行うには、これを構成管理の点でどのように処理するのが最適ですか?適切なリストをすべて見つけてそれぞれを変更するための簡単なコンソールアプリケーションを作成する必要がありますか?または、何らかの形でFeatureをより良い選択肢にしていますか?いずれにしても、この変更は独自のものではなく、このコンテンツタイプで作業する必要のある将来の開発者によって発見するのが難しいようです。
良い質問:私は類似のものを尋ねることを意味してきました。 –