我有以下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.
我希望能够搜索网站集中所有网站上的所有列表。这可以在没有错误的情况下完成吗?
答案 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 *
在项目的领域)