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

Я пытаюсь использовать веб-часть «Запрос контента» для создания страницы «Что нового» в 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 Ответ

2 голосов
/ 05 августа 2011

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