我正在使用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."
}
}
}
我在互联网上看到了许多解决方案,他们建议它应该以这种方式工作。另外,我已经查看过检查内部名称的原因,因为内部名称可能有所不同,但是在这种情况下,它是相同的“名称”。
是一些错误还是我错过了什么?
答案 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'