Scope= Sight 또는 Scope= Web Web For Web Parts & Event Receiver를 각각 배포하는 방법은 무엇입니까?
-
09-12-2019 - |
문제
나는 단지 1 개의 Visual Studio 프로젝트가 있습니다.
DocumentLibrary 및 다중 WebParts 1 EventReceiver가 있습니다. 프로젝트의 feature.xml 파일의 Scope= 사이트를 정의했습니다.
IVERRECEIVER에서 1 개의 사용자 정의 기능을 만들었습니다. 모든 이벤트가 내 문서 라이브러리에 추가 / 업데이트 / 삭제됩니다.
프로젝트에서 오른쪽에 올바르게 배치 할 때 모든 것이 잘 작동하지만 모든 페이지를 만들 때 또는 모든 항목이 내 모든 사용자 정의 목록에 추가 될 때 eventReceiver도 화재가됩니다.DocumentLibrary에서 생성되지만. 그것의 오류가 없지만 다시 전화를 걸고 싶지 만 다시 전화를 걸고 싶습니다.
그러나 F5에 의해 프로젝트를 디버깅 할 때 eventReceiver에서 오류가 발생했습니다.
EventReceiver의 Scope= Web을 배포하는 경우 문제를 해결할 수 있지만 Scope= Site와 함께 웹 파트를 배포해야합니다.
싱글 배포 로이 문제를 해결하는 방법
해결책
두 번째 기능을 프로젝트에 추가 할 수 있습니다.이 경우 두 개의 기능이있는 솔루션 패키지가 하나의 기능을 갖추고 있습니다 (첫 번째 사이트 범위 기능, 두 번째 웹 범위 기능은 웹 범위 기능입니다).사이트 범위 기능에서 웹 파트를 포함 할 수 있습니다.이를 수행하려면 기능 폴더를 클릭하고 새 기능 추가 옵션을 선택해야합니다.
다른 팁
이벤트 리시버를 사용자 정의 목록을 사용할 수있는 문서 라이브러리 템플리트에 묶여있는 의심스럽게도 이벤트 수신자가 두 목록 인스턴스 모두에 바인딩됩니다.
이벤트 수신기를 특정 목록에 바인딩 해야하는 경우 일반적으로 피쳐 활성화 및 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();
}
.