我的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网站上部署了解决方案并激活了该功能。
所以我有两个问题,
当我使用代码时 - ListTemplateId =&#34; 101&#34; ,我没有得到任何错误。但事件接收器没有触发。当我删除时,&#34; Log&#34;列表未更新。我错过了什么吗?
如果我在ListUrl中提供文档库名称,我会收到错误
&#34;部署步骤发生错误&#39;激活功能&#39;:列表&#34; Doclib&#34;不存在。请修复ListUrl属性。
请就正确的方法提出建议。 为什么事件接收器没有触发?
提前致谢。
答案 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)
我认为在这种情况下你需要解决两件事,
另一个问题是你已经注释掉了//base.ItemDeleting(property);
请取消注释,它可以解决您的问题。
关于第二个问题,
它将要求列表的URI而不是列表名称生成列表的路径并提供它然后它将起作用。
让我知道结果
由于