C# 事件接收器未启动-文档库
我的虚拟机中有一个本地开发环境。(SharePoint server 2013 SP1,Visual Studio Ultimate 2013-update3)。我正在尝试在ItemDelete时将事件接收器添加到文档库。将文档删除到文档库会将项目添加到我的自定义列表“日志”中。下面是我的编码: Event.csC# 事件接收器未启动-文档库,c#,visual-studio,sharepoint-2013,sharepointdocumentlibrary,event-receiver,C#,Visual Studio,Sharepoint 2013,Sharepointdocumentlibrary,Event Receiver,我的虚拟机中有一个本地开发环境。(SharePoint server 2013 SP1,Visual Studio Ultimate 2013-update3)。我正在尝试在ItemDelete时将事件接收器添加到文档库。将文档删除到文档库会将项目添加到我的自定义列表“日志”中。下面是我的编码: Event.cs using System; using System.Security.Permissions; using Microsoft.SharePoint; using M
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>
我认为在这种情况下你需要解决两件事
更新列表项后,alsp将更新列表本身,您还应在更新列表前将web.allunsfaeupdates设置为true,并在更新列表项后将其设置为false
另一件事是注释掉了行//base.itemdeleding(properties)
请取消注释,它可能会解决您的问题
关于第二个问题
它将需要列表的URI而不是列表名生成列表的路径并提供它,然后它将工作
让我知道结果
谢谢是否要为所有文档库启动此事件接收器。
如果没有,最好是在sharepoint项目的功能激活部分注册event 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和事件接收者会被触发
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();
}