我正在尝试创建一个ItemUpdating事件,以检查几个列表中的某些潜在问题。然而,item事件似乎根本没有触发,即使调试对ItemUpdating(..)的调用也不起作用,就好像永远不会调用该方法一样。
活动代码:
namespace MyEvent.EventReceiver1
{
public class EventReceiver1 : SPItemEventReceiver
{
public override void ItemUpdating(SPItemEventProperties properties)
{
base.ItemUpdating(properties);
// ... my code testing column BeforeProperties vs AfterProperties
if (properties.ListTitle == "My List")
{
if (properties.BeforeProperties["some field"] != properties.AfterProperties["some field"])
{
properties.Cancel = true;
properties.ErrorMessage = "Please do not alter some field in my list";
}
}
}
}
}
如果我调试“public override void ItemUpdating()”,它在更新列表时永远不会触发 - 而不是“我的列表”。因此,即使“我的列表”更新项目,我的支票也永远不会运行。
我的elements.xml:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="100">
<Receiver>
<Name>EventReceiver1ItemUpdating</Name>
<Type>ItemUpdating</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>MyEvent.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>
请注意,这个事件接收器实际上要复杂得多。它会在一些相当深入的功能上触发几个不同的事件。除了上面的ItemUpdating和ItemDeleting方法之外,该功能中的其他所有功能都可以正常工作。
答案 0 :(得分:0)
是否使用开箱即用的自定义列表创建了“我的列表”?当您的Receivers元素定义为ListTemplateId="100"
时,您的事件接收器将仅处理这些类型的列表。要测试事件接收器,请尝试创建新的自定义列表,并检查更新项目时是否触发事件。
如果此事件接收器仅用于一个特定列表,则可以将元素定义更改为:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListUrl="Lists/MyListUrl">
<Receiver>
<Name>EventReceiver1ItemUpdating</Name>
<Type>ItemUpdating</Type>
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
<Class>MyEvent.EventReceiver1.EventReceiver1</Class>
<SequenceNumber>10000</SequenceNumber>
</Receiver>
</Receivers>
</Elements>