Создайте запрос фильтра для Microsoft Graph, который работает аналогично «содержит» - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно создать $filter запрос для Microsoft Graph API , который ищет определенное слово в строке (отображаемое имя пользователя).

Например, я бы хотел найти всех пользователей, которые имеют "Esteban" в своих именах:

Луис Эстебан
Альфонс Эстебан
Эстебан Луис
Альфонс Эстебан Луис

Следующий запрос работает, но возвращает только пользователей, начинающихся с "Esteban" в именах, но не пользователей, которые содержат "Esteban" :

https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'Esteban')

Я также пытался использовать contains вместо startswith, но он выдает ошибку:

{"error": {"code": "Request_BadRequest", "message": "Обнаружена неизвестная функция с именем 'содержит'. Это также может быть поиск ключа в свойстве навигации, что недопустимо. "," innerError ": {" request-id ":" e5ed5c30-4e62-4497-8976-1d38167e759d "," date ":" 2018-09-13T23: 17: 17 "}}}

И хотя документы Microsoft Graph говорят, что они поддерживают OData 4.0 , они также говорят это:

"Оператор содержит строку в настоящее время не поддерживается ни на одном из ресурсов Microsoft Graph."

Я также пробовал другие команды, заданные в документации OData и правилах построения , которые должны поддерживаться filter и другими параметрами запроса.

В частности, я пробовал комбинации этих команд:

StartsWith
EndsWith
IndexOf
подстрока

но безуспешно. Похоже, MS Graph API не поддерживает ничего, кроме startswith.

Я пробовал обе версии v1.0 и бета-версии API.

Есть ли другой способ, умная комбинация команд OData 4.0 и / или параметров запроса, поддерживаемая API Graph MS , которая позволяет выполнять поиск, эквивалентный contains

PS: Вы можете попробовать запросы с помощью Graph Explorer здесь .

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Похоже, что это единственная альтернатива, которая даст вам список, который вам нужен, без фильтрации всех пользователей самостоятельно

https://graph.microsoft.com/v1.0/me/people?$search=Esteban&$top=100000

Согласно этому сообщению в блоге API-интерфейс microsoft-graph поддерживает только $ filter с
равно (eq)
не равно (ne)
больше чем (GT)
больше или равно (ge)
меньше (л), меньше или равно (ле)
и (и)
или (или)
нет (не)
StartsWith
любой

и $ search поддерживается только для сущностей "messages" и "person".

0 голосов
/ 22 сентября 2018

Я не знаком с этим конкретным API, но, поскольку он является службой OData, он может поддерживать параметр

$filter=substringof('Test',FieldName)
$filter=substringof('Esteban', displayName)

, обратите внимание, что он имеет обратный порядок параметров по сравнению с запусками с.

проверьте Документы OData здесь для других параметров фильтра

0 голосов
/ 17 сентября 2018

Как вы знаете, Graph API сейчас не поддерживает ваши требования.Я предлагаю сначала получить список пользователей, а затем выполнить фильтр в памяти.Этот способ также применим к другим неподдерживаемым API-интерфейсам Graph.

. Тем временем обязательно проголосуйте за запрос существующей функции в User Voice или отправьте новый.

...