我们有一个复杂的场景,需要在内容部署到SP 2010网站集后运行计时器作业。计时器作业自动停用/重新激活品牌功能,该功能负责设置网站集的母版页等。
我们在此过程中进行了多项功能升级,并忽略了对该特定网站集中的功能调用.Update()。因此,所有更新的CSS,母版页,页面布局等都在SC上过时了。
奇怪的是,当我在此SC中检查该功能的版本号时,它显示为最新版本。自定义升级操作显然没有运行和更新文件,因为没有人调用.Upgrade()。
我的一位同事建议,计时器作业完成的停用/重新激活过程会更新版本号,这意味着我不能再调用Upgrade()!
这是真的吗?功能的停用/重新激活周期是否会自动更新功能版本号?
有没有一种简单的方法来解决这个烂摊子?某种以编程方式递减版本号的方法,然后调用Upgrade()??
答案 0 :(得分:0)
开1:否。功能停用/激活不会触发更新。请参阅Chris O'布莱恩:http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html
功能升级不会自动发生(包括 功能已停用/重新激活)!升级功能的唯一方法 是调用SPFeature.Upgrade(),通常与其中一个一起调用 QueryFeatures()方法。我将继续讨论的工具是 一个自定义应用程序页面,可以帮助您完成此部分 - 请注意 没有STSADM命令,PowerShell cmdlet或用户界面来执行此操作 外的现成。
您的计时器作业是否使用Force
循环功能激活?然后,是的,它正在触发功能升级/功能更新,请参阅SPFeature.Activate
的以下屏幕截图(请参阅我的黄色标记):
为什么功能版本会增加,我不确定。如果您有功能,安装新功能版本并激活/停用,功能版本将保持不变,除非您运行升级,请参阅此相关问题,说明相同:https://sharepoint.stackexchange.com/questions/41476/feature-upgrading-question
我猜你的计时器工作正在使用force
?否则,我不太确定发生了什么。
On 2:不知道是否可以减少版本号,但最安全的方法是创建一个新版本,包括一个盛大的"清理"特征接收器设置一切正确,即检查特征升级的哪些步骤已经发生(例如,创建了新列表,添加了新的内容类型)以及哪些没有。取决于它,只是再次执行尚未执行的相同步骤。对于后一部分,您可以幸运地使用现有代码,因此您只需要"清理"或检查代码。
答案 1 :(得分:0)
经过一些测试后,我发现简单地停用和重新激活该功能会增加版本号并完全搞砸升级!我甚至在内容数据库中看到了更新。一旦停用/重新激活更新的功能,新版本号就会弹出到内容数据库中。当然升级实际上并没有运行,只是增加了版本号。
这意味着,如果您再调用.Upgrade(),它就不会起作用,因为SharePoint认为它已经升级了!!
为了解决这个问题,我更新了内容数据库中的行,将特征版本的特征版本设置回0.0.0.0,然后我可以运行.Upgrade()就好....但那不是完全支持的解决方案。如果其他人有更好的主意,请回复。