Получить сообщение о недавнем разговоре из MS Graph API

#c# #microsoft-graph-api #exchangewebservices

#c# #microsoft-graph-api-интерфейс #exchangewebservices #microsoft-graph-api

Вопрос:

Я не могу получить узлы разговора из сообщения электронной почты, используя MS graph API. Мне нужен последний элемент электронной почты.

Мое приложение использовало Microsoft.Обмен.Веб-сервисы для получения электронной почты и разговоров, теперь я обновляю это приложение до MS Graph API.

Старый код:

 EmailMessage email = EmailMessage.Bind(service, new ItemId(emailId));
ConversationResponse response = service.GetConversationItems(email.ConversationId,
                                              properties,
                                             null,
                                             null,
                                             ConversationSortOrder.TreeOrderAscending); 
foreach (ConversationNode objC in response.ConversationNodes)
 {
       foreach (Item objItem in objC.Items)
       {
            objItem.Load(new PropertySet(EmailMessageSchema.UniqueBody, ItemSchema.Attachments,
                                                    EmailMessageSchema.Sender,
                                                   EmailMessageSchema.Subject));
       }
 }
  

Graph API:

 Message message = await _client.Users[_config.UserName].Messages[emailId]
                      .Request()
                      .GetAsync();
  

Я не нашел никакого свойства или метода для получения узлов беседы в сообщении.

Ответ №1:

Вы можете использовать conversationId и фильтр, чтобы получить все сообщения в разговоре, например, что-то вроде

 var ConversationMessages = await GraphServiceClient.Users[UserId].Messages.Request().Filter("conversationid eq '"   Message.ConversationId   "'").GetAsync();
  

Если вы хотите, чтобы сообщения возвращались в порядке последнего получения, вам также необходимо включить receivedDateTime в фильтр, тогда вы можете упорядочивать по нему (без получения ошибки), например

 var ConversationMessages2 = await GraphServiceClient.Users[UserId].Messages.Request().Filter("(receivedDateTime gt 2020-08-20) and (conversationid eq '"   Message.ConversationId   "')").OrderBy("receivedDateTime desc").GetAsync();