CAML Query新增OR条件不生效,如何正确查询SharePoint列表指定数据?
问题原因
你当前的CAML查询不符合语法规则,<Where>节点下仅允许存在1个顶级逻辑节点(<And>/<Or>),你将两组独立的<And>逻辑直接并列放在<Where>下,新增的OR条件会被直接忽略,这是查询不生效的核心原因。另外原有查询里写死的Place=Vincente, New Port, CA条件也会过滤掉你需要的其他数据。
修正后的查询逻辑
根据你的需求,所有查询的前置固定条件为Library=Packaging、Level=A,三个目标场景为或的关系,整理逻辑如下:
- 场景1:AssignedTo(人员字段)匹配 Marshall, Kim
- 场景2:Line=Pure 且 Any Local(对应字段名AnyPlace)为Yes
- 场景3:Any Line为Yes 且 Any Local为Yes
可用的CAML查询代码
<Query> <ViewFields> <FieldRef Name="AssignedTo" /> </ViewFields> <Where> <!-- 顶级And:先匹配固定的Library和Level条件 --> <And> <Eq> <FieldRef Name='Library' /> <Value Type='Lookup'>Packaging</Value> </Eq> <And> <Eq> <FieldRef Name='Level' /> <Value Type='Choice'>A</Value> </Eq> <!-- 三个目标场景为或的关系 --> <Or> <!-- 场景1:匹配指定人员 --> <Eq> <FieldRef Name='AssignedTo' /> <Value Type='User'>Marshall, Kim</Value> </Eq> <Or> <!-- 场景2:Line=Pure 且 Any Local为Yes --> <And> <Eq> <FieldRef Name='Line' /> <Value Type='Lookup'>PURE</Value> </Eq> <Eq> <FieldRef Name='AnyPlace' /> <Value Type='Boolean'>1</Value> </Eq> </And> <!-- 场景3:Any Line为Yes 且 Any Local为Yes --> <And> <Eq> <FieldRef Name='AnyLine' /> <Value Type='Boolean'>1</Value> </Eq> <Eq> <FieldRef Name='AnyPlace' /> <Value Type='Boolean'>1</Value> </Eq> </And> </Or> </Or> </And> </And> </Where> </Query>
注意事项
如果你的“Any Line”字段的内部名称不是AnyLine、“Any Local”字段内部名称不是AnyPlace,需要把代码中对应的FieldRef Name替换为你实际的字段内部名,避免查询报错。
内容的提问来源于stack exchange,提问作者amber amber
相关产品推荐
相关产品推荐

