2016-05-24 8 views
9

एक ही प्रश्न में खोज और फ़िल्टर का उपयोग कैसे करें?दृष्टिकोण के लिए ओडाटा क्वेरी एपीआई

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)\""; 

मैं Subject करने के बाद 22 वें फ़र, या तो "क्रिस ब्राउन" या "माइकल जैक्सन" और मेल प्राप्त की तारीख के साथ सभी मेल खोजने की जरूरत है, 2016 में भी यह करना चाहिए था Subject, From, Body, ReceivedDateTime बाकी में प्रतिक्रिया।

क्या कोई भी मदद कर सकता है?

एफवाईआई - अगर उत्पादन में filter या search है तो मुझे आउटपुट मिल रहा है। लेकिन जब एक साथ दिया जाता है, तो मुझे "खराब अनुरोध" त्रुटि मिल रही है।

उत्तर

5

अभी यह समर्थित नहीं है। Use OData query parameters से:

आप $ फिल्टर या किसी खोज अनुरोध में $ orderby उपयोग नहीं कर सकते।

तो, ऐसा करने का एकमात्र तरीका एक क्वेरी के माध्यम से एक खोज करना है, और उसके बाद ग्राहक पर फ़िल्टर करना; या ठीक इसके विपरीत।

अद्यतन

इस विशेष मामले में, के बाद से विषय filtrable है और माना जाता है कि आप केवल एक सटीक विषय मैच की जरूरत है (और उदाहरण के लिए नहीं 'शामिल'), आप की तर्ज पर कुछ का उपयोग कर सकते हैं:

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

ठीक है, मुझे लगता है कि यह समर्थित नहीं है मिलता है। इसके आसपास एक काम की तलाश क्लाइंट पर नहीं की जाती है। उदाहरण के लिए - $ खोज param (https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests) एक प्राप्त पैरामीटर ले सकता है, क्या पास करने का कोई तरीका है उसमें कई तिथियों में, या "12/31/2015 से अधिक" तिथि? – dave

+0

@ डेव मैंने एक वर्कअराउंड के साथ जवाब अपडेट किया है। हालांकि यह 'शामिल' के साथ काम नहीं करेगा। धन्यवाद। –

+0

धन्यवाद। मैं फिल्टर का उपयोग करने की इसी पंक्ति में सोच रहा था। मैंने एक बार कोशिश की थी जिसने काम नहीं किया था। मुझे ब्रैकेट के साथ फिर से प्रयास करने दें क्योंकि आपने –

1

मूल प्रश्न का उत्तर देने के लिए: हाँ यह संभव है। @ रोमन-पटलेनेव ने सही ढंग से बताया कि अनुरोध में आप $filter या $orderby का उपयोग नहीं कर सकते हैं। हालांकि, आप केवल $search का उपयोग करके वांछित परिणाम प्राप्त कर सकते हैं।

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

ध्यान दें कि अतिरिक्त लाइनब्रेक पढ़ने योग्यता के लिए शामिल किए गए हैं।

यह भी ध्यान रखें कि received पैरामीटर केवल एक ही तारीख या एक विशिष्ट सीमा के साथ काम करता है। अर्थात। आप 02/22/2016 के बाद सबकुछ "का अनुरोध नहीं कर सकते हैं। इसके बजाय आपको सीमा के अंत के रूप में आज की तारीख (या भविष्य की तारीख?) इनपुट करना होगा।

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

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

मैं दिनांक प्रारूप के बारे में 100% निश्चित नहीं हूं। मुझे नहीं पता कि यह आपके खाते के लोकेल द्वारा निर्धारित किया गया है या यदि यह हमेशा MM/DD/YYYY है।

अन्य बदलाव भी काम करने लगते हैं। हालांकि, इसके लिए प्रलेखन बहुत खराब है और "प्राप्त" के लिए अधिकांश दस्तावेज सिंटैक्स काम नहीं कर रहा है। मैंने इसके बारे में माइक्रोसॉफ्ट के साथ एक सपोर्ट टिकट दायर किया है।

  • कुछ अन्य दस्तावेज वाक्य रचना काम करते हैं, उदाहरण के लिए, उदाहरण के लिए received:today

  • कुछ दस्तावेज वाक्य रचना काम नहीं करता है, received:October

संदर्भ:

संबंधित मुद्दे