如何修改SharePoint网站,以便默认情况下在文档库中打开版本控制?
版本控制不是在站点级别完成,而是在列表级别完成.
如果要在每个新库上打开版本控制,则必须:
使用您自己的库模板(打开版本控制)
使用功能+事件处理程序以编程方式激活每个新列表上的版本控制
最简单的方法可能是使用您自己的模板.为此,请创建新文档库,激活版本控制,然后将此列表另存为模板.
创建新列表时,您将能够使用模板并直接创建激活版本控制的列表.
您当然可以创建自己的网站定义,但这可能不是最佳解决方案.创建自定义库模板也会起作用,但如果要为特定网站定义为您创建的库启用版本控制,则必须提供其他内容.
我们碰巧为我们的SharePoint实现做了这个.我们决定最好的方法是创建一个事件处理程序功能并将其装订到所有站点,以便在创建站点时,将为所有现有文档库启用版本控制.当然,新文档库将获得创建它的用户设置的任何版本选项.
我们遇到的问题是没有"ListCreating"事件处理程序,因此我们无法在此时打开版本控制.因此,我们尝试将代码放在FeatureActivated事件处理程序中,确定它将在创建站点时激活,然后可以更改所有文档库以打开版本控制.问题是在实际创建库之前触发了此事件.
因此,我们决定将代码放入"ItemAdding"事件处理程序,并在第一次运行后将其删除.因此,当用户第一次添加列表项或文档时,它将为站点中的所有文档库启用版本控制.这样,我们确保用户无法在没有版本化的情况下将文档添加到现有库.此外,在添加项目之前创建的任何库也将默认启用版本控制.
这是一个多毛的解决方案,但它对我们来说非常有效.这是我们使用的代码:
public class SetVersioning : SPItemEventReceiver { public override void ItemAdding(SPItemEventProperties properties) { SPWeb CurrentWeb = properties.OpenWeb(); foreach (SPDocumentLibrary doclib in CurrentWeb.GetListsOfType(SPBaseType.DocumentLibrary)) { doclib.EnableVersioning = true; doclib.MajorVersionLimit = 8; //doclib.EnableMinorVersions = true; doclib.Update(); } //now get rid of the receiver SPEventReceiverDefinitionCollection receivers = CurrentWeb.EventReceivers; foreach (SPEventReceiverDefinition definition in receivers) { if (definition.Name.Equals(EVENT_RECEIVER_NAME)) { definition.Delete(); break; } } base.ItemAdding(properties); } }