SharePoint中默认的版本控制

时间:2008-10-08 11:36:55

标签: sharepoint

如何修改SharePoint网站,以便默认情况下在文档库中启用版本控制?

2 个答案:

答案 0 :(得分:7)

版本控制不是在站点级别完成,而是在列表级别完成。

如果要在每个新库上启用版本控制,则必须:

  • 使用您自己的库模板(打开版本控制)
  • 使用功能+事件处理程序以编程方式激活每个新列表上的版本控制

最简单的方法可能就是使用自己的模板。为此,请创建一个新的文档库,激活版本控制,然后将此列表另存为模板。

当您创建新列表时,您将能够使用您的模板并直接创建一个激活版本控制的列表。

答案 1 :(得分:5)

您当然可以创建自己的网站定义,但这可能不是最佳解决方案。创建自定义库模板也会起作用,但如果您希望为特定网站定义为您创建的库启用版本控制,则必须提供其他内容。

我们碰巧为我们的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);
    }
}