这是 Caml 查询的正确语法吗?
Is this the proper Syntax for Caml Querys?
我有一个像这样工作的 Caml 查询:
<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where></Query></View>
...从 Sharepoint 列表中检索 "records",其中 'ptli_TravelersEmail' 字段中的值等于传入参数的值 "payeename".
要向查询添加另一个子句,检索 "records" 前者成立的地方以及 'ptli_preparer' 字段中的值等于传入的 arg "username," 我需要重复整个 "Where.Eq.FieldRef Name.Value..Value.Eq.Where" 部分吗,像这样:
<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where><Where><Eq><FieldRef Name=\'ptli_preparer\' /><Value Type=\'Text\'>' + username + '</Value></Eq></Where></Query></View>
...或者我的语法错误?
我可以试试看,我知道,但是 Sharepoint 中的 build/run/test 过程需要相当长的时间,我希望一些 Caml 专家能马上知道。
这是 CAML query 的一般格式:
<View>
<Query>
<Where>
<Eq>
<FieldRef Name="Internal_Name_of_field" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</Where>
</Query>
</View>
<Eq>
表示 "Equals." 您还可以使用 <Neq>
(不等于)、<Lt>
(小于)、<Leq>
(小于或等于)、<Gt>
(大于)、<Geq>
(大于或等于)、<Contains>
、<IsNull>
和 <IsNotNull>
.
当您希望您的 CAML 查询具有多个条件时,您可以将其中两个组合在一组 <And>
标记 (documented here) 中。
<Where>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field1" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<Eq>
<FieldRef Name="Internal_Name_of_field2" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</And>
</Where>
您可以将 <And>
标签嵌套在其他 <And>
和 <Or>
标签中,以构建任意复杂的查询。
<Where>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field1" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field2" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<Eq>
<FieldRef Name="Internal_Name_of_field3" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</And>
</And>
</Where>
<Value>
元素中使用的确切语法可能因所比较的字段类型而异。 Type="Text"
适用于单行文本字段,但查找字段、日期字段以及个人或组字段具有不同的语法。
对于更高级的 CAML 查询,请注意 OrderBy
和 RowLimit
元素的位置:
<View>
<Query>
<Where>
<Eq>
<FieldRef Name="Internal_Name_of_field" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</Where>
<OrderBy>
<FieldRef Name="Internal_Name_of_field" />
</OrderBy>
</Query>
<RowLimit>500</RowLimit>
</View>
我有一个像这样工作的 Caml 查询:
<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where></Query></View>
...从 Sharepoint 列表中检索 "records",其中 'ptli_TravelersEmail' 字段中的值等于传入参数的值 "payeename".
要向查询添加另一个子句,检索 "records" 前者成立的地方以及 'ptli_preparer' 字段中的值等于传入的 arg "username," 我需要重复整个 "Where.Eq.FieldRef Name.Value..Value.Eq.Where" 部分吗,像这样:
<View><Query><Where><Eq><FieldRef Name=\'ptli_TravelersEmail\' /><Value Type=\'Text\'>' + payeename + '</Value></Eq></Where><Where><Eq><FieldRef Name=\'ptli_preparer\' /><Value Type=\'Text\'>' + username + '</Value></Eq></Where></Query></View>
...或者我的语法错误?
我可以试试看,我知道,但是 Sharepoint 中的 build/run/test 过程需要相当长的时间,我希望一些 Caml 专家能马上知道。
这是 CAML query 的一般格式:
<View>
<Query>
<Where>
<Eq>
<FieldRef Name="Internal_Name_of_field" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</Where>
</Query>
</View>
<Eq>
表示 "Equals." 您还可以使用 <Neq>
(不等于)、<Lt>
(小于)、<Leq>
(小于或等于)、<Gt>
(大于)、<Geq>
(大于或等于)、<Contains>
、<IsNull>
和 <IsNotNull>
.
当您希望您的 CAML 查询具有多个条件时,您可以将其中两个组合在一组 <And>
标记 (documented here) 中。
<Where>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field1" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<Eq>
<FieldRef Name="Internal_Name_of_field2" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</And>
</Where>
您可以将 <And>
标签嵌套在其他 <And>
和 <Or>
标签中,以构建任意复杂的查询。
<Where>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field1" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<And>
<Eq>
<FieldRef Name="Internal_Name_of_field2" />
<Value Type="Text">The value to filter against</Value>
</Eq>
<Eq>
<FieldRef Name="Internal_Name_of_field3" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</And>
</And>
</Where>
<Value>
元素中使用的确切语法可能因所比较的字段类型而异。 Type="Text"
适用于单行文本字段,但查找字段、日期字段以及个人或组字段具有不同的语法。
对于更高级的 CAML 查询,请注意 OrderBy
和 RowLimit
元素的位置:
<View>
<Query>
<Where>
<Eq>
<FieldRef Name="Internal_Name_of_field" />
<Value Type="Text">The value to filter against</Value>
</Eq>
</Where>
<OrderBy>
<FieldRef Name="Internal_Name_of_field" />
</OrderBy>
</Query>
<RowLimit>500</RowLimit>
</View>