Sharepoint习题——Feature升级

Question 63
You have a SharePoint farm that has more than 100 custom Features.
You upgrade several Features in the farm.
You need to ensure that the site collection uses the most up-to-dateversions of the Features. Only Features that require an upgrade must beevaluated.
Which code segment should you use?
A. SPWebServiceCollection webServices = newSPWebServiceCollection(SPFarm.Local);
foreach (SPWebService myWebService1 in webServices)
{
SPFeatureQueryResultCollection queryResults = myWebService1.QueryFeatures(SPFeatureScope.Site,true);
IEnumerator<SPFeature> featureEnumerator =queryResults.GetEnumerator();
while (featureEnumerator.MoveNext())
{
SPFeature feature = featureEnumerator.Current;
feature.Upgrade(false);
}
}
B. SPWebServiceCollection webServices = newSPWebServiceCollection(SPFarm.Local);
foreach (SPWebService myWebService1 in webServices)
{
SPFeatureQueryResultCollection queryResults =myWebService1.QueryFeatures(SPFeatureScope.Web, true);
IEnumerator<SPFeature> featureEnumerator = queryResults.GetEnumerator();
while (featureEnumerator.MoveNext())
{
SPFeature feature = featureEnumerator.Current;
feature.Upgrade(false);
}
}
C. SPSite site = SPContext.Current.Site;
SPFeatureCollection allFeatures = site.Features;
foreach (SPFeature currentFeature in allFeatures)
{
currentFeature.Upgrade(true);
}
D. SPWeb web = SPContext.Current.Web;
SPFeatureCollection allFeatures = web.Features;
foreach (SPFeature currentFeature in allFeatures)
{
currentFeature.Upgrade(true);
}

解析:
本题的要意是:一个Farm中有许多Features,需要保证指定Site Collection所使用的指定需要升级的Features是最新版的(即:即使有某些Feature是最新版,但却不一定需要升级)
所以,注意点有二:一是如何保证在Site Collection范围内对Feature进行控制。二是如何确保:仅对那些需要升级的Feature进行评估并升级?
所以有必须要大致了解一下Feature升级:
Microsoft SharePoint Foundation 中,每个功能都具有一个在与其对应的 Feature.xml 文件中指定的版本号。在某个特定范围内激活一个功能时,会创建一个与该功能的版本关联的功能实例。利用 SharePoint Foundation 中的功能版本控制,可轻松跟踪功能及其关联实例。之后,当您部署新版本的功能时,SharePoint Foundation 检测到关联的功能也需要进行升级,因为功能实例的版本号小于当前的 Feature.xml 文件中指定的新版本号。
所以版本号是用来告知SharepointFeature是否需要升级标志的。但Sharepoint是通过什么机制来检测到关联的功能的功能号,并控件其升级操作的呢?
在运行功能升级时,Sharepoint会根据新 Feature.xml 文件中指定的升级操作对需要升级的功能实例进行升级。SharePoint Foundation 使用新的 QueryFeatures 方法,基于功能实例的版本号来确定需要升级的功能实例。新 Feature.xml 文件中有一个部分,可用于指定将特定的功能实例从早期版本升级到最新版本所需的升级操作。升级基础结构会查询需要升级的功能实例集,然后升级其中的每个功能实例。
也就是说通过QueryFeatures 方法解决本题所要求的:” 仅对那些需要升级的Feature进行评估并升级的目的。
所以进一步了解QueryFeatures方法:
新的 QueryFeatures 方法允许您通过使用一组筛选条件来查询不同作用域中的功能。SPWebServiceSPWebApplicationSPContentDatabase SPSite 类均提供一个 QueryFeatures 方法,其重载允许您指定不同的条件来确定返回哪个功能实例结果集。
1.SPWebService --
在服务器场中查找符合筛选条件的已激活的功能实例。
2.SPWebApplication --
查找符合指定筛选条件的 Web 应用程序、网站集和网站范围的功能。将针对 Web 应用程序对象中的所有内容数据库运行查询,并按照内容数据库对返回的集合进行排序。
3.SPContentDatabase --
在内容数据库中查找范围限定为网站集和网站并符合指定的筛选条件的功能。返回的集合相对于网站层次结构排序。例如,父网站的功能在子网站功能之前表示,层次结构为从上至下。
4.SPSite --
查找所有符合特定筛选条件的网站集和网站范围的功能。返回的集合按照网站层次结构排序。父网站的功能显示在子网站功能的前面,并且按照从上至下的方式安排层次结构。新的客户端对象模型中提供了此类的
Sharepoint
采用SPFeatureQueryResultCollection 类用于枚举通过 QueryFeatures 操作返回的功能。

通过这段描述,我们就清楚了,采用了哪个范围级别的QueryFeatures方法就可以影响那个范围级别的Features的升级。那么如何知道我们采用了哪个范围级别的QueryFeatures方法呢?根据上文” SPWebServiceSPWebApplicationSPContentDatabase SPSite 类均提供一个 QueryFeatures 方法, Sharepoint采用SPFeatureQueryResultCollection 类用于枚举通过 QueryFeatures 操作返回的功能。。所以焦点就聚集到怎么去获取相应范围级别的SPFeatureQueryResultCollection 类上了。获取到了那个范围级别的SPFeatureQueryResultCollection 类,就找到了那个范围级别的 仅对那些需要升级的Feature进行评估并升级负责人
Feature升级中,还有一个重要的方法:Upgrade 方法。SPFeature 类现在提供一个 Upgrade(Boolean) 方法来为所有作用域中的某个功能实例执行升级:FarmWebApplicationSite Web。在对一个从属功能实例调用 QueryFeatures 方法时,该方法首先升级相关层次结构中最高级别的功能实例,然后升级依赖该功能的所有功能实例。这种按层次结构升级的过程可确保所有从属功能实例与其所依赖的功能实例保持同步。
所以,借助Update()QueryFeatures配合,我们才能真正的完成对Feature的升级任务。

下面我们先来看选项A.B的区别:

//先是获取本地Farm中的Web Services.存放到SPWebServiceCollection对象中

SPWebServiceCollectionwebServices = new SPWebServiceCollection(SPFarm.Local);

//然后是遍历SPWebServiceCollection对象里的每一个WebService

foreach (SPWebService myWebService1 in webServices)

{

 //此处就是获取指定范围级别的Features,并存放到SPFeatureQueryResultCollection对象中。选项A获取的是Site级别(Site Collection),选项B获取的是Web级别。SPFeatureQueryResultCollectionenumerablecollection 特性的对象。Enumerable特性的对象一般提供了一组用于查询实现 IEnumerable<T> 的对象的 static方法。此处获取不同范围级别的仅对那些需要升级的Feature进行评估并升级负责人

  SPFeatureQueryResultCollection queryResults =myWebService1.QueryFeatures(【选项A :SPFeatureScope.Site】【选项 B SPFeatureScope.Web, true);

 

//依次处理此范围级别内所有的Feature,并使用SPFeature.Upgrade()方法完成升级操作。

IEnumerator<SPFeature>featureEnumerator = queryResults.GetEnumerator();

  while (featureEnumerator.MoveNext())

  {

    SPFeature feature =featureEnumerator.Current;

    feature.Upgrade(false);

  }

}

从上面的分析,可以判断选项A符合本题的解答。
至于选项C.D 首先,它们的操作都只针对当前SiteWeb。其次,Feature的升级必须要使用QueryFeaturesUpgrade结合才能完成。所以,选项C.D是做不到Feature升级的工作的。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/ee545763.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfeaturequeryresultcollection.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spfeature.upgrade.aspx


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值