2

我正在尝试编写执行以下操作的 CAML 查询:

获取 _ModerationStatus 已批准的所有行。

获取 _ModerationStatus 为 Rejected 且该行的 Requester 为当前用户或该行的 Manager 为当前用户的所有行。

获取 _ModerationStatus 为 Pending 且该行的 Requester 为当前用户或该行的 Manager 为当前用户的所有行。

到目前为止,我有这个 CAML 查询,但是当我运行它时,我得到了错误Cannot complete this action. Please try again.

<View>
<Query>
    <Where>
        <Or>
            <Eq>
                <FieldRef Name='_ModerationStatus' />
                <Value Type='ModStat'>Approved</Value>
            </Eq>
            <Or>
                <And>
                    <Eq>
                        <FieldRef Name='_ModerationStatus' />
                        <Value Type='ModStat'>Pending</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name='Requester' />
                        <Value Type='Integer'><UserID /></Value>
                    </Eq>
                </And>
                <And>
                    <Eq>
                        <FieldRef Name='_ModerationStatus' />
                        <Value Type='ModStat'>Pending</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name='Manager' />
                        <Value Type='Integer'><UserID /></Value>
                    </Eq>
                </And>
            </Or>
            <Or>
                <And>
                    <Eq>
                        <FieldRef Name='_ModerationStatus' />
                        <Value Type='ModStat'>Rejected</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name='Requester' />
                        <Value Type='Integer'><UserID /></Value>
                    </Eq>
                </And>
                <And>
                    <Eq>
                        <FieldRef Name='_ModerationStatus' />
                        <Value Type='ModStat'>Rejected</Value>
                    </Eq>
                    <Eq>
                        <FieldRef Name='Manager' />
                        <Value Type='Integer'><UserID /></Value>
                    </Eq>
                </And>
            </Or>
        </Or>
    </Where>
</Query>
</View>

我很确定我没有正确应用<Or>and<And>运算符,因为像这三个这样的简单查询对我有用:

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='_ModerationStatus' />
                <Value Type='ModStat'>Approved</Value>
            </Eq>
        </Where>
    </Query>
</View>

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='_ModerationStatus' />
                <Value Type='ModStat'>Rejected</Value>
            </Eq>
        </Where>
    </Query>
</View>

<View>
    <Query>
        <Where>
            <Eq>
                <FieldRef Name='_ModerationStatus' />
                <Value Type='ModStat'>Pending</Value>
            </Eq>
        </Where>
    </Query>
</View>
4

1 回答 1

3

我最终使用U2U Caml Query Builder得到了这个有效的 Caml 。

<Query>
<Where>
  <Or>
     <Eq>
        <FieldRef Name='_ModerationStatus' />
        <Value Type='ModStat'>Approved</Value>
     </Eq>
     <Or>
        <And>
           <Eq>
              <FieldRef Name='_ModerationStatus' />
              <Value Type='ModStat'>Rejected</Value>
           </Eq>
           <Or>
              <Eq>
                 <FieldRef Name='Requester' />
                 <Value Type='User'>
                    <UserID />
                 </Value>
              </Eq>
              <Eq>
                 <FieldRef Name='Manager' />
                 <Value Type='User'>
                    <UserID />
                 </Value>
              </Eq>
           </Or>
        </And>
        <And>
           <Eq>
              <FieldRef Name='_ModerationStatus' />
              <Value Type='ModStat'>Pending</Value>
           </Eq>
           <Or>
              <Eq>
                 <FieldRef Name='Requester' />
                 <Value Type='User'>
                    <UserID />
                 </Value>
              </Eq>
              <Eq>
                 <FieldRef Name='Manager' />
                 <Value Type='User'>
                    <UserID />
                 </Value>
              </Eq>
           </Or>
        </And>
     </Or>
  </Or>
</Where>
<OrderBy>
  <FieldRef Name='EventDate' Ascending='True' />
</OrderBy>
</Query>
<ViewFields>
    <FieldRef Name='Title' />
    <FieldRef Name='Location' />
    <FieldRef Name='EventDate' />
    <FieldRef Name='EndDate' />
    <FieldRef Name='Description' />
    <FieldRef Name='Requester' />
    <FieldRef Name='Manager' />
</ViewFields>
<QueryOptions />
于 2014-07-17T14:53:02.913 回答