Sharepoint Rest API-在扩展字段上应用过滤器-状态400

时间:2019-08-13 07:33:50

标签: rest api sharepoint

我正在使用Sharepoint rest API来获取一组文件夹中的特定文件。为此,我在扩展字段上应用了过滤器。问题是当我应用过滤器时,它说“字段或属性不存在”

我试图在不应用过滤器的情况下获取数据,并且数据正确无误。另外,我可以对不在expand参数下的字段应用过滤器。

以下代码正在邮递员中工作:

https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019')/Folders?$expand=Files&$select=Files/Name&$filter=Files/Name eq 'abc.xlsx'

以下是输出的相关部分:

{
    "d": {
        "results": [
            {
                "__metadata": {
                    "id": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1')",
                    "uri": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1')",
                    "type": "SP.Folder"
                },
                "Files": {
                    "results": [
                        {
                            "__metadata": {
                                "id": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1/abc.xlsx')",
                                "uri": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1/abc.xlsx')",
                                "type": "SP.File"
                            },
                            "Name": "abc.xlsx"
                        },
                        {
                            "__metadata": {
                                "id": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1/def.xlsx')",
                                "uri": "https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019/folder1/def.xlsx')",
                                "type": "SP.File"
                            },
                            "Name": "def.xlsx"
                        }
                    ]
                }
            },
.........
.........
..........

以下代码在邮递员中不起作用:

https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019')/Folders?$expand=Files&$select=Files/Name&$filter=Files/Name eq 'abc.xlsx'

以下是我收到的状态代码为400(错误请求)的错误输出:

{
    "error": {
        "code": "-1, Microsoft.SharePoint.Client.InvalidClientQueryException",
        "message": {
            "lang": "en-US",
            "value": "Field or property \"Name\" does not exist."
        }
    }
}

我在互联网上看到了许多解决方案,他们建议它应该以这种方式工作。另外,我已经查看过检查内部名称的原因,因为内部名称可能有所不同,但是在这种情况下,它是相同的“名称”。

是一些错误还是我错过了什么?

2 个答案:

答案 0 :(得分:0)

这看起来像是一个错字:

my ($file1, $file2, $file3) = getFiles();
if (scalar(@ARGV) >= 1) {
    $file1 = $ARGV[0];
}
if (scalar(@ARGV) >= 2) {
    $file2 = $ARGV[1];
}
if (scalar(@ARGV) >= 3) {
    $file3 = $ARGV[2];
}

您的网址引用的是“名称”而不是“名称”。

您的第二个URL没有文件类型(.xlsx)

"Field or property \"Names\" does not exist."

否则...

您的URL包含“ /文件夹”。这将返回文件夹列表。您要在特定文件夹中查找文件,还是在任何文件夹中查找该名称的所有文件?

这将返回特定文件夹中的文件:

&$filter=Files/Name eq 'abc'

从技术上讲...这是“服务器相对” URL,而不是“站点相对” URL。但是以库名开头似乎很有效。

https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019')/files?$select=Name&$filter=Name eq 'abc.xlsx'

可能应该是:

https://sp.foo.net/sites/spdsdfrn/_api/web/GetFolderByServerRelativeUrl('Shared Documents/abc/2019')/Folders

答案 1 :(得分:0)

您可以结合使用 GetItems 方法和设置 FolderServerRelativeUrl 属性和范围。

示例代码

<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
    var fileName="abc.xlsx";
    var libraryTitle="Documents";
    var folderRelativeUrl="Shared Documents/abc/2019";
    var viewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='FileLeafRef'/><Value Type='File'>"+fileName+"</Value></Eq></Where></Query></View>";
    var url = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('"+libraryTitle+"')/getitems?$select=*,FileDirRef,FileRef"; 
    var query = {  
               'query' : {
                      '__metadata': { 'type': 'SP.CamlQuery' }, 
                      'ViewXml' : viewXml,
                      'FolderServerRelativeUrl': folderRelativeUrl 
               }
    };

    $.ajax({
            url: url,
            method: "POST",
            data: JSON.stringify(query),
            headers: {
                "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                "Accept": "application/json; odata=verbose",
                "content-type": "application/json; odata=verbose"
            },
            success: function (data) {
                alert(JSON.stringify(data.d.results));          
            },
            error: function (err) {
                alert(JSON.stringify(err));
            }
     });
});
</script>

或者我们可以使用下面的REST API。

/_api/web/lists/getbytitle('Documents')/items?$select=File&$expand=File&$filter=FileLeafRef eq 'abc.xlsx'