Scope= SightまたはScope= Web Parts&Event Receiverでそれぞれ機能を展開する方法は?
-
09-12-2019 - |
質問
私は1つのVisual Studioプロジェクトのみを持っています。
それは1 eventreceiver(DocumentLibrary用)と複数のWebPartsを含みます。 Scope= Project.xmlファイルのサイトを定義しました。
私はEventReceiverで1カスタム関数を作成しました。
プロジェクトを右クリックして展開すると、すべてがうまく機能していますが、私の任意のカスタムリストに任意の項目を追加すると、EventReceiverも発砲します。DocumentLibraryに作成されていますが。 それは私にエラーを与えないが、私はそれをもう一度呼び出したいと思っています。
しかし、私がF5によってプロジェクトをデバッグするとき、私はEventReceiverでエラーを取得しています。これはすべてのイベントで呼び出されたことを意味します。
EventReceiverのscope= Webを展開すると、問題が解決する可能性がありますが、Scope= SiteのWebPartsも展開する必要があります。
それでは、この問題を単一の展開で解決する方法?
解決
プロジェクトに2番目の機能を追加できます。この場合、2つの機能を持つソリューションパッケージが1つあります(最初はサイトスコープ機能があり、2番目のSecondはWebスコープ機能です)。サイトスコープ機能では、Webパーツを含めることができます。これを行うには、[機能]フォルダをクリックして[新機能の追加]オプションを選択します。
他のヒント
私はあなたがイベント受信者をドキュメントライブラリテンプレートにバインドしたと思われる。カスタムリストも使用することができるので、イベント受信者は両方のリストインスタンスにバインドされています。
イベント受信者を特定のリストにバインドする必要がある場合は、コード内で、通常は機能の有効化とCODDを介してこのような機能を介して行います。
protected static void AddEventReceiverToList(string name, string className, SPList list, string assemblyName, SPEventReceiverType eventReceiverType, SPEventReceiverSynchronization eventReceiverSynchronization)
{
if (name == null) throw new ArgumentNullException("name");
if (className == null) throw new ArgumentNullException("className");
if (list == null) throw new ArgumentNullException("list");
if (assemblyName == null) throw new ArgumentNullException("assemblyName");
SPEventReceiverDefinitionCollection eventReceiverDefinitionCollection = list.EventReceivers;
foreach (SPEventReceiverDefinition eventReceiverDefinition in eventReceiverDefinitionCollection)
{
if (eventReceiverDefinition.Name == name)
{
return;
}
}
SPEventReceiverDefinition eventReceiver = eventReceiverDefinitionCollection.Add();
eventReceiver.Name = name;
eventReceiver.Synchronization = eventReceiverSynchronization;
eventReceiver.Type = eventReceiverType;
eventReceiver.Assembly = assemblyName;
eventReceiver.Class = className;
eventReceiver.Update();
}
.