本文介绍了用比较运算符=“包含"生成动态CAML查询.和逻辑连接=“或".在所有SharePoint自定义列表列上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为用户"的列表,其中包含以下类型的列:

I am having a list called "Users" which contains following types of columsn:

单行文本

多行文本

选择(允许多项选择)

选择(单选下拉菜单)

日期和时间

多行文本(增强型富文本)

Multiple lines of text (Enhanced rich text)

是/否(复选框)

我想在所有列表列上使用比较运算符=包含"来创建动态CAML查询.和逻辑联接=或".

I want to create dynamic CAML query on all list columns with Comparison Operators ="Contains" and Logical Join ="Or".

我已经创建了如下所示的CAML查询,它正在返回记录:但不正确的记录

I have created CAML query like below and it's returning records: but not correct records

<Query>
  <OrderBy>
    <FieldRef Name='PDate' Ascending='False' />
  </OrderBy>
  <Where>
    <Or>
      <Or>
        <Or>
          <Or>
            <Or>
              <Or>
                <Or>
                  <Or>
                    <Or>
                      <Or>
                        <Or>
                          <Or>
                            <Or>
                              <Or>
                                <Or>
                                  <Or>
                                    <Or>
                                      <Or>
                                        <Or>
                                          <Or>
                                            <Or>
                                              <Or>
                                                <Or>
                                                  <Or>
                                                    <Or>
                                                      <Or>
                                                        <Or>
                                                          <Or>
                                                            <Or>
                                                              <Or>
                                                                <Contains>
                                                                  <FieldRef Name='Title' />
                                                                  <Value  Type='Text'>adipiscing</Value>
                                                                </Contains>
                                                                <Contains>
                                                                  <FieldRef Name='BusinessList' />
                                                                  <Value  Type='Choice'>adipiscing</Value>
                                                                </Contains>
                                                              </Or>
                                                              <Contains>
                                                                <FieldRef Name='StrategyList' />
                                                                <Value  Type='Choice'>adipiscing</Value>
                                                              </Contains>
                                                            </Or>
                                                            <Contains>
                                                              <FieldRef Name='OperationsGeneralList' />
                                                              <Value  Type='Choice'>adipiscing</Value>
                                                            </Contains>
                                                          </Or>
                                                          <Contains>
                                                            <FieldRef Name='ConsultingList' />
                                                            <Value  Type='Choice'>adipiscing</Value>
                                                          </Contains>
                                                        </Or>
                                                        <Contains>
                                                          <FieldRef Name='DigitalList' />
                                                          <Value  Type='Choice'>adipiscing</Value>
                                                        </Contains>
                                                      </Or>
                                                      <Contains>
                                                        <FieldRef Name='Mobility' />
                                                        <Value  Type='Choice'>adipiscing</Value>
                                                      </Contains>
                                                    </Or>
                                                    <Contains>
                                                      <FieldRef Name='TechnologyLsit' />
                                                      <Value  Type='Choice'>adipiscing</Value>
                                                    </Contains>
                                                  </Or>
                                                  <Contains>
                                                    <FieldRef Name='OperationsLst' />
                                                    <Value  Type='Choice'>adipiscing</Value>
                                                  </Contains>
                                                </Or>
                                                <Contains>
                                                  <FieldRef Name='CorporateList' />
                                                  <Value  Type='Choice'>adipiscing</Value>
                                                </Contains>
                                              </Or>
                                              <Contains>
                                                <FieldRef Name='OGList' />
                                                <Value  Type='Choice'>adipiscing</Value>
                                              </Contains>
                                            </Or>
                                            <Contains>
                                              <FieldRef Name='AnalystFirm' />
                                              <Value  Type='Choice'>adipiscing</Value>
                                            </Contains>
                                          </Or>
                                          <Contains>
                                            <FieldRef Name='XYZ' />
                                            <Value  Type='Choice'>adipiscing</Value>
                                          </Contains>
                                        </Or>
                                        <Contains>
                                          <FieldRef Name='ERT' />
                                          <Value  Type='Choice'>adipiscing</Value>
                                        </Contains>
                                      </Or>
                                      <Contains>
                                        <FieldRef Name='HHH' />
                                        <Value  Type='Choice'>adipiscing</Value>
                                      </Contains>
                                    </Or>
                                    <Contains>
                                      <FieldRef Name='FFF' />
                                      <Value  Type='Choice'>adipiscing</Value>
                                    </Contains>
                                  </Or>
                                  <Contains>
                                    <FieldRef Name='GGG' />
                                    <Value  Type='Choice'>adipiscing</Value>
                                  </Contains>
                                </Or>
                                <Contains>
                                  <FieldRef Name='NNN' />
                                  <Value  Type='Text'>adipiscing</Value>
                                </Contains>
                              </Or>
                              <Contains>
                                <FieldRef Name='TTT' />
                                <Value  Type='Text'>adipiscing</Value>
                              </Contains>
                            </Or>
                            <Contains>
                              <FieldRef Name='RRR' />
                              <Value  Type='Text'>adipiscing</Value>
                            </Contains>
                          </Or>
                          <Contains>
                            <FieldRef Name='CCC' />
                            <Value  Type='Text'>adipiscing</Value>
                          </Contains>
                        </Or>
                        <Contains>
                          <FieldRef Name='CAT' />
                          <Value  Type='Text'>adipiscing</Value>
                        </Contains>
                      </Or>
                      <Contains>
                        <FieldRef Name='IGE' />
                        <Value  Type='Text'>adipiscing</Value>
                      </Contains>
                    </Or>
                    <Contains>
                      <FieldRef Name='NNNN' />
                      <Value  Type='Text'>adipiscing</Value>
                    </Contains>
                  </Or>
                  <Contains>
                    <FieldRef Name='PDate' />
                    <Value IncludeTimeValue='false' Type='DateTime'>adipiscing</Value>
                  </Contains>
                </Or>
                <Contains>
                  <FieldRef Name='POS' />
                  <Value  Type='Text'>adipiscing</Value>
                </Contains>
              </Or>
              <Contains>
                <FieldRef Name='QQQ' />
                <Value  Type='Notes'>adipiscing</Value>
              </Contains>
            </Or>
            <Contains>
              <FieldRef Name='COOOY' />
              <Value  Type='Notes'>adipiscing</Value>
            </Contains>
          </Or>
          <Contains>
            <FieldRef Name='PRS' />
            <Value  Type='Boolean'>adipiscing</Value>
          </Contains>
        </Or>
        <Contains>
          <FieldRef Name='RTG' />
          <Value  Type='Text'>adipiscing</Value>
        </Contains>
      </Or>
      <Contains>
        <FieldRef Name='REG' />
        <Value  Type='Choice'>adipiscing</Value>
      </Contains>
    </Or>
  </Where>
