Я пытаюсь использовать веб-часть «Запрос контента» для создания страницы «Что нового» в Sharepoint 2010. Цель этой страницы - показать все документы, которые были загружены за последние 14 дней. Хитрость заключается в том, что эти документы могут принадлежать к любому числу списков, которые определены в любом количестве определений списков. Это пользовательские определения списков, основанные на пользовательских типах контента. У нас есть базовый тип контента, от которого наследуется каждый из наших пользовательских типов контента. Они также являются частью одной группы типов контента. Я определил, что невозможно использовать пользовательский интерфейс SP для настройки CQWP для возврата элементов из нескольких типов списков, поскольку одним из обязательных полей запроса является тип списка. Итак - я пытаюсь использовать CAML для определения этого CQWP, и вот тут у меня проблемы. Моя конечная цель - определить CAML в определении сайта (файл onet.xml), но мне также не повезло с загрузкой файла .webpart из пользовательского интерфейса SP. Я нашел несколько статей, которые объясняют, как это должно быть сделано, но не смог заставить предложенные решения работать. В этой статье MSDN говорится, что это возможно, используя элемент ListsOverride. Вот как статья говорит мне сделать это:
<![CDATA[
<Lists BaseType="0">
</Lists> ]]>
Поскольку я ищу библиотеки документов, я бы использовал базовый тип 1, а не 0.
Мне не удалось определить синтаксис того, как это будет выглядеть на самом деле, из файла onet.xml, поэтому я подумал, что начну с попытки загрузить его в виде файла .webpart.
Вот как выглядит элемент ListsOverride:
<property name="ListsOverride" type="string">
<![CDATA[<Lists BaseType="1"></Lists>]]>
</property>
Однако - как только я загружаю файл .webpart с этим в CAML и добавляю веб-часть на страницу, я ломаю эту страницу в Sharepoint. Вот что я получаю:
Ошибка сервера в «/» приложении.
Попытка использовать объект, который прекратил существование.
Исследование этой ошибки указывает мне на код, который избавляется от объекта, такого как SPContext.Current.Web, но у меня здесь вообще нет никакого кода. Похоже, что в CQWP есть ошибка. ИЛИ - Я либо неправильно форматирую этот CAML, либо мне нужно что-то изменить в другом элементе CAML?
Я использую Sharepoint 2010 SP1 со всеми последними исправлениями. (Я верю)
Я пробовал несколько других форматов, но без везения.
Я пытался избавиться от встроенных тегов CDATA, например:
<property name="ListsOverride" type="string">
<Lists BaseType="1"></Lists>
</property>
Но тогда Sharepoint не позволит мне загрузить файл .webpart. (Неверный файл .webpart)
Формат со встроенными тегами CDATA, кажется, единственный способ, которым я могу загрузить файл.
Я пытался (только ради того, чтобы сузить мою проблему), чтобы указать конкретные списки, подобные этому:
<property name="ListsOverride" type="string">
<![CDATA[<Lists><List Id="{5a2f79bb-cc82-4171-88ac-65f20e7b5fa8}" /></Lists>]]>
Это не ломает страницу, но веб-часть дает мне менее чем полезную ошибку на странице (Невозможно отобразить эту веб-часть)
Я не уверен на 100%, что использовал соответствующий GUID в этой попытке. Я получил его, посмотрев в обозревателе серверов в Visual Studio (в разделе Списки и библиотеки >> Библиотеки документов >> Тип моего списка. (Я получил GUID из свойства Id)
Я должен отметить, что я довольно новичок в разработке Sharepoint. Я бы надеялся, что что-то настолько важное, что делает Sharepoint, будет намного проще, чем это.
Может кто-нибудь указать, что я делаю не так? Может быть, я все делаю не так? Я ценю любую помощь, которую мне может дать каждый!