【问题标题】:SharePoint 2010 Item Updating EventSharePoint 2010 项目更新事件
【发布时间】:2011-10-12 21:15:40
【问题描述】:

我正在尝试创建一个 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()”,它在更新列表时永远不会触发 - 而不是“我的列表”。所以即使“我的列表”更新了一个项目,我的检查也不会运行。

我的元素.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 方法之外,该功能中的其他所有内容都可以正常工作。

【问题讨论】:

  • 您能否检查您部署的 elements.xml 并确保 $SharePoint.Project.AssemblyFullName$ 实际显示您的程序集?
  • 您可以使用http://spm.codeplex.com 并检查它是否正确部署在SP 中

标签: sharepoint sharepoint-2010


【解决方案1】:

您的“我的列表”是使用开箱即用的自定义列表创建的吗?仅当您的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多