API OneDrive Search не поддерживает запрос на расширение для ListItems - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно искать файлы с расширением .docx в моем OneDrive.Так что этот бит прост и работает с использованием API поиска OneDrive.Часть, которая не работает, состоит в том, что в ответе с каждым DriveItem мне также нужны пользовательские свойства, которые мы создали в ListItem.Fields, связанном с этим DriveItem.Эти пользовательские свойства содержат информацию, необходимую для создания отчета.

Расширение ListItem, кажется, работает на ресурсе root/children без поиска, но это не решает мою проблему, мне нужны файлы срасширение .docx в их именах файлов, эти файлы могут находиться в корневом каталоге или любой подпапке в корневом каталоге.

Таким образом, этот запрос возвращает CustomProperty с ответом

/_api/v2.0/drives/[drive id]/root/children?select=*%2cwebDavUrl
%2csharepointIds&expand=listItem(select%3dfields%3bexpand%3dfields(select%3dCustomProperty))

Но когда я пытаюсьразвернуть ListItem на DriveItems, возвращенном поисковым запросом, как показано ниже:

/_api/v2.0/drives/[drive id]/root/search(q='docx')?select=*%2cwebDavUrl%2csharepointIds&expand=listItem(select%3dfields%3bexpand%3dfields(select%3dCustomProperty))

Я получил ошибку:

Error: {"error":{"code":"notSupported","message":"The request is not supported by the system."}}

Расширяется ListItem.Fields на DriveItemне поддерживается в OneDrive Поиск API?

Если это не так, то есть ли другой способ для меня достичь того, что я хочу сделать здесь?Я не пытаюсь выполнить поиск по CustomProperty, просто хочу получить это значение как часть ответа с ассоциированным DriveItem.

Ожидается, что я получу ту же / аналогичную ошибку, если я выполню это через Microsoft Graph Поиск API вместо OneDrive API.

Один из способов, который я мог бы сделать, - это сначала поиск .docx файлы без ключевого слова расширения, и он будет рекурсивно искать и возвращать все .docx файлы в моем OneDrive.Затем я мог бы сделать отдельные вызовы, чтобы запросить эти элементы снова один за другим из OneDrive, используя их DriveItem.Id и расширенное свойство ListItem.Fields.Это был бы ужасный обходной путь, хотя.Потому что вместо того, чтобы достичь того, что мне нужно в одном запросе, мне пришлось бы делать 1000 или 10000 отдельных запросов ввода-вывода (по одному на файл .docx), чтобы получить расширенные свойства ListItem.

1 Ответ

0 голосов
/ 09 мая 2018

Это известная проблема с конечной точкой /search. К сожалению, в настоящее время нет хорошего обходного пути. Чтобы получить ресурсы ListItem, вам нужно будет извлечь каждый DriveItem из результатов поиска напрямую:

/drives/{drive-id}/items/{item-id}?$expand=listItem
...