2016-05-24 51 views
9

Cách sử dụng tìm kiếm và bộ lọc trong cùng một truy vấn?Truy vấn odata để xem lại phần còn lại 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)\""; 

Tôi cần phải tìm tất cả các mail với Subject có một trong hai "Chris Brown" hay "Michael Jackson" và hộp thư nhận được ngày sau khi 22 tháng 2, 2016. Ngoài ra nó nên có Subject, From, Body, ReceivedDateTime trong REST phản ứng.

Có ai vui lòng trợ giúp không?

FYI - Tôi đang nhận được kết quả đầu ra nếu có hoặc là filter hoặc search. Nhưng khi được kết hợp với nhau, tôi nhận được lỗi "Yêu cầu không hợp lệ".

Trả lời

5

Hiện tại, tính năng này không được hỗ trợ. Từ Use OData query parameters:

Bạn không thể sử dụng $ lọc hoặc $ orderby trong một yêu cầu tìm kiếm.

Vì vậy, cách duy nhất để thực hiện việc này là thực hiện tìm kiếm thông qua truy vấn và sau đó lọc trên ứng dụng khách; hoặc ngược lại.

Cập nhật

Trong trường hợp cụ thể này, vì chủ đề là filtrable và được cho là bạn chỉ cần một trận đấu đối tượng chính xác (và không phải là 'chứa' chẳng hạn), bạn có thể sử dụng một cái gì đó dọc theo dòng:

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

Phải, tôi nhận được rằng nó không được hỗ trợ. Tìm kiếm một công việc xung quanh mà không được thực hiện trên máy khách. Ví dụ: thông số tìm kiếm $ (https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests) có thể lấy thông số Received, có cách nào để vượt qua hay không trong nhiều ngày đến ngày đó hoặc ngày "lớn hơn ngày 31/12/2015"? – dave

+0

@dave Tôi đã cập nhật câu trả lời bằng cách giải quyết. Nó sẽ không làm việc với 'chứa' mặc dù. Cảm ơn. –

+0

Cảm ơn bạn. Tôi đã suy nghĩ trong dòng tương tự của việc sử dụng bộ lọc. Tôi đã thử một lần mà không hiệu quả. Hãy để tôi thử lại với các dấu ngoặc như bạn đã đưa ra –

1

Để trả lời câu hỏi gốc: có thể là. @ roman-pletnev đã chỉ ra chính xác rằng bạn không thể sử dụng $filter hoặc $orderby trong yêu cầu $search. Tuy nhiên, bạn có thể đạt được kết quả mong muốn chỉ bằng cách sử dụng $search.

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

Lưu ý rằng dấu ngắt dòng bổ sung đã được bao gồm để dễ đọc.

Cũng lưu ý rằng tham số received dường như chỉ hoạt động với một ngày hoặc phạm vi cụ thể. I E. bạn không thể yêu cầu "mọi thứ sau ngày 22/2/2016". Thay vào đó bạn phải nhập ngày hôm nay (hoặc một ngày trong tương lai?) Khi kết thúc phạm vi.

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

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

Tôi không chắc chắn 100% về định dạng ngày. Tôi không biết liệu ngôn ngữ của tài khoản của bạn có được xác định hay không hoặc luôn là MM/DD/YYYY.

Các biến thể khác dường như hoạt động tốt. Tuy nhiên, tài liệu hướng dẫn này rất tệ và hầu hết cú pháp được ghi nhận là "đã nhận" dường như không hoạt động. Tôi đã gửi một vé hỗ trợ với Microsoft về vấn đề này.

  • Một số cú pháp tài liệu khác làm việc, ví dụ received:today

  • Một số tài liệu cú pháp không hoạt động, ví dụ received:October

Tài liệu tham khảo:

Các vấn đề liên quan