Как развернуть функцию с помощью SCOPE= VIESE или SCOPE= WEB для веб-частей и приемника событий соответственно?
-
09-12-2019 - |
Вопрос
У меня есть только 1 проект Visual Studio.
Он содержит 1 eventReceiver (для документированияLibrary) и нескольких веб-панель. Я определил Scope= сайт файла проекта.
Я создал 1 пользовательскую функцию в EventReceiver, которые звонки на каждом событии - это огонь, либо добавить / обновить / удалить в моем документе документа.
Когда я развернул его, вернувшись на проект, все работает нормально, но когда я создаю любую страницу или любой элемент, добавляется в мой любой CustomList, а затем eventreceiver - это пожары.Хотя он создан на документированииLibrary. Это не дает мне никакой ошибки, но я не хочу называть это снова.
Но когда я отладку проекта на F5, то я получаю ошибку в EventReceiver, потому что ее называется несколько раз означает на каждом событии.
Если я развернул Scope EventReceiver= Web, то может быть, это будет решать проблему, но мне нужно развернуть веб-панели также с Scope= Site.
Так как решить эту проблему одним развертыванием?
Решение
Вы можете добавить вторую функцию в проект.В этом случае у вас будет один пакет решений с двумя функциями (сначала - это функция Scoped сайта, вторая - это веб-функция Scoped).В объекте Scoped 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();
}
.