Как получить веб-часть запроса контента для отображения элементов из нескольких типов списков?

Я пытаюсь использовать веб-часть "Запрос контента" для создания страницы "Что нового" в 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, будет намного проще, чем это.

Может кто-нибудь указать, что я делаю не так? Может быть, я все делаю не так? Я ценю любую помощь, которую любой может оказать мне!

1 ответ

Я обнаружил, что проблема заключалась во всех "дополнительных" полях, заполненных SharePoint.

В моем случае я начал с настройки веб-части запроса контента на странице, а затем экспортировал ее для получения xml. Затем я помещаю XML в мой файл onet.xml определения моего сайта. Первоначально это работало нормально, но, поскольку я пытался настроить базовые типы, он не работал должным образом.

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

Вот определение веб-части, которое я использовал в своем файле onet.xml:

<AllUsersWebPart WebPartZoneID="WebPartZone" WebPartOrder="1">
      <![CDATA[                
    <webParts>
      <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
        <metaData>
          <type name="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
          <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
        </metaData>
        <data>
          <properties>
            <property name="Title" type="string">Recently Updated Documents</property>
          <property name="ChromeType" type="chrometype">TitleOnly</property>
          <property name="ChromeState" type="chromestate">Normal</property>
              <property name="WebUrl" type="string">~site</property>
          <property name="BaseType" type="string">1</property>
              <property name="ContentTypeBeginsWithId" type="string">0x0101008B0856395DCD40F99C9B42B6BF92BDDB</property>
          <property name="FilterField1" type="string">{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}</property>
          <property name="FilterType1" type="string">DateTime</property>
          <property name="FilterOperator1" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterFieldQueryOperator, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">Geq</property>
          <property name="FilterDisplayValue1" type="string">-14</property>
          <property name="FilterValue1" type="string">-14</property>
          <property name="SortBy" type="string">{8c06beca-0777-48f7-91c7-6da68bc07b69}</property>
          <property name="SortByFieldType" type="string">DateTime</property>
          <property name="SortByDirection" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+SortDirection, Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">Desc</property>
          <property name="ItemXslLink" type="string">~sitecollection/Style Library/DealerPortal/ItemStyle.xsl</property>
          <property name="CommonViewFields" type="string">Name,Text;Created,DateTime;Modified,DateTime;Body,Note;DocumentIconImageUrl;OnClickForWebRendering</property>
        </properties>
      </data>
      </webPart>
      </webParts>             
      ]]>      

    </AllUsersWebPart>
Другие вопросы по тегам