使用CAML正确嵌套复合AND / OR语句

时间:2019-05-14 13:51:20

标签: sharepoint sharepoint-2013 caml spservices

我正在SharePoint 2013环境中利用SPservices创建当前用户唯一的筛选视图。实际上,当用户访问页面时,他们将获得自定义的提要,这些提要已上传到特定的库。

我可以成功查询该库并以所需的方式呈现结果,但是当我尝试创建复合CAML查询时,总是出错。我尝试使用此处的各种资源来手动构建此查询(并且对网络限制进行了操作,但我无法使用U2U CAML构建器工具),但是我不断遇到错误。我开始做简单的查询,并且可以正常工作,但是一旦我尝试了第三和第四条“ OR”语句(包括IsNull参数),我就遇到了麻烦。我认为我不正确地嵌套了我的陈述,希望能对识别我做错的事情有所帮助。

    <Where>
      <And>
        <Contains>
           <FieldRef Name='Author' />
           <Value Type='User'>" + userName + "</Value>
        </Contains>

      <And>
        <Eq>
          <FieldRef Name='ContentType' />
          <Value Type='Computed'>Document</Value>
        </Eq>
      </And>
      <Or>
        <Or>
          <Or>
            <Or>
              <Eq>
                <FieldRef Name='sensitivity' />
                <Value Type='Choice'>Low</Value>
              </Eq>
              <Eq>
                <FieldRef Name='sensitivity' />
                <Value Type='Choice'>Medium</Value>
              </Eq>
            </Or>
              <Eq>
                <FieldRef Name='sensitivity' />
                <Value Type='Choice'>High</Value>
              </Eq>
          </Or>
         </Or>
        <IsNull>
           <FieldRef Name='sensitivity' />
        </IsNull>
       </Or>
     </And>
    </Where>

期望的结果将是当前用户上载/创建的项目的输出,其中“内容类型”等于“文档”并且“灵敏度(选择)”字段等于“低”,“中”,“高”或为空。

我觉得自己真的很接近,但是我犯了一个愚蠢的错误。对于上下文,该语句中的“ userName”引用是一个运行正常的javascript变量。

1 个答案:

答案 0 :(得分:0)

如果没有U2U CAML构建器工具之类的工具,则包围可能会造成混乱。我感到你很痛苦。

我认为您的问题可能是最后的问题。我相信你会想要的是NotNull

  <IsNotNull>  
    <FieldRef Name='sensitivity' />   
  </IsNotNull>  

作为最后的沟渠,您也许可以仅按文档文档用户查询所有文件