Как запросить все списки, которые используют определенный тип контента в SharePoint? - PullRequest
0 голосов
/ 13 января 2011

У меня есть следующий запрос CAML:

   <Where>
      <And>
         <Eq>
            <FieldRef Name='PublishToSM' />
            <Value Type='Boolean'>True</Value>
         </Eq>
         <IsNull>
            <FieldRef Name='SMUpdateDate' />
         </IsNull>
      </And>
   </Where>

У меня есть только один тип контента, который использует эти поля. Когда я запускаю этот запрос для списка, который использует этот тип контента, все работает нормально. Когда я запускаю его со списком, который не выдает ошибку: One or more field types are not installed properly. Go to the list settings page to delete these fields.

Я бы хотел иметь возможность поиска по всем спискам на всех веб-сайтах семейства сайтов. Можно ли это сделать без ошибок?

1 Ответ

4 голосов
/ 13 января 2011

Используйте SPSiteDataQuery, добавьте предложение where для включения типа контента.Например:

<Where>
  <And>
    <Eq>
      <FieldRef Name='ContentType' />
      <Value Type='Text'>CONTENTTYPE NAME</Value>
    </Eq>
    <And>
      <Eq>
         <FieldRef Name='PublishToSM' />
         <Value Type='Boolean'>True</Value>
      </Eq>
      <IsNull>
        <FieldRef Name='SMUpdateDate' />
      </IsNull>
    </And>
  </And>
</Where> 

<BeginsWith>
  <FieldRef Name='ContentTypeId' />
  <Value Type='ContentTypeId'>CONTENTTYPE ID</Value>
</BeginsWith>

Установите для свойства SPSiteDataQuery Scope значение SiteCollection.Установив свойство Lists, вы также можете ограничить поиск, например, библиотеками документов и т. Д. Свойство ViewFields можно установить для ограничения извлекаемых полей (т.е. вместо эквивалента select * для полей элементов)

...