Работа с беседами с помощью EWS в Exchange
Узнайте, как находить беседы, применять действия к беседам и получать элементы в беседах с помощью управляемого API EWS или EWS в Exchange.
В контексте Exchange беседы — это способ группирования связанного набора сообщений электронной почты и управления ими. Они также могут предоставлять способ просмотра связанных сообщений. Exchange определяет беседы на основе значения Message-ID первого сообщения электронной почты в потоке. Все ответы и связанные сообщения ссылались на заголовок Message-ID исходного сообщения в заголовках References и In-Reply-To .
Кроме того, в конверте SOAP для каждого сообщения, полученного в почтовом ящике, Exchange задает определенные свойства и элементы.
Таблица 1. Свойства и элементы беседы, заданные во всех сообщениях электронной почты
Свойство Управляемого API EWS | Элемент EWS | Описание |
---|---|---|
ConversationTopic |
ConversationTopic |
Содержит нормализованную форму значения субъекта, заданного в исходном сообщении. Это то же самое, что и заголовок сообщения Thread-Topic . Это значение доступно только для чтения. |
ConversationIndex |
ConversationIndex |
Представляет позицию элемента в беседе. Это то же самое, что и заголовок сообщения Thread-Index . Это значение доступно только для чтения. |
Exchange применяет то же значение ConversationTopic к ответам на первое сообщение, а затем обновляет значение ConversationIndex , чтобы представить позицию сообщения относительно исходного сообщения. Если тема потока электронной почты изменяется, Exchange применяет к новой беседе новое значение ConversationTopic и новые значения ConversationIndex .
Табл. 2. Методы управляемого API EWS и операции EWS для работы с беседами
Поиск беседы с помощью управляемого API EWS
Диалоги можно найти с помощью метода Управляемого API ExchangeService.FindConversation EWS, как показано в следующем примере. В этом примере возвращаются первые 10 бесед в папке "Входящие" с темой, содержащей слово "новости". Затем в этом примере в окне консоли записывается тема беседы, время последней доставки и глобальный уникальный список получателей.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
static void FindConversation(ExchangeService service)
{
// Create the view of conversations returned in the response. This view will return at most 10 results.
ConversationIndexedItemView view = new ConversationIndexedItemView(10);
// Create the query string to search for.
String queryString = "subject:news";
// Search the Inbox for conversations and return a results set with the specified view.
// This method call results in a FindConversation call to EWS.
ICollection<Conversation> conversations = service.FindConversation(view, WellKnownFolderName.Inbox, queryString);
// Examine properties on each conversation returned in the response.
foreach (Conversation conversation in conversations)
{
Console.WriteLine("Conversation Topic: " + conversation.Topic);
Console.WriteLine("Last Delivered: " + conversation.LastDeliveryTime.ToString());
ApplyConversationActions(service, conversation);
foreach (string GlUniqRec in conversation.GlobalUniqueRecipients)
{
Console.WriteLine("Global Unique Recipient: " + GlUniqRec);
}
Console.WriteLine("");
}
}
Поиск беседы с помощью EWS
Диалоги можно найти с помощью операции FindConversation EWS, как показано в следующем примере. В этом примере возвращаются первые десять бесед в папке "Входящие" с темой, содержащей слово "новости". Это также XML-запрос, который отправляет управляемый API EWS при использовании управляемого API EWS для поиска диалога.
<?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="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
</soap:Header>
<soap:Body>
<m:FindConversation>
<m:IndexedPageItemView MaxEntriesReturned="10"
Offset="0"
BasePoint="Beginning" />
<m:ParentFolderId>
<t:DistinguishedFolderId Id="inbox" />
</m:ParentFolderId>
<m:QueryString>subject:news</m:QueryString>
</m:FindConversation>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос FindConversation сообщением FindConversationResponse , которое содержит значение ResponseCodeNoError , чтобы указать, что операция успешно завершена. Ответ также включает только беседу в почтовом ящике с темой, содержащей слово "новости".
Элементы ItemId, ChangeKey и ConversationId сокращены для удобства чтения.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="883"
MinorBuildNumber="10"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FindConversationResponse ResponseClass="Success"
xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<ResponseCode>NoError</ResponseCode>
<Conversations>
<Conversation xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<ConversationId Id="aO2NM+Q=" />
<ConversationTopic>Today's top news headlines</ConversationTopic>
<UniqueRecipients>
<String>Sadie Daniels</String>
</UniqueRecipients>
<GlobalUniqueRecipients>
<String>Sadie Daniels</String>
</GlobalUniqueRecipients>
<UniqueUnreadSenders>
<String>Ronnie Sturgis</String>
</UniqueUnreadSenders>
<GlobalUniqueUnreadSenders>
<String>Ronnie Sturgis</String>
</GlobalUniqueUnreadSenders>
<UniqueSenders>
<String>Ronnie Sturgis</String>
</UniqueSenders>
<GlobalUniqueSenders>
<String>Ronnie Sturgis</String>
</GlobalUniqueSenders>
<LastDeliveryTime>2014-02-18T20:42:26Z</LastDeliveryTime>
<GlobalLastDeliveryTime>2014-02-18T20:42:26Z</GlobalLastDeliveryTime>
<HasAttachments>false</HasAttachments>
<GlobalHasAttachments>false</GlobalHasAttachments>
<MessageCount>1</MessageCount>
<GlobalMessageCount>1</GlobalMessageCount>
<UnreadCount>1</UnreadCount>
<GlobalUnreadCount>1</GlobalUnreadCount>
<Size>9330</Size>
<GlobalSize>9330</GlobalSize>
<ItemClasses>
<ItemClass>IPM.Note</ItemClass>
</ItemClasses>
<GlobalItemClasses>
<ItemClass>IPM.Note</ItemClass>
</GlobalItemClasses>
<Importance>Normal</Importance>
<GlobalImportance>Normal</GlobalImportance>
<ItemIds>
<ItemId Id="sVCyAAA="
ChangeKey="CQAAAA==" />
</ItemIds>
<GlobalItemIds>
<ItemId Id="sVCyAAA="
ChangeKey="CQAAAA==" />
</GlobalItemIds>
<LastModifiedTime>2014-02-18T20:42:26Z</LastModifiedTime>
<InstanceKey>AQAAAAAAAQABAAAACbFYggAAAAA=</InstanceKey>
<HasIrm>false</HasIrm>
<GlobalHasIrm>false</GlobalHasIrm>
</Conversation>
</Conversations>
<TotalConversationsInView>1</TotalConversationsInView>
<IndexedOffset>1</IndexedOffset>
</FindConversationResponse>
</s:Body>
</s:Envelope>
Применение действий диалога с помощью управляемого API EWS
Действия беседы можно применять к беседе с помощью нескольких методов управляемого API EWS, как показано в следующем примере. В этом примере добавляются категории к существующим элементам беседы и применяются те же категории к будущим элементам беседы. Здесь также показано, как включить автоматическое перемещение элементов беседы в папку. В этом примере элементы перемещаются в папку Черновики.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
Полный список методов, которые применяют действия беседы, см. в таблице 2.
static void ApplyConversationActions(ExchangeService service, Conversation conversation)
{
// Create a list of categories to apply to a conversation.
List<string> categories = new List<string>();
categories.Add("Customer");
categories.Add("System Integrator");
// Apply categorization to all items in the conversation and process the request
// synchronously after enabling this rule and after all item categorization has been applied.
// This method call results in an ApplyConversationAction call to EWS.
conversation.EnableAlwaysCategorizeItems(categories, true);
// Apply an always move rule to all items in the conversation and move the items
// to the Drafts folder. Process the request asynchronously and return the response.
// immediately. This method call results in an ApplyConversationAction call to EWS.
conversation.EnableAlwaysMoveItems(WellKnownFolderName.Drafts, false);
}
Применение действий беседы с помощью EWS
Вы можете применить действия беседы, такие как классификация, удаление и перемещение, с помощью операции ApplyConversationAction , как показано в следующем примере. В этом примере добавляются категории к существующим элементам беседы и применяются те же категории к будущим элементам беседы. Здесь также показано, как включить автоматическое перемещение элементов беседы в папку; В этом примере элементы перемещаются в папку Черновики. Это также XML-запрос, который отправляет управляемый API EWS при использовании управляемого API EWS для применения действий диалога.
Элемент ConversationId сокращен для удобства чтения.
<?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="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
</soap:Header>
<soap:Body>
<m:ApplyConversationAction>
<m:ConversationActions>
<t:ConversationAction>
<t:Action>AlwaysMove</t:Action>
<t:ConversationId Id="jG6WVpg=" />
<t:ProcessRightAway>false</t:ProcessRightAway>
<t:DestinationFolderId>
<t:DistinguishedFolderId Id="drafts" />
</t:DestinationFolderId>
</t:ConversationAction>
</m:ConversationActions>
</m:ApplyConversationAction>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос ApplyConversationAction сообщением ApplyConversationActionResponse , которое содержит значение ResponseCodeNoError , указывающее, что операция успешно завершена.
Получение элементов в одной беседе с помощью идентификатора диалога в управляемом API EWS
Элементы в беседе можно получить с помощью метода Управляемого API ExchangeService.GetConversationItems EWS. В этом примере представлен набор узлов беседы для первой беседы в папке "Входящие". Идентификатор элемента, тема и полученное время для каждого элемента возвращаются в ответе вместе со свойствами индекса диалога и родительского индекса диалога. Свойства индекса диалога можно использовать для восстановления иерархии узлов.
В этом примере все элементы беседы в папках "Удаленные" и "Черновики" по умолчанию игнорируются.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
static void GetConversationItemsSingleConversation(ExchangeService service)
{
try
{
// Find the first item in the mailbox.
// This method call results in an FindItem call to EWS.
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Inbox,
new ItemView(1));
// Get the conversation identifier of the item.
ConversationId convId = results.Items[0].ConversationId;
// Specify the properties that will be
// returned for the items in the conversation.
PropertySet properties = new PropertySet(BasePropertySet.IdOnly,
ItemSchema.Subject,
ItemSchema.DateTimeReceived);
// Identify the folders to ignore.
Collection<FolderId> foldersToIgnore = new Collection<FolderId>()
{ WellKnownFolderName.DeletedItems, WellKnownFolderName.Drafts };
// Request the conversation items.
// This method call results in an GetConversationItems call to EWS.
ConversationResponse response = service.GetConversationItems(convId,
properties,
null,
foldersToIgnore,
ConversationSortOrder.TreeOrderDescending);
// Get the synchronization state of the conversation.
Console.WriteLine("SyncState: " + response.SyncState);
Collection<Item> items = new Collection<Item>();
// Process each node of conversation items.
foreach (ConversationNode node in response.ConversationNodes)
{
Console.WriteLine("Parent conversation index: " + node.ParentConversationIndex);
Console.WriteLine("Conversation index: " + node.ConversationIndex);
Console.WriteLine("Conversation node items:");
// Process each item in the conversation node.
foreach (Item item in node.Items)
{
Console.WriteLine(" Item ID: " + item.Id.UniqueId);
Console.WriteLine(" Subject: " + item.Subject);
Console.WriteLine(" Received: " + item.DateTimeReceived);
items.Add(item);
}
}
}
// This exception occurs if there is an error with the service.
catch (ServiceResponseException srException)
{
Console.WriteLine(srException);
}
}
Рекомендуется кэшировать свойство SyncState для последующих запросов на получение элементов в беседе.
Получение элементов во многих беседах с помощью объекта ConversationRequest в управляемом API EWS
Для получения элементов из двух или более бесед можно использовать объект ConversationRequest и метод Управляемого API ExchangeService.GetConversationItems EWS. В этом примере представлен набор узлов диалога для первых двух бесед в папке "Входящие". Идентификатор элемента, тема и полученное время для каждого элемента будут возвращены в ответе вместе со свойствами индекса беседы и родительского индекса диалога. Свойства индекса диалога можно использовать для восстановления иерархии узлов. В этом примере предполагается, что первые два элемента в папке "Входящие" относятся к разным беседам.
В этом примере все элементы беседы в папках "Удаленные" и "Черновики" по умолчанию игнорируются.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
static void GetConversationItemsManyConversations(ExchangeService service)
{
try
{
// Find the first two items in the Inbox. This item will be used to call the GetConversationItems operation.
// This method call results in an FindItem call to EWS.
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Inbox, new ItemView(2));
// Get the conversation identifier of the first two items in the Inbox.
ConversationId convId1 = results.Items[0].ConversationId;
ConversationId convId2 = results.Items[1].ConversationId;
// Identify two conversation requests.
ConversationRequest convR1 = new ConversationRequest();
convR1.ConversationId = convId1;
ConversationRequest convR2 = new ConversationRequest();
convR2.ConversationId = convId2;
// Create a collection of conversations to fetch.
Collection<ConversationRequest> conversations = new Collection<ConversationRequest>();
conversations.Add(convR1);
conversations.Add(convR2);
// Specify the properties that will be returned for the items in the conversation.
PropertySet properties = new PropertySet(BasePropertySet.IdOnly,
ItemSchema.Subject,
ItemSchema.DateTimeReceived);
// Identify the folders to ignore.
Collection<FolderId> foldersToIgnore = new Collection<FolderId>()
{ WellKnownFolderName.DeletedItems, WellKnownFolderName.Drafts };
// Request the conversation items.
// This method call results in an GetConversationItems call to EWS.
ServiceResponseCollection<GetConversationItemsResponse> responses =
service.GetConversationItems(conversations, properties, foldersToIgnore,
ConversationSortOrder.TreeOrderDescending);
// Process each conversation.
foreach (GetConversationItemsResponse resp in responses)
{
// Identify the synchronization state of the conversation.
Console.WriteLine("Sync State: " + resp.Conversation.SyncState);
// Process each node in the conversation.
foreach (ConversationNode node in resp.Conversation.ConversationNodes)
{
Console.WriteLine("Parent conversation index: " + node.ParentConversationIndex);
Console.WriteLine("Conversation index: " + node.ConversationIndex);
Console.WriteLine("Conversation node items:");
// Process each item in the conversation node.
foreach (Item item in node.Items)
{
Console.WriteLine(" Item ID: " + item.Id.UniqueId);
Console.WriteLine(" Subject: " + item.Subject);
Console.WriteLine(" Received: " + item.DateTimeReceived);
}
}
}
}
// This exception occurs if there is an error with the service.
catch (ServiceResponseException srException)
{
Console.WriteLine(srException);
}
}
Рекомендуется возвращать только те свойства, которые требуются клиентскому приложению, а не использовать параметр FirstClassProperties для класса BasePropertySet . Рекомендуется кэшировать свойство SyncState для последующих запросов на получение элементов в беседе.
Получение элементов в беседах с помощью идентификатора диалога в EWS
Элементы в беседе можно получить с помощью операции GetConversationItems EWS. В этом примере представлен набор узлов беседы для первой беседы в папке "Входящие". Идентификатор элемента, тема и полученное время для каждого элемента возвращаются в ответе вместе со свойствами индекса диалога и родительского индекса диалога. Свойства индекса диалога можно использовать для восстановления иерархии узлов.
В этом примере все элементы беседы в папках "Удаленные" и "Черновики" по умолчанию игнорируются.
Элемент ConversationId сокращен для удобства чтения.
Чтобы получить элементы из нескольких бесед, добавьте дополнительные элементы Conversation .
<?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="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
</soap:Header>
<soap:Body>
<m:GetConversationItems>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="item:DateTimeReceived" />
</t:AdditionalProperties>
</m:ItemShape>
<m:FoldersToIgnore>
<t:DistinguishedFolderId Id="deleteditems" />
<t:DistinguishedFolderId Id="drafts" />
</m:FoldersToIgnore>
<m:SortOrder>TreeOrderDescending</m:SortOrder>
<m:Conversations>
<t:Conversation>
<t:ConversationId Id="LUQFH6Q=" />
</t:Conversation>
</m:Conversations>
</m:GetConversationItems>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос GetConversationItems сообщением GetConversationItemsResponse , которое содержит значение ResponseCodeNoError , указывающее, что операция успешно завершена. Ответ также включает ConversationNodes в беседе.
Элементы ItemId, SyncState и ConversationId сокращены для удобства чтения.
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="873"
MinorBuildNumber="9"
Version="V2_9"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:GetConversationItemsResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:GetConversationItemsResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Conversation>
<t:ConversationId Id="LUQFH6Q=" />
<t:SyncState>AAAAYAm1</t:SyncState>
<t:ConversationNodes>
<t:ConversationNode>
<t:InternetMessageId>&lt;994051d7c1a346efbfce8dec2cbad509
@SN2SR01MB006.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;faa2b1df30074380abe3527b0cd18ca5
@SN2SR01MB001.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="AYB1NAAA="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYCHq" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T13:15:00Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
<t:ConversationNode>
<t:InternetMessageId>&lt;faa2b1df30074380abe3527b0cd18ca5
@SN2SR01MB001.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;6a8e7658524b41cda7cdc3f23c1074a5
@SN2SR01MB001.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="lQAAAA=="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYAu8" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T10:02:08Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
<t:ConversationNode>
<t:InternetMessageId>&lt;bcdb185495834370a874a1e7ebedbb96
@SN2SR01MB005.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;e52a4de6b98d484887e141da094a2ce6
@SN2SR01MB006.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="igAAAA=="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYAuj" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T16:20:10Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
<t:ConversationNode>
<t:InternetMessageId>&lt;e52a4de6b98d484887e141da094a2ce6
@SN2SR01MB006.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;f0db3ead01db4fe087d98022149aa16f
@SN2SR01MB001.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="iwAAAA=="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYAul" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T15:30:10Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
<t:ConversationNode>
<t:InternetMessageId>&lt;f0db3ead01db4fe087d98022149aa16f
@SN2SR01MB001.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;88b1884ecaaa4f68b081c009d827e8c6
@SN2SR01MB003.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="jQAAAA=="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYAuq" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T14:20:10Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
<t:ConversationNode>
<t:InternetMessageId>&lt;88b1884ecaaa4f68b081c009d827e8c6
@SN2SR01MB003.com&gt;</t:InternetMessageId>
<t:ParentInternetMessageId>&lt;faa2b1df30074380abe3527b0cd18ca5
@SN2SR01MB001.com&gt;</t:ParentInternetMessageId>
<t:Items>
<t:Message>
<t:ItemId Id="kAAAAA=="
ChangeKey="CQAAABYAAAD/oydcA+SPQZGbKWNyvNIZAAAAYAux" />
<t:Subject>RE: Review Proposal for Tailspin Toys</t:Subject>
<t:DateTimeReceived>2014-01-02T12:52:09Z</t:DateTimeReceived>
</t:Message>
</t:Items>
</t:ConversationNode>
</t:ConversationNodes>
</m:Conversation>
</m:GetConversationItemsResponseMessage>
</m:ResponseMessages>
</m:GetConversationItemsResponse>
</s:Body>
</s:Envelope>
Различия версий
При использовании Exchange Server 2010 с пакетом обновления 1 (SP1) метод FindConversation имеет меньше доступных параметров, а операция FindConversation содержит меньше элементов в запросе.
Табл. 3. Поддержка Версии Exchange 2010 с пакетом обновления 1 (SP1) для FindConversation
Метод управляемого API EWS | Элементы EWS |
---|---|
FindConversation (ViewBase, FolderId) |
IndexedPageItemView SortOrder ParentFolderId |
Метод GetConversationItems EWS Managed API и операция GetConversationItems EWS появились в Exchange Server 2013 г. Приложения, предназначенные для более ранних версий Exchange, могут применять к беседам только действия беседы, как указано в таблице 2.
Методы FindConversation EWS Managed API и FindConversation EWS недоступны в начальной версии Exchange 2010 или в Exchange 2007.