</Query>

创建以上CAML查询的逻辑是:

Logic to create above CAML query is:

    var CamlQueryElements = [];

    function AddElement (searchText) {
            var objElement = new Object();
	
            objElement.ComparisonOperators = "Contains";
            objElement.FieldName = "Title";
            objElement.FieldType = "Text";
            objElement.FieldValue = searchText;
            objElement.LogicalJoin = "Or";
            AnalystReport.CamlQuery.CamlQueryElements.push(objElement);

            objElement = null;
            objElement = new Object();
            objElement.ComparisonOperators = "Contains";
            objElement.FieldName = "BusinessList";
            objElement.FieldType = "Choice";
            objElement.FieldValue = searchText;
            objElement.LogicalJoin = "Or";
            AnalystReport.CamlQuery.CamlQueryElements.push(objElement);

            objElement = null;
            objElement = new Object();
            objElement.ComparisonOperators = "Contains";
            objElement.FieldName = "BusinessList";
            objElement.FieldType = "Choice";
            objElement.FieldValue = searchText;
            objElement.LogicalJoin = "Or";
            CamlQueryElements.push(objElement);

        }

    function GenerateQuery() {

        var queryJoin = "";
        var date ="";
        var query = "<{0}><FieldRef Name='{1}' /><Value {2} Type='{3}'>{4}</Value></{5}>";
         
        AddElement ("AmitKumar");

        if(CamlQueryElements.length >0 )
        {
            var itemCount = 0;

            //--Loop of column data ---::Start::----//
            for (var i=0; i<CamlQueryElements.length; i++)
            {
                itemCount++;
		
                date ="";
                if(CamlQueryElements[i].FieldType == "DateTime")
                {
                    date = "IncludeTimeValue='false'";
                }
		 
                queryJoin += "<" + CamlQueryElements[i].ComparisonOperators + "><FieldRef Name='" + CamlQueryElements[i].FieldName + "' /><Value " + date + " Type='" + CamlQueryElements[i].FieldType + "'>" + CamlQueryElements[i].FieldValue + "</Value></" +CamlQueryElements[i].ComparisonOperators + ">";

                if (itemCount >= 2)
                {
                    queryJoin = "<" + CamlQueryElements[i].LogicalJoin + ">" + queryJoin;
                    queryJoin += "</" + CamlQueryElements[i].LogicalJoin + ">" ;
                }

            }
            //--Loop of column data ---::End::----//

            queryJoin = "<Where>" + queryJoin;
            queryJoin += "</Where>" ;

		

        }

        return queryJoin;

    }

如果我要搜索"MSDN",并返回记录,甚至是"MSDN"没有出现在任何列表列中.如果我使用列表视图"搜索文本框进行搜索,则"MSDN"没有记录.

if i will search for "MSDN" and it's returning records, even "MSDN" not present in any list column. If i am searching using List View search text box then no record coming for "MSDN".

我尝试使用Search API:

I tried with Search API :

https://mysite.online.com/sites/TestSite1/_api/search/query?querytext=%27amit+AND+ListId:11812AAB-18AF-452B-B8F9-B15F21C89823%27

https://mysite.online.com/sites/TestSite1/_api/search/query?querytext=%27amit+AND+ListId:11812AAB-18AF-452B-B8F9-B15F21C89823%27

它工作正常,但是它没有返回所有列,有没有办法获取所有列和示例以实现分页.

It's working fine, but it's not returning all the columns, is there any way to get all the columns and sample to implement the paging.

请让我知道解决此问题的所有指针.

Please let me know, any pointers to resolve this issue.


感谢Amit Kumar,LinkedIn个人资料 ** 我的博客
请点击标记为答案"如果该帖子解决了您的问题或投票为有帮助的",如果有用的话

Thanks, Amit Kumar, LinkedIn Profile ** My Blog
Please click "Mark As Answer" if this post solves your problem or "Vote As Helpful" if it was useful


推荐答案

不建议使用包含"操作来查询除字符串类型以外的其他类型的字段.查询列表项时,这不是那么快速和准确.

请改用Search REST API查询列表项,然后再确保已运行完整列表.

要获取所有列表列,可以使用"SelectProperties"包括所需的列.

https: //msdn.microsoft.com/zh-CN/library/office/jj163876.aspx?f=255&MSPPError=-2147217396

关于搜索页面,请参考以下链接:

最好的问候


这篇关于用比较运算符=“包含"生成动态CAML查询.和逻辑连接=“或".在所有SharePoint自定义列表列上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-25 01:38