2016-05-24 14 views
9

Come utilizzare la ricerca e il filtro nella stessa query?Query Odata per Outlook Rest api

String url = "https://outlook.office.com/api/v2.0/me/messages?$filter=ReceivedDateTime ge 2016-02-22&$select=Subject,From,Body,ReceivedDateTime&$search=\"subject:(Chris Brown OR Michael Jackson)\""; 

ho bisogno di trovare tutte le mail con Subject aventi una "Chris Brown" o "Michael Jackson" e la posta data di ricezione dopo il 22 febbraio, 2016. Inoltre dovrebbe avere Subject, From, Body, ReceivedDateTime nel resto risposta.

Qualcuno può aiutare per favore?

FYI - Sto ricevendo uscita se ha filter o search. Ma quando viene dato insieme, sto ricevendo un errore "Bad Request".

risposta

5

In questo momento questo non è supportato. Da Use OData query parameters:

Non è possibile utilizzare $ filtro o $ orderby in una richiesta di ricerca.

Quindi, l'unico modo per eseguire questa operazione è eseguire una ricerca tramite una query e quindi filtrare sul client; o vice versa.

Aggiornamento

In questo caso particolare, in quanto soggetto è filtrabile e presumibilmente solo bisogno di una corrispondenza esatta soggetto (e non 'contiene', per esempio), è possibile utilizzare qualcosa sulla falsariga di:

https://outlook.office.com/api/v2.0/me/messages?$filter=(ReceivedDateTime ge 2016-02-22) and ((subject eq 'Chris Brown') or (subject eq 'Michael Jackson')) 
+1

bene, ho capito che non è supportato. Alla ricerca di un lavoro attorno a ciò non viene fatto sul client. Ad esempio, il parametro $ search (https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests) può ricevere un parametro Received, esiste un modo per passare in più date, o una data "maggiore di 12/31/2015"? – dave

+0

@dave Ho aggiornato la risposta con una soluzione alternativa. Tuttavia non funzionerà con "contiene". Grazie. –

+0

Grazie. Stavo pensando a una linea simile di utilizzo del filtro. Avevo provato una volta che non aveva funzionato. Fammi provare di nuovo con parentesi come hai dato –

1

Per rispondere alla domanda iniziale: sì è possibile. @ roman-pletnev ha sottolineato correttamente che non è possibile utilizzare $filter o $orderby in una richiesta $search. Tuttavia, è possibile ottenere il risultato desiderato utilizzando solo $search.

$search=" 
    (subject:(Chris Brown) OR subject:(Michael Jackson)) 
    AND (received:02/22/2016..10/21/2016) 
" 

Si noti che sono state incluse interruzioni di riga aggiuntive per la leggibilità.

Si noti inoltre che il parametro received sembra funzionare solo con una singola data o un intervallo specifico. Cioè non puoi richiedere "tutto dopo il 22/02/2016". Invece devi inserire la data odierna (o una data futura?) Come la fine dell'intervallo.

received:<date> 
received:02/22/2016 

received:<start>..<end> 
received:02/22/2016..10/21/2016 

Non sono sicuro al 100% sul formato della data. Non so se è determinato dalle impostazioni locali del tuo account o se è sempre MM/DD/YYYY.

Anche altre varianti sembrano funzionare. Tuttavia, la documentazione per questo è molto male e la maggior parte della sintassi documentata per "ricevuto" non sembra funzionare. Ho presentato un ticket di supporto con Microsoft per quanto riguarda questo.

  • Qualche altra sintassi documentata funziona, per esempio received:today

  • Alcuni sintassi documentata non funziona, ad esempio received:October

Riferimenti: