У меня есть два запроса для обмена сервером verion Exchange2010_SP2
. Первый запрос пытается получить элементы со значением AppointmentID (расширенное свойство), равным заданному значению c. Код использует IsEqualTo
поисковый фильтр для выполнения sh этого. Вот код c#.
var timeZone = TimeZone.GetFromName("Eastern Standard Time");
var id = "2a1f9fda-84b9-4090-91f0-6b5fc4949f3f";
var calendar = "mycalendar@mailinator.com";
var appointmentIdExtendedProperty = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmentID", MapiPropertyType.String);
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP2, timeZone.ToTimeZoneInfo())
{
Credentials = new NetworkCredential("user", "password"),
Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx")
};
var view = new ItemView(10)
{
PropertySet = new PropertySet(ItemSchema.Id, appointmentIdExtendedProperty)
};
var folderId = new FolderId(WellKnownFolderName.Calendar, new Mailbox(calendar));
SearchFilter filter = new SearchFilter.IsEqualTo(appointmentIdExtendedProperty, id);
var items = service.FindItems(folderId, filter, view);
- Запрос комбинированного фильтра
Этот второй запрос аналогично приведенному выше, единственное отличие состоит в том, что в нем применяются два фильтра в сочетании с логическим или оператором. Я вставляю только конструкцию фильтров.
SearchFilter filter = new SearchFilter.IsEqualTo(appointmentIdExtendedProperty, id);
SearchFilter containsFilter = new SearchFilter.IsEqualTo(appointmentIdExtendedProperty, id);
var combinedFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new[] { filter, containsFilter });
var items = service.FindItems(folderId, combinedFilter, view);
Результатом первого запроса является встреча, соответствующая критериям единого фильтра, однако второй запрос не возвращает результатов. По определению второй фильтр должен возвращать элементы, которые удовлетворяют критериям одного или нескольких поисковых фильтров. Второй запрос должен возвращать по крайней мере элементы, возвращенные первым запросом, поскольку он содержит первый фильтр как часть коллекции фильтров.
Здесь также приведены запросы http, сгенерированные из приведенного выше кода c#:
POST https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Accept: text/xml
User-Agent: ...
Accept-Encoding: gzip,deflate
Authorization: ...
Host: outlook.office365.com
Content-Length: 2368
Expect: 100-continue
<?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="Exchange2010_SP2" />
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:ItemId" />
<t:FieldURI FieldURI="item:Subject" />
<t:ExtendedFieldURI DistinguishedPropertySetId="PublicStrings" PropertyName="AppointmentID" PropertyType="String" />
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
<m:Restriction>
<t:IsEqualTo>
<t:ExtendedFieldURI DistinguishedPropertySetId="PublicStrings" PropertyName="AppointmentID" PropertyType="String" />
<t:FieldURIOrConstant>
<t:Constant Value="2a1f9fda-84b9-4090-91f0-6b5fc4949f3f" />
</t:FieldURIOrConstant>
</t:IsEqualTo>
</m:Restriction>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar">
<t:Mailbox>
<t:EmailAddress>mycalendar@mailinator.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
POST https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Accept: text/xml
User-Agent: ...
Accept-Encoding: gzip,deflate
Authorization: ...
Host: outlook.office365.com
Content-Length: 2728
Expect: 100-continue
<?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="Exchange2010_SP2" />
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:ItemId" />
<t:FieldURI FieldURI="item:Subject" />
<t:ExtendedFieldURI DistinguishedPropertySetId="PublicStrings" PropertyName="AppointmentID" PropertyType="String" />
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
<m:Restriction>
<t:Or>
<t:IsEqualTo>
<t:ExtendedFieldURI DistinguishedPropertySetId="PublicStrings" PropertyName="AppointmentID" PropertyType="String" />
<t:FieldURIOrConstant>
<t:Constant Value="2a1f9fda-84b9-4090-91f0-6b5fc4949f3f" />
</t:FieldURIOrConstant>
</t:IsEqualTo>
<t:Contains ContainmentMode="Substring" ContainmentComparison="IgnoreCase">
<t:ExtendedFieldURI DistinguishedPropertySetId="PublicStrings" PropertyName="AppointmentID" PropertyType="String" />
<t:Constant Value="2a1f9fda-84b9-4090-91f0-6b5fc4949f3f" />
</t:Contains>
</t:Or>
</m:Restriction>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar">
<t:Mailbox>
<t:EmailAddress>mycalendar@mailinator.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
Известна ли проблема с этой версией сервера обмена