Поисковый запрос EWS с предложениями AND и OR

Я отправляю следующий XML-запрос в EWS, используя метод Office.context.mailbox.makeEwsRequestAsync.

Значение строки запроса должно совпадать либо с темой, либо с полем отправителя; и электронные письма должны принадлежать категории "MY_CATEGORY". Я не могу выполнить последнее требование. Что я делаю не так?

  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
      <t:RequestServerVersion Version="Exchange2013_SP1" />
    </soap:Header>
    <soap:Body>
      <m:FindItem Traversal="Shallow">
        <m:ItemShape>
          <t:BaseShape>AllProperties</t:BaseShape>
        </m:ItemShape>
        <m:IndexedPageItemView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
        <m:Restriction>
        <t:Or> 
           <t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
             <t:FieldURI FieldURI="item:Subject" />
             <t:Constant Value="query string" />
           </t:Contains>
           <t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
             <t:FieldURI FieldURI="message:From" />
             <t:Constant Value="query string" />
           </t:Contains>
        </t:Or> 
        <t:And>
          <t:Contains ContainmentMode="FullString" ContainmentComparison="IgnoreCase">
            <t:FieldURI FieldURI="item:Categories" />
            <t:Constant Value="MY_CATEGORY" />
          </t:Contains>
        </t:And>
        </m:Restriction>
        <m:ParentFolderIds>
          <t:DistinguishedFolderId Id="inbox" />
          <t:DistinguishedFolderId Id="sentitems" />
        </m:ParentFolderIds>
      </m:FindItem>
    </soap:Body>
  </soap:Envelope>

person Rayhan Muktader    schedule 31.05.2016    source источник


Ответы (1)


Категории представляют собой многозначные строки, поэтому используемые вами фильтры поиска не будут работать с этими типами значений. Вы можете использовать AQS на Exchange 2010 и более поздних версиях для поиска по категориям, а также по другим полям поиска. например

  <?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
      <t:RequestServerVersion Version="Exchange2013_SP1" />
    </soap:Header>
    <soap:Body>
      <m:FindItem Traversal="Shallow">
        <m:ItemShape>
          <t:BaseShape>IdOnly</t:BaseShape>
          <t:AdditionalProperties>
            <t:FieldURI FieldURI="item:Subject" />
            <t:FieldURI FieldURI="item:DisplayTo" />
            <t:FieldURI FieldURI="item:DisplayCc" />
            <t:FieldURI FieldURI="item:DateTimeReceived" />
            <t:FieldURI FieldURI="item:HasAttachments" />
            <t:FieldURI FieldURI="item:ItemClass" />
          </t:AdditionalProperties>
        </m:ItemShape>
        <m:IndexedPageItemView MaxEntriesReturned="250" Offset="0" BasePoint="Beginning" />
        <m:SortOrder>
          <t:FieldOrder Order="Ascending">
            <t:FieldURI FieldURI="contacts:DisplayName" />
          </t:FieldOrder>
        </m:SortOrder>
        <m:ParentFolderIds>
          <t:FolderId Id="AQ..." />
        </m:ParentFolderIds>
        <m:QueryString>System.Category:Green AND (From:'Glen Scales' OR Subject:test) </m:QueryString>
      </m:FindItem>
    </soap:Body>
  </soap:Envelope>

person Glen Scales    schedule 01.06.2016
comment
Но будет ли это работать с несколькими папками? Обратите внимание, что исходный запрос ищет в папке «Входящие» и в папке «Отправленные». - person Rayhan Muktader; 01.06.2016
comment
Можно ли создать папку поиска EWS с помощью вызовов javascript? - person Rayhan Muktader; 02.06.2016
comment
Он должен нормально работать с несколькими папками, но вы должны попробовать сами, вы можете создать папку поиска с помощью EWS, например msdn.microsoft.com/en-us/library/office/ - person Glen Scales; 02.06.2016
comment
Кажется, я не могу выполнить поиск в поле «Тело», когда использую папку поиска. У вас есть идеи, почему? - person Rayhan Muktader; 06.06.2016
comment
Это должен быть новый вопрос с соответствующей информацией и кодом, почему бы вам не использовать обнаружение электронных данных, если у вас 2013 или более поздняя версия. - person Glen Scales; 07.06.2016