webentwicklung-frage-antwort-db.com.de

Erstellen Sie eine Filterabfrage für Microsoft Graph, die äquivalent zu "enthält" ist

Ich muss eine $filter-Abfrage für die Microsoft Graph-API erstellen, die in einem String (dem Anzeigenamen der Benutzer) nach einem bestimmten Word sucht.

Ich möchte zum Beispiel alle Benutzer finden, die "Esteban" im Namen haben:

Luis Esteban
Alphonse Esteban
Esteban Luis
Alphonse Esteban Luis

Die folgende Abfrage funktioniert, gibt jedoch nur Benutzer zurück, die mit "Esteban" im Namen beginnen, nicht Benutzer, die "Esteban" enthalten:

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

Ich habe auch versucht, contains anstelle von startswith zu verwenden, aber es gibt eine Fehlerantwort:

{"error": {"code": "Request_BadRequest", "message": "Eine unbekannte Funktion mit dem Namen 'enthält' wurde gefunden. Dies kann auch eine Suche nach Schlüsseln für eine Navigationseigenschaft sein, die nicht zulässig ist.", " innerError ": {" request-id ":" e5ed5c30-4e62-4497-8976-1d38167e759d "," date ":" 2018-09-13T23: 17: 17 "}}}

Und obwohl die Microsoft Graph-Dokumente sagen, dass sie OData 4.0 unterstützen, sagen sie auch Folgendes:

"Der Enthält Zeichenfolgenoperator wird derzeit für keine Microsoft Graph-Ressourcen unterstützt." 

Ich habe auch andere Befehle aus der OData-Dokumentation und den Konstruktionsregeln versucht, die von filter und anderen Abfrageparametern unterstützt werden sollen.

Ich habe insbesondere Kombinationen dieser Befehle ausprobiert:

beginnt mit
endet mit
Index von
Teilzeichenfolge

aber zu keinem erfolg. Es scheint, dass die MS Graph-API nichts unterstützt, außer startswith.

Ich habe sowohl v1.0 als auch die Beta-Endpunkte der API ausprobiert.

Gibt es einen anderen Weg, eine intelligente Kombination von OData 4.0 - Befehlen und/oder Abfrageparametern, die von der MS Graph-API unterstützt werden und die eine Suche entsprechend contains ermöglicht?

PS: Abfragen können Sie mit dem Graph Explorer hier ausprobieren.

9

Wie Sie wissen, unterstützt Graph API Ihre Anforderung jetzt nicht. Mein Vorschlag ist, zuerst die Benutzerliste abzurufen und dann In-Memory-Filter durchzuführen. Dies gilt auch für andere nicht unterstützte Graph-API.

Stimmen Sie in der vorhandenen Funktionsanfrage ab in User Voice oder senden Sie eine neue. 

3
Seiya Su

Dies scheint die einzige Alternative zu sein, mit der Sie die gewünschte Liste erhalten, ohne alle Benutzer selbst filtern zu müssen

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

Gemäß diesem Blog-Post unterstützt die Microsoft-Graph-API nur $ filter mit 
ist gleich (Eq)
nicht gleich (ne)
größer als (gt)
größer als oder gleich (ge)
kleiner als (lt), kleiner oder gleich (le)
und und)
oder oder)
nicht nicht)
beginnt mit
irgendein

und $ search wird nur für "Nachrichten" und "Personen" unterstützt.

2
codeye