2

我想写一个CAML查询执行以下操作:使用CAML <Or>和<And>运营商

获取其中_ModerationStatus被批准的所有行。

获取_ModerationStatus被拒绝的所有行,并且该行的请求者是当前用户,或者该行的Manager是当前用户。

获取_ModerationStatus处于挂起状态且行的请求者是当前用户的所有行,或者行的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>运营商,因为更简单像这样的三个查询都为我工作:

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

回答

3

我结束了这个有效CAML使用U2U Caml Query Builder

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