Приемник событий не запускается - библиотека документов

У меня есть локальная среда разработки на моей виртуальной машине (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 и активировал эту функцию.

Итак, у меня есть два вопроса,

  1. Когда я использую код ListTemplateId="101", я не получаю никакой ошибки. Но получатель события не запускается. Когда я удаляю, список "Журнал" не обновляется. Я что-то пропустил?

  2. Если я даю имя библиотеки документов в 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-адресе, а приемник событий определенно сработает.

Я думаю, что в этом случае нужно решить две вещи,

  1. После обновления элемента списка alsp обновите сам список, и вы должны также сделать web.allunsfaeupdates = true перед обновлением списка и сделать его ложным после обновления списка.

Еще одно, что вы закомментировали строку //base.ItemDeleting(properties);

пожалуйста, раскомментируйте, что это может решить вашу проблему.

По второму вопросу

Для этого потребуется URI для списка, а не имя списка, создайте путь для списка и укажите его, и тогда он будет работать.

Дайте мне знать результат

Спасибо

Другие вопросы по тегам