【问题标题】:Using the CAML <Or> and <And> Operators使用 CAML <Or> 和 <And> 运算符
【发布时间】:2014-09-08 10:16:32
【问题描述】:

我正在尝试编写执行以下操作的 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>

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

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

【问题讨论】:

    标签: logical-operators caml sharepoint-list sharepoint-online


    【解决方案1】:

    我最终使用 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 />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2020-12-17
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多