Приемник событий не запускается - библиотека документов
У меня есть локальная среда разработки на моей виртуальной машине (SharePoint Server 2013 SP1,Visual Studio Ultimate 2013-update3). Я пытаюсь добавить приемник событий в библиотеку документов на ItemDeleting. Удаление документа в doc lib добавит элемент в мой пользовательский список 'Log'. Вот мое кодирование:
Event.cs
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace SharePointProject1.EventReceiver1
{
public class EventReceiver1 : SPItemEventReceiver
{
public override void ItemDeleting(SPItemEventProperties properties)
{
//base.ItemDeleting(properties);
using (SPWeb web = properties.OpenWeb())
{
try
{
SPList list = web.Lists["Log"];
SPListItem newItem = list.Items.Add();
newItem["Title"] = properties.ListItem.Name;
newItem["DateAndTime"] = System.DateTime.Now;
newItem["Action"] = "Item Deleted";
newItem.Update();
}
catch (Exception ex)
{
throw ex;
}
}
}
element.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- <Receivers ListTemplateId="101" > -->
<Receivers ListUrl ="Doclib"
<Receiver>
<Name>EventReceiver1ItemDeleting</Name>
<Type>ItemDeleting</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>SharePointProject1.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
Feature1.Template.xml
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
</Feature>
Я развернул решение на сайте SP и активировал эту функцию.
Итак, у меня есть два вопроса,
Когда я использую код ListTemplateId="101", я не получаю никакой ошибки. Но получатель события не запускается. Когда я удаляю, список "Журнал" не обновляется. Я что-то пропустил?
Если я даю имя библиотеки документов в ListUrl, я получаю сообщение об ошибке
"Произошла ошибка на этапе развертывания" Активировать компоненты ": список"Doclib"не существует. Пожалуйста, исправьте атрибут ListUrl.
Пожалуйста совет по правильному подходу. Почему приемник событий не срабатывает?
Заранее спасибо.
2 ответа
Вы хотите, чтобы этот приемник событий сработал для всех библиотек документов. если нет, лучше всего зарегистрироваться для получения события в разделе активированных функций проекта sharepoint.
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb oWeb = (SPWeb)properties.Feature.Parent;
SPList list=oWeb.List["ListNameorDocLibName"];
list.EventReceivers.Add(_theeventRecieverType, Assembly.GetExecutingAssembly ().FullName, "EventReceiverProject1.EventReceiver1.EventReceiver1");
list.Update();
}
Если вы поступите таким образом, вам не нужно беспокоиться об URL-адресе, а приемник событий определенно сработает.
Я думаю, что в этом случае нужно решить две вещи,
- После обновления элемента списка alsp обновите сам список, и вы должны также сделать web.allunsfaeupdates = true перед обновлением списка и сделать его ложным после обновления списка.
Еще одно, что вы закомментировали строку //base.ItemDeleting(properties);
пожалуйста, раскомментируйте, что это может решить вашу проблему.
По второму вопросу
Для этого потребуется URI для списка, а не имя списка, создайте путь для списка и укажите его, и тогда он будет работать.
Дайте мне знать результат
Спасибо