题
我需要为现有解决方案中的现有列表创建项目更新事件 我刚刚检查过,并且已经有一个功能,这里的问题是对于这种类型的升级,我需要创建功能升级吗?
或者只更新解决方案+创建代码就可以了?
解决方案
您应该使用功能升级来注册新的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