【问题标题】:AND OR AND CAML query in SharePointSharePoint 中的 AND OR AND CAML 查询
【发布时间】:2015-04-09 00:58:22
【问题描述】:

想不出一个好的方法来做到这一点。我在 SharePoint 中有一个视图,我想使用(A 和 B)或(A 和 C)之类的查询进行过滤。我正在尝试在 Sharepoint Designer 中用 CAML 编写此内容,但无处可去。这是我第一次使用 CAML,所以没有帮助。到目前为止,这是我想出的:

<Where>
           <And>
                <Or>
                     <And>
                          <Eq>
                               <FieldRef Name="Component" />
                               <Value Type="Text">ComponentX</Value>
                          </Eq>
                          <Eq>
                               <FieldRef Name="Review_x0020_Canceled" />
                               <Value Type="Boolean">0</Value>
                          </Eq>
                     </And>
                </Or>
                <Eq>
                     <FieldRef Name="Component" />
                     <Value Type="Text">ComponentX</Value>
                </Eq>
                <IsNull>
                     <FieldRef Name="Actual_x0020_Finish_x0020_Date" />
                </IsNull>
           </And>
      </Where>

我希望显示所有记录,其中 (Component=ComponentX AND Review Canceled=No) 或 (Component=ComponentX AND Actual Finish Date=Null)

有什么想法吗?

【问题讨论】:

    标签: sharepoint caml


    【解决方案1】:

    试试这个:

    <Where>
      <Or>
        <And>
          <Eq>
            <FieldRef Name='Component' />
            <Value Type='Text'>ComponentX</Value>
          </Eq>
          <Eq>
            <FieldRef Name='Review_x0020_Canceled' />
            <Value Type='Boolean'>0</Value>
          </Eq>
        </And>
        <And>
          <Eq>
            <FieldRef Name='Component' />
            <Value Type='Text'>ComponentX</Value>
          </Eq>
          <IsNull>
            <FieldRef Name="Actual_x0020_Finish_x0020_Date" />
          </IsNull>
        </And>
      </Or>
    </Where>
    

    新代码caml:

    <Where>
      <And>
        <And>
          <Eq>
            <FieldRef Name='Review_x0020_Canceled' />
            <Value Type='Boolean'>0</Value>
          </Eq>
          <Eq>
            <FieldRef Name='Component' />
            <Value Type='Text'>ComponentX</Value>
          </Eq>
        </And>
        <IsNull>
          <FieldRef Name='Actual_x0020_Finish_x0020_Date' />
        </IsNull>
      </And>
    </Where>
    

    【讨论】:

    • 这没有得到我想要的结果。使用此查询,SharePoint 仍会返回实际完成日期不为空的记录。
    • 那么在你的过滤器中,你要呈现的总是null?还是只有当你注册了Component = componentX?
    • 我只想查看 (component=componentx AND review cancelled=no) OR (component=componentx AND actual_finish_date=null) 的记录。它似乎正确地过滤掉了“review_canceled 记录,但它仍然显示具有实际完成日期的记录。它与 Actual_Finish_date 字段作为日期字段有关吗?
    • 我想我明白问题所在了。这就是我解释逻辑的方式。我想查看所有 review_canceled=no 或 actual_finish_date=null 的记录。但我只想在 component=componentX 时看到它们。我认为您的解决方案适用于我提供的逻辑,但逻辑可能不正确。
    • 所以你的逻辑应该是一样的: Component = componentX And​​ (Review Canceled = NO OR Actual Finish Date = NULL) 你看到上图了吗?只有这个返回蓝色背景的记录
    【解决方案2】:

    你的逻辑

    (Component = ComponentX AND Review Canceled = NO) OR 
        (Component = ComponentX AND Actual Finish Date = NULL)
    

    等价于

    Component = ComponentX And (Review Canceled = NO OR Actual Finish Date = NULL)
    

    这将是这个 CAML 查询:

    <Where>
      <And>
        <Eq>
          <FieldRef Name="Component" />
          <Value Type="Text">ComponentX</Value>
        </Eq>
        <Or>
          <Eq>
            <FieldRef Name="Review_x0020_Canceled" />
            <Value Type="Boolean">0</Value>
          </Eq>
          <IsNull>
            <FieldRef Name="Actual_x0020_Finish_x0020_Date" />
          </IsNull>
        </Or>
      </And>  
    </Where>
    

    【讨论】:

    • 这没有得到我想要的结果。使用此查询,SharePoint 仍会返回实际完成日期不为空的记录。
    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2011-09-06
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多