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

如何查询SharePoint中使用特定内容类型的所有列表?,sharepoint,sharepoint-2007,caml,Sharepoint,Sharepoint 2007,Caml,我有以下CAML查询: <Where> <And> <Eq> <FieldRef Name='PublishToSM' /> <Value Type='Boolean'>True</Value> </Eq> <IsNull> <FieldRef Name

我有以下CAML查询:

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

符合事实的
我只有一种使用这些字段的内容类型。当我对使用此内容类型的列表运行此查询时,一切正常。当我对一个不正确的列表运行它时,它抛出错误:
一个或多个字段类型未正确安装。转到列表设置页面删除这些字段。


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

使用SPSiteDataQuery,添加where子句以包含内容类型。i、 e:

<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>

内容类型名称
符合事实的
内容类型ID

SPSiteDataQuery
Scope
属性设置为SiteCollection。通过设置
列表
属性,您还可以将搜索范围限制在例如文档库等。可以设置
查看字段
属性以限制检索到的字段(即,代替项目字段上的等效
选择*

使用SPSiteDataQuery,添加where子句以包括内容类型。i、 e:

<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>

内容类型名称
符合事实的
内容类型ID

SPSiteDataQuery
Scope
属性设置为SiteCollection。通过设置
列表
属性,您还可以将搜索限制为例如文档库等。可以设置
查看字段
属性来限制检索的字段(即,代替对项目字段的
选择*

嗯,这似乎可以工作,但是在使用
ListItem.Update
之前,我使用了我的方法在找到字段后更新它。如果切换到
SPSiteDataQuery
,我能做到这一点吗?此外,我注意到它需要很长时间才能运行。这正常吗?它运行了大约40分钟,然后在我厌倦使用SPSiteDataQueryNot时给了我一个“服务器内存不足”的错误。它不应该需要很长时间,要更新需要包含在查询的ViewFields中的字段。您还可以尝试将ContentType子句更改为我在editHmm中输入的内容,这似乎可以工作,但是在使用
ListItem.Update
之前,我使用了我的方法在找到字段后更新它。如果切换到
SPSiteDataQuery
,我能做到这一点吗?此外,我注意到它需要很长时间才能运行。这正常吗?它运行了大约40分钟,然后在我厌倦使用SPSiteDataQueryNot时给我一个“服务器内存不足”错误。这不应该需要很长时间,要更新需要包含在查询的ViewFields中的字段,您还可以尝试将ContentType子句更改为我在编辑中输入的内容