在扩展的Web应用程序上使用SPListEventReceiver

时间:2013-11-12 17:51:25

标签: c# sharepoint

我有一个站点使用用于管理(后端)的Windows窗体身份验证。此站点具有使用FBA的Web扩展站点,并且是普通用户(前端)可访问的站点。

为了完成一些实现,我创建了一个自定义的SPListEventReceiver并将其附加到主要网站的一个特定列表中。

因此,当我对项目进行更改时,将抛出自定义处理程序,并且监听事件的单例更新单元素元素,并更新SharePoint列表中的更新信息。问题:没有通知扩展站点,因此驻留在扩展站点上下文中的单例不会通知SharePoint列表更改。

我如何注册SPListEventReceiver以便在扩展站点上接收项目更改通知?

班级代码

    public class CampagnasListItemEventReceiver : SPItemEventReceiver
    {
        /// <summary>
        /// An item was added.
        /// </summary>
        public override void ItemAdded(SPItemEventProperties properties)
        {
            base.ItemAdded(properties);
            // DoSomething

        }
}

Elements.xml

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers >
      <Receiver>
        <Name>CampagnasListEventReceiverListAdded</Name>
        <Type>ListAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>{Class Namespace}</Class>
        <SequenceNumber>10000</SequenceNumber>
      </Receiver>
  </Receivers>
</Elements>

有任何帮助吗? 提前谢谢。

更新:我正在使用Singleton模式将List管理为C#单例类,该类与SharePoint列表信息相关,因此在更新SharePoint列表时我需要更新该c#列表,它正在主站点上工作(后端) )但前端没有收到通知。

2 个答案:

答案 0 :(得分:0)

@rolivares - 我对您的问题的理解是,当有人在您的管理网站上添加项目时,您有一个内存列表要更新。您已使用单个对象实现了此功能。但是,当事件接收器在管理站点上触发时,列表不会在您的扩展站点(前端)上更新。

虽然2个“站点”指向相同的内容数据库,但IIS将它们作为单独的应用程序运行,因此您将拥有2个不同的单例内存列表实例。这就是为什么你的前端没有更新。

答案 1 :(得分:-1)

根据元素方案,您错过了 ListUrl

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListUrl="Lists/MyList"> <!-- ====== Modify accordingly ===== -->
      <Receiver>
        <Name>CampagnasListEventReceiverListAdded</Name>
        <Type>ListAdded</Type>
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
        <Class>{Class Namespace}</Class>
        <SequenceNumber>10000</SequenceNumber>
      </Receiver>
  </Receivers>
</Elements>

请参阅MSDN中的this example

以及MSDN Event Registration Scheme

的此链接