事件接收器未触发 - 文档库

时间:2014-09-11 17:03:25

标签: c# visual-studio sharepoint-2013 sharepointdocumentlibrary event-receiver

我的VM中有一个本地开发环境。(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 =&#34; 101&#34; ,我没有得到任何错误。但事件接收器没有触发。当我删除时,&#34; Log&#34;列表未更新。我错过了什么吗?

  2. 如果我在ListUrl中提供文档库名称,我会收到错误

  3.   
        

    &#34;部署步骤发生错误&#39;激活功能&#39;:列表&#34; Doclib&#34;不存在。请修复ListUrl属性。

      

    请就正确的方法提出建议。 为什么事件接收器没有触发?

    提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否希望为所有文档库触发此事件接收器。 如果不是,最好的办法是在sharepoint项目的功能激活部分注册事件reiver。

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 :(得分:0)

我认为在这种情况下你需要解决两件事,

  1. 更新列表项alsp后更新List本身,你还应该在更新列表之前使web.allunsfaeupdates = true,并在listitem更新后将其设为false。
  2. 另一个问题是你已经注释掉了//base.ItemDeleting(property);

    请取消注释,它可以解决您的问题。

    关于第二个问题,

    它将要求列表的URI而不是列表名称生成列表的路径并提供它然后它将起作用。

    让我知道结果

    由于