我需要为现有解决方案中的现有列表创建项目更新事件 我刚刚检查过,并且已经有一个功能,这里的问题是对于这种类型的升级,我需要创建功能升级吗?

或者只更新解决方案+创建代码就可以了?

有帮助吗?

解决方案

您应该使用功能升级来注册新的EventReceiver。

只是创建代码不会告诉SharePoint调用EventReceiver您必须在任何一个元素中执行此操作。xml文件使用 <Receivers> 元素或通过代码在正确的EventReceivers集合中创建新元素

对于以下示例,假设您正在升级到verion7.0.0.0。

卡姆尔
要在CAML中添加事件接收器,您的功能。xml应该是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<Feature ... Version="7.0.0.0">
  <UpgradeActions>
    <VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
      <ApplyElementManifests>
        <ElementManifest Location="MyNewEventReceiver\Elements.xml" />
      </ApplyElementManifests>
    </VersionRange>
  <UpgradeActions>
  ...
  <ElementManifest Location="MyNewEventReceiver\Elements.xml" />
</Feature>

有了新的元素。xml在升级和新激活时都被应用

密码
要在功能的代码中添加事件接收器。xml应该是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<Feature ...   ReceiverAssembly="XXX" ReceiverClass="YYY" Version="7.0.0.0">
  <UpgradeActions>
    <VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
      <CustomUpgradeAction Name="AddNewEventReceiver" />
    </VersionRange>
  <UpgradeActions>
  ...
</Feature>

在FeatureReceiver中,您将拥有如下代码:

public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  switch (upgradeActionName)
  {
    case "AddNewEventReceiver":
      // Add EventReceiver;
      break;
    ...
  }
}

public override virtual void FeatureActivated(SPFeatureReceiverProperties properties)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  ...
  // Add EventReceiver;
  ...
}

public override virtual void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  ...
  // Remove EventReceiver;
  ...
}

添加EventReceiver的代码在升级时使用ActionName="AddNewEventReceiver"以及新激活时运行。当然,在停用时删除它。

要在代码中添加eventReceiver,请使用类似:

parentWeb.Lists[_listName].EventReceivers.Add(_eventType, Assembly.GetExecutingAssembly().FullName, _eventReceiverClassName);

其他提示

特征在功能进入升级状态时触发,只有在该功能升级时才会触发(即:安装版本大于激活版本)。

通过克里斯o'brien的博客系列有关功能升级,以获得更多了解功能升级工作原理: http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-- -fundamentals.html

许可以下: CC-BY-SA归因
scroll top