Sharepoint REST API过滤空LookUp字段

时间:2016-12-04 13:34:18

标签: rest sharepoint sharepoint-2013 sharepoint-api

我想知道如何在空查找中过滤SharePoint rest API(2013)中的ListItems。 在我的列表项上,有一个查找(单个值,不是必需的),我想要查找所有查找为空的项目(空白)。

_api/web/lists/getbytitle('MyList')/items?$select=Id&$expand=MyLookUp/Id&$filter=??

有人有线索吗?

THX

3 个答案:

答案 0 :(得分:1)

SharePoint 2013中的REST API不支持对列表项查询进行过滤的空值

但是,您可以将CAML查询与REST API结合使用以获取所需数据。

请参考以下代码: (注意:请更改您的查询/网址):

 function _rest_Post(rquest) {
        return $.ajax({
            method: rquest.method,
            url: rquest.url,
            contentType: rquest.contentType,
            headers: rquest.header,
            data: JSON.stringify(rquest.body),
        });

    }

function GetByCaml(serviceParams) {
    var req = {
        method: 'POST',
        url: url + "/_api/web/lists/getByTitle('" + serviceParams.create.lName + "')/getitems",
        header: {
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose"
        },
        body: serviceParams.create.body,
        contentType: "application/json;odata=verbose",

    };
    return _rest_Post(req);

}

function getData(){
    var queryViewXml = "<View><Query><Where><IsNull><FieldRef Name='Project_x0020_Manager'/></IsNull></Where></Query><ViewFields><FieldRef Name='Title'/></ViewFields></View>";
    var params = {};
    params.create= {};
    params.create.lName = "MyList";
    params.create.filter = "";
    params.create.body = {
        'query':{ 
            '__metadata': { 'type': 'SP.CamlQuery' },
            'ViewXml': queryViewXml
        }
    }
    return GetByCaml(params);
};


getData().then(function(data){
    //success handler
}, function(error){
    //failure handler
});

答案 1 :(得分:1)

OP,你的答案非常接近。空查找的Id值应为-1。如果您使用SP CAML Query Helper之类的东西探索原始数据,您应该在未选择的查找中看到-1;#。

/ items /?$ select = Id,Title,Assigned_x0020_To / Id&amp; $ expand = Assigned_x0020_To&amp; $ filter =(Assigned_x0020_To eq -1)应该适合你。

答案 2 :(得分:0)

我刚刚找到了一个使用REST工作的解决方案,您只需将查找ID过滤到大于0.所有查找ID都是1或更大,但使用不等于0(MyLookup ne 0)失败,因为null不是等于0.但是,null显然不是大于0。这可能会让数学极客抽搐,但它确实有效。

_api/web/lists/getbytitle('abc')/items?$select=Id&$expand=MyLookUp/Id&$filter=MyLookup gt 0