2011-10-11 107 views
0

我正試圖創建一個ItemUpdating事件來檢查一些列表中的潛在問題。然而,item事件似乎並沒有觸發,即使調試對ItemUpdating(..)的調用也不起作用,就好像該方法從未被調用一樣。SharePoint 2010項目更新事件

事件代碼:

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"; 
       } 
      } 
     } 
    } 
} 

如果我調試的「公共覆蓋無效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

您可以檢查部署elements.xml中,並確保 $ SharePoint.Project.AssemblyFullName $實際上顯示您的程序集? –

+0

您可以使用[http://spm.codeplex.com](http://spm.codeplex.com/)並檢查,是否正確部署在SP – MishaU

回答

0

是否使用開箱即用的自定義列表創建了「我的列表」?當您的接收器元素定義爲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> 
相關問題