代码之家  ›  专栏  ›  技术社区  ›  Keith Sirmons

如何在SharePoint中更新列表的SPItemEventReceiver程序集版本?

  •  1
  • Keith Sirmons  · 技术社区  · 17 年前

    我们有一个SPItemEventReceiver编译成它自己的组件。

    我们正在使用STSDev将此EventReceiver作为功能打包为SharePoint解决方案。我不是将SPItemEventReceiver分配给elements.xml中的特定ListTemplateId,而是链接feature.xml和programmaticaly中的ReceiverAssembly将SPItemEventReceiver分配给多个SPList项。

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            foreach (SPWeb web in site.AllWebs)
            {
                SPListCollection webListCollection = web.Lists;
    
                foreach (SPList myList in webListCollection)
                {
                    if (myList.Title == "Lab Reports")
                    {
                        SPEventReceiverDefinitionCollection receivers = myList.EventReceivers;
                        SPEventReceiverDefinition receiver = receivers.Add();
                        receiver.Name = "PostUpdateLabReport";
                        receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111";
                        receiver.Class = "LabReportEventHandlers.LabReportsHandler";
                        receiver.Type = SPEventReceiverType.ItemUpdated;
                        receiver.Update();
                        break;
                    }
                }
    
                web.Dispose();
            }
        }
    

    问题:

    我应该如何处理更新LabReportEventHandler并更改版本的未来事件?

    1. 不要碰撞LabReportEventHandlers版本号。

    更改解决方案版本是否对我有所帮助?

    1. 停用该功能后,有人可以在我做出反应之前更新项目。

    2. 我不想手工编辑web.config,所以我会使用sharepoint API。我将在哪里运行该代码?

    3. 这显然是错误的,但很容易。

    3 回复  |  直到 12 年前
        1
  •  1
  •   Jason    17 年前

    也许您可以将易于更改的逻辑封装到单独的程序集中,由事件处理程序引用和使用。这样,事件处理程序本身就不必更改,只需将更新的“逻辑”程序集适当地部署到GAC或bin目录。

    嗯,, jt

        2
  •  0
  •   Bjørn Furuknap    17 年前

    为了只升级新列表,您可以将程序集信息放在单独的文件中,在FeatureActivated方法中读取该文件,然后应用新值。升级时,只需更新单独的配置文件,任何新激活都将使用新的值和版本号。

    如果需要升级旧的事件处理程序,可以执行类似的过程,但在删除旧的事件处理程序之前添加新的功能接收器。如果您使用相同的方法执行此操作,则添加新处理程序和删除旧处理程序之间的时间将非常短,并且任何人在该确切时间添加项目的可能性接近于零。如果要一直归零,可以隐藏列表或使用附加的ItemUpdated事件处理程序检查升级是否正在进行,如果正在进行,则停止更新。

    对于新列表,请从外部文件读取程序集配置

    B

        3
  •  0
  •   vitule    16 年前

    我只在需要同时执行(旧的和新的)程序集版本时才使用程序集版本控制。我从来没有在事件接收器上需要这个。因此,我不会更改事件接收器的程序集版本。