独自のアセンブリにコンパイルされた SPItemEventReceiver があります。
STSDev を使用して、この EventReceiver をフィーチャーとして SharePoint ソリューションをパッケージ化しています。SPItemEventReceiver を elements.xml 内の特定の ListTemplateId に割り当てるのではなく、feature.xml 内で ReceiverAssembly をリンクし、SPItemEventReceiver を複数の SPList アイテムにプログラムで割り当てています。
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
foreach (SPWeb web in site.AllWebs)
{
SPListCollection webListCollection = web.Lists;
foreach (SPList myList in webListCollection)
{
if (myList.Title == "Lab Reports")
{
SPEventReceiverDefinitionCollection receivers = myList.EventReceivers;
SPEventReceiverDefinition receiver = receivers.Add();
receiver.Name = "PostUpdateLabReport";
receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111";
receiver.Class = "LabReportEventHandlers.LabReportsHandler";
receiver.Type = SPEventReceiverType.ItemUpdated;
receiver.Update();
break;
}
}
web.Dispose();
}
}
私は FeatureDeactivating を使用して上記のコードの逆を行い、リストから EventReceiver を削除しています。
質問:
LabReportEventHandlers が更新され、バージョンが変更される将来のイベントをどのように処理すればよいですか?
これらは私が考えることができるオプションです:
非アクティブ化/再アクティブ化機能 -- 更新された dll を SharePoint ソリューション ファイルにラップし直し、上記のコードを変更して新しいバージョンを反映させ、stsadmin を使用してソリューションをアップグレードします。次に、機能を非アクティブ化/再アクティブ化します。
アセンブリ リダイレクトを web.config に追加します。
LabReportEventHandlers のバージョン番号を上げないでください。
ソリューションのバージョンを変更すると、何か役立つことがありますか?
3つのオプションには問題があると思います:
機能を無効にした後、私が再度有効にする前に誰かがアイテムを更新する可能性があります。
web.config を手動で編集したくないので、代わりに sharepoint API を使用します。そのコードをどこで実行しますか?
これは単純に間違っていますが、簡単です。