【问题标题】:Adding a Content Type to all Document Libraries向所有文档库添加内容类型
【发布时间】:2010-02-04 20:54:03
【问题描述】:

我们拥有数百个文档库,分布在 MOSS 2007 SharePoint 网站的各个网站集中。

问题是,除了“新文档”和“新文件夹”内容类型之外,我还想添加内容类型:“链接到文档”内容类型 (0x01010A)。这种新的内容类型应该适用于所有现有的和新的文档库。


我尝试过的:

我认为我可以将以下内容添加到 <ContentTypes></ContentTypes> 节点内的某个 schema.xml 中:

<!-- Link to Document Content Type -->
<ContentTypeRef ID="0x01010A" />

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\Publishing\Pages\schema.xml

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\FEATURES\DocumentLibrary\DocLib\schema.xml

这似乎已将内容类型添加到库中 OK,但它没有显示在“新建”菜单下(仍然只显示“文档”和“文件夹”内容类型)。如果我设置“允许管理内容类型?”到“是”然后它就会出现。

tl;dr

问:如何将“链接到文档”内容类型添加到所有文档库并使其显示在“新建”菜单中?

【问题讨论】:

    标签: sharepoint sharepoint-2007 moss


    【解决方案1】:

    如果您对 SharePoint 对象模型感到满意,则可以通过编程方式将内容类型添加到列表或库中。因此,您可以编写一个功能接收器,甚至只是一个控制台应用程序,以在服务器上运行,它会遍历站点内的所有列表并添加内容类型。

    您的代码如下所示:

    void AddContentTypeToList(string contentTypeId, SPSite site, SPList list)
    {
        SPContentTypeId ctid = new SPContentTypeId(contentTypeId);
        SPContentType ct = site.RootWeb.ContentTypes[ctid];
        if (list.ContentTypes[ct.Name] == null)
        {
            list.ContentTypes.Add(ct);
            list.Update();
        }
    }
    

    【讨论】:

    • 迪伦,感谢您的回答。不幸的是,这不能满足我的要求。内容类型不会显示在“新建”菜单中,并且在创建新文档库时不会包含该内容类型。
    【解决方案2】:

    manage buttons in new menu,使用SPFolder.UniqueContentTypeOrder 属性(SPList.RootFolder.UniqueContentTypeOrder 将带您到达那里)。

    要将内容类型添加到新库...嗯...也许创建新的列表定义,添加停用文档库并激活您的自定义文档库功能的功能?如果您必须修改现有的生产 SharePoint 网站,可能需要付出太多努力。

    顺便说一句,修改内置功能是不明智的(更新可以覆盖它们)。为此目的,有一个ContentTypeBinding 功能元素。但是它只是将 ContentType 绑定到 1 个列表。

    【讨论】:

    • 谢谢。我想知道如何将内容类型添加到新按钮。我真的希望我不必编写控制台应用程序来管理所有库上的内容类型(会变得非常难看)。我需要调查 ContentTypeBinding。
    • “将内容类型添加到新按钮”到底是什么意思?此屏幕截图是否表达了您的需求:img40.imageshack.us/img40/8552/ss20100208104600.png?如果是这样,这就是 UniqueContentTypeOrder 属性的用途。
    • 对不起...不是很清楚。您答案中的代码看起来应该适用于向“新建”按钮添加内容类型。 :)
    【解决方案3】:

    在进行更多调查后,我发现通过更改 ..\12\TEMPLATE\FEATURES\DocumentLibrary\DocLib\schema.xml 我可以将链接到文档内容类型添加到所有新文档库。更改 schema.xml 然后执行 IISRESET 不会更改现有库。

    为了做到这一点,我的 schema.xml 的开头看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
    <List xmlns:ows="Microsoft SharePoint" Title="$Resources:shareddocuments_Title;" Direction="$Resources:Direction;" Url="Shared Documents" BaseType="1" EnableContentTypes="TRUE">
      <!-- Link to Document Content Type - Added EnableContentTypes="TRUE" -->
      <MetaData>
        <ContentTypes>
          <ContentTypeRef ID="0x0101">
            <Folder TargetName="Forms/Document" />
          </ContentTypeRef>
          <ContentTypeRef ID="0x0120" />
          <!-- Link to Document Content Type -->
          <ContentTypeRef ID="0x01010A" />
        </ContentTypes>
    

    由于这并没有改变现有的文档库,我需要编写一个控制台应用程序,使用其他两个答案中指定的代码来更新每个库。

    【讨论】:

      【解决方案4】:

      需要将 URL 字段添加到元素中的 Schema.XML 中。源代码可以在 Template 目录中的一个源文件中找到(现在无法查找)。只需复制粘贴“URL”的元素即可。

      【讨论】:

      • 这与我在回答中发布的内容不同吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多