如何查询在SharePoint中使用特定内容类型的所有列表?

时间:2011-01-13 17:57:58

标签: sharepoint sharepoint-2007 caml

我有以下CAML查询:

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

我只有一种使用这些字段的内容类型。当我针对使用此内容类型的列表运行此查询时,一切正常。当我针对没有它的List运行它时会抛出错误:One or more field types are not installed properly. Go to the list settings page to delete these fields.

我希望能够搜索网站集中所有网站上的所有列表。这可以在没有错误的情况下完成吗?

1 个答案:

答案 0 :(得分:4)

使用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&#39; s Scope属性设置为SiteCollection。通过设置Lists属性,您还可以将搜索范围限制为实例文档库等。ViewFields属性可以设置为限制检索的字段(即,而不是等同于select *在项目的领域)