Добавление типа контента во все библиотеки документов - PullRequest
0 голосов
/ 04 февраля 2010

У нас есть сотни библиотек документов, распределенных по всем семействам сайтов на сайте MOSS 2007 SharePoint.

Проблема в том, что я хочу добавить тип контента для отображения в дополнение к типам контента «Новый документ» и «Новая папка»: тип контента «Ссылка на документ» (0x01010A). Этот новый тип контента должен подходить для всех существующих и новых библиотек документов.


Что я пробовал:

Я думал, что смогу добавить следующее в файл schema.xml где-то внутри узла <ContentTypes></ContentTypes>:

<!-- 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

Похоже, что это добавило тип контента в библиотеки ОК, но оно не отображается в меню «Новое» (все равно просто отображает типы контента «Документ» и «Папка»). Если я установлю «Разрешить управление типами контента?» на «Да», то он появляется.

ТЛ; др

Q: Как добавить тип содержимого «Ссылка на документ» во все библиотеки документов и отобразить его в меню «Новое»?

Ответы [ 4 ]

1 голос
/ 05 февраля 2010

Если вы знакомы с объектной моделью 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();
    }
}
0 голосов
/ 03 октября 2011

Поле URL необходимо добавить в Schema.XML в элементе. Источник может быть найден в одном из исходных файлов в каталоге Template (не могу найти его сейчас). Просто скопируйте и вставьте элемент для «URL».

0 голосов
/ 23 февраля 2010

Проведя дополнительное исследование, я обнаружил, что, изменив ..\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>

Поскольку это не изменило существующие библиотеки документов, мне нужно написать консольное приложение, которое использует код, указанный в двух других ответах, для обновления каждой библиотеки.

0 голосов
/ 05 февраля 2010

Чтобы управлять кнопками в новом меню , использовать SPFolder.UniqueContentTypeOrder свойство (SPList.RootFolder.UniqueContentTypeOrder приведет вас туда).

Чтобы добавить тип содержимого в новые библиотеки ... хм ... может быть, создать новое определение списка, добавить функцию, которая деактивирует библиотеку документов и активирует функцию пользовательской библиотеки документов? Вероятно, слишком много усилий, если вам придется изменять существующие, производственные веб-сайты SharePoint.

Кстати, нецелесообразно изменять встроенные функции (обновления могут их перезаписывать). Для этого есть элемент функции ContentTypeBinding . Однако он просто связывает ContentType с 1 списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...