【问题标题】:SharePoint 2013 REST How to $filter field1 eq field2 (not field eq constantValue)?SharePoint 2013 REST 如何 $filter field1 eq field2(不是 field eq constantValue)?
【发布时间】:2017-08-01 14:58:23
【问题描述】:

我是否遗漏了某些内容,或者是否真的无法使用 SharePoint REST API 根据字段和另一个字段的内容过滤列表?

常量值起作用:

?$select=Title&$filter=Title eq 'Hello world'

?$select=Title&$filter='Hello world' eq Title

不是

?$select=Title&$filter=Title eq Title

也没有

?$select=Title&$filter=Title eq OtherField

也没有

?$select=Title&$filter=substringof(Title, Title)

由于过滤有限,REST 实际上毫无用处。

有没有办法使用变量或引用其他字段?

编辑: 我刚刚检查过,显然这是 SharePoint 中的一个限制。 它也不能使用 CAML,显然所有的比较都必须是 Field 到 ConstantValue。

也不行:

<Query>
<Where><Eq><FieldRef Name="Title" /><FieldRef Name="Title" /></Eq></Where>
</Query>

知道如何解决这个问题吗?查找,加入?在 REST 中?谢谢。

【问题讨论】:

  • SharePoint 中的限制?我从未见过 REST API 可以满足您的要求。显而易见的方法是获取您需要的数据并使用您编写的一些过滤器函数进行过滤。当然,它需要几行额外的代码,但仍然只需要一个 API 调用。
  • 现在想想,做这样的事情至少需要一个Join。从我想使用它的上下文来看,它看起来微不足道(一种允许基于某些条件进行过滤的自定义字段类型,不幸的是它不会先进行临时提取)。
  • 为什么要加入?只需一次调用即可获取数据,然后在您的代码中过滤掉Field1 == Field2 所在的数据,就像您在问题中想要做的那样。仅当您想获取 List1.Field == List2.Field 的内容时,您需要至少进行两次单独的调用。

标签: rest sharepoint filter field


【解决方案1】:

只有调用两个不同的 uri 两次然后通过在 javascript 中使用循环和变量来执行您需要的操作的唯一方法,如下面的代码:

需要编辑才能调用

 $(function (){loadRequest("/_api//web/GetFolderByServerRelativeUrl('/PublishingImages/wodSlider')/files",
    function (data) {
        var wodsliderData = data.d.results;


        var viewXml = '<View Scope="RecursiveAll"><Query><Where><Eq><FieldRef Name="FSObjType" /><Value Type="Integer">1</Value></Eq></Where></Query></View>';
        var array2 = [];
        array2=getListItems(webUrl,listTitle,viewXml);


        var html='';
        if(wodsliderData.length!=0){
            for(i=0;i<wodsliderData.length;i++){
                for(j=0;j<array2.length;j++){
                //............. your code here
            }
            }
        }

        $('#wodSliderHtml').html(html);


    });
 });
 function getListItems(webUrl,listTitle, viewXml) 
{
var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getitems"; 
var queryPayload = {  
           'query' : {
                  '__metadata': { 'type': 'SP.CamlQuery' }, 
                  'ViewXml' : viewXml
           }
};

return $.ajax({
       url: url,
       method: "POST",
       contentType: "application/json;odata=verbose",
       data: JSON.stringify(queryPayload),
       headers: {
          "X-RequestDigest": $("#__REQUESTDIGEST").val(),
          "Accept": "application/json; odata=verbose"
       }
 });
}

【讨论】:

  • 甚至是使用托管元数据(分类)类型的最佳解决方案。
【解决方案2】:

使用不等于过滤器

https://domain.sharepoint.com/sites/demo/_api/web/lists/getbytitle('Documents')/items?&$filter=Title ne null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2022-01-05
    • 2012-11-26
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多