Propor um novo horário de reunião usando o EWS no Exchange

Descubra como propor novos horários de reunião do seu aplicativo cliente do Exchange usando o EWS no Exchange.

O novo recurso de hora de proposta permite que os participantes proponham novos horários de reunião ao organizador da reunião como parte do fluxo de trabalho do calendário do Exchange. Quando um participante propõe uma nova reunião, o organizador pode usar o novo horário de reunião proposto para atualizar a reunião e enviar atualizações para todos os participantes. Antes de permitir que os participantes proponham novos horários de reunião, você precisa determinar se o organizador permite novas propostas de tempo. Este artigo descreve como determinar se você pode propor um novo tempo e como usar o EWS para propor um novo tempo.

Observação

A API gerenciada EWS não implementa essa funcionalidade.

Determinar se você pode propor uma nova hora para uma reunião usando o EWS

Antes de propor um novo horário para uma reunião, você precisa encontrar uma referência para essa reunião e determinar se o organizador da reunião configurou a reunião para dar suporte a novas propostas de tempo. Você pode obter uma referência a uma reunião fazendo um dos seguintes procedimentos:

  • Encontrar a solicitação de reunião na caixa de entrada

  • Encontrar o compromisso no calendário

Use as seguintes etapas para encontrar uma referência de reunião:

  1. Use a operação FindItem EWS (ou o método Folder.FindItems EWS Managed API) para localizar a solicitação de reunião de destino ou o item de calendário. Como alternativa, você pode usar a operação SyncFolderItems EWS para obter o identificador da solicitação de reunião de destino ou item de calendário.

  2. Analise os resultados da operação FindItem (ou método Folder.FindItems ) para obter o identificador de item do item de reunião.

  3. Use a operação GetItem EWS para obter os objetos de resposta da reunião.

O XML a seguir mostra o que é enviado para solicitar os objetos de resposta em um item.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013" />
    <t:MailboxCulture>en-US</t:MailboxCulture>
  </soap:Header>
  <soap:Body>
    <m:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:ResponseObjects"/>
          <t:FieldURI FieldURI="item:Subject"/>
          <t:FieldURI FieldURI="calendar:Start"/>
          <t:FieldURI FieldURI="calendar:End"/>
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="AAMkADEzOTExYjJkL1AAA=" ChangeKey="CwAAAB/G6X"/>
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

A resposta da operação GetItem será semelhante ao XML a seguir se você solicitar o identificador de item, a hora de início e término da reunião, a coleção de objetos de resposta e se o organizador permitir alterações propostas na hora da reunião. A coleção de objetos de resposta, que é representada pelo elemento ResponseObjects , contém o conjunto de respostas válidas para o item de calendário. O elemento ProposeNewTime é um objeto de resposta que indica que o usuário pode propor um novo tempo para a reunião. Os elementos AcceptItem, TentativelyAcceptItem e DeclineItem representam os objetos de resposta que você pode usar para propor um novo horário de reunião ao organizador da reunião.

<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" 
                         MinorVersion="0" 
                         MajorBuildNumber="815" 
                         MinorBuildNumber="6" 
                         Version="V2_7" 
                         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:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
                       xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:MeetingRequest>
              <t:ItemId Id="AAMkADEzOTExYjJkL1AAA=" ChangeKey="CwAAAB/G6X"/>
              <t:Subject>Competitive analysis: kick off meeting</t:Subject>
              <t:ResponseObjects>
                <t:AcceptItem/>
                <t:TentativelyAcceptItem/>
                <t:DeclineItem/>
                <t:ProposeNewTime/>
                <t:ReplyToItem/>
                <t:ReplyAllToItem/>
                <t:ForwardItem/>
              </t:ResponseObjects>
              <t:Start>2013-11-09T17:00:00Z</t:Start>
              <t:End>2013-11-09T17:30:00Z</t:End>
            </t:MeetingRequest>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

Propor um novo tempo de reunião usando o EWS

Se você recebeu um objeto de resposta ProposeNewTime quando usou a operação GetItem para obter um item de calendário ou solicitação de reunião, poderá responder com uma nova hora de reunião proposta. Se você não recebeu um objeto de resposta ProposeNewTime , não poderá propor um novo horário de reunião como parte do fluxo de trabalho do calendário. No entanto, você pode responder ao organizador para solicitar uma nova hora de reunião. Se você receber um objeto de resposta ProposeNewTime , poderá responder à reunião fazendo referência ao identificador e propor um novo horário de reunião ao organizador. É aqui que o objeto de resposta ProposeNewTime é diferente do padrão de objeto de resposta típico em que você não responde com um objeto de resposta ProposeNewTime . Você usa um dos outros objetos de resposta de reunião, como AcceptItem, ProvisoriamenteAcceptItem ou DeclineItem, para propor uma nova reunião. Este exemplo usa o objeto de resposta AcceptItem .

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013"/>
  </soap:Header>
  <soap:Body>
    <m:CreateItem>
      <m:Items>
        <t:AcceptItem>
          <t:Body BodyType="Text">This time works better for the HiPPO.</t:Body>
          <t:ReferenceItemId Id="AAMkADEzOTExYjJkL1AAA=" ChangeKey="CwAAAB/G6X"/>
          <t:ProposedStart>2013-11-28T04:00:00Z</t:ProposedStart>
          <t:ProposedEnd>2013-11-28T04:30:00Z</t:ProposedEnd>
        </t:AcceptItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

A resposta a essa solicitação contém o identificador do item de calendário que foi adicionado ao calendário do participante e uma cópia da solicitação de reunião que foi colocada na pasta Itens Excluídos do participante. A mensagem de resposta com a nova proposta de tempo também foi salva na pasta Itens Enviados do participante (você precisará encontrar a mensagem de resposta da reunião para obter um identificador sobre ela).

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" 
                         MinorVersion="0" 
                         MajorBuildNumber="815" 
                         MinorBuildNumber="6" 
                         Version="V2_7" 
                         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:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
                          xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:CreateItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:CalendarItem>
              <t:ItemId Id="AAMkAGRmOWE2OWAAA=" ChangeKey="DwAAJsmU"/>
            </t:CalendarItem>
            <t:MeetingRequest>
              <t:ItemId Id="AAMkAGRmOWE2AAABB=" ChangeKey="AAAGJu1A"/>
            </t:MeetingRequest>
          </m:Items>
        </m:CreateItemResponseMessage>
      </m:ResponseMessages>
    </m:CreateItemResponse>
  </s:Body>
</s:Envelope>

O organizador receberá uma mensagem MeetingResponse quando o participante responder com uma nova hora de reunião proposta. A mensagem MeetingResponse contém a nova hora de início e hora de término da reunião proposta e o identificador do item de calendário associado no calendário do organizador. O organizador pode usar essas informações para atualizar seu item de calendário existente para a reunião. A seguir está o fluxo de trabalho para que o organizador responda a uma mensagem MeetingResponse que propõe uma nova hora de reunião:

  1. Determine se os elementos ProposedStart ou ProposedEnd foram definidos no MeetingResponse. Em caso afirmativo, vá para a etapa 2. Caso contrário, a mensagem MeetingResponse indica apenas se o participante aceitou, aceitou provisoriamente ou recusou a reunião.

  2. Obtenha o item de calendário existente do organizador para a reunião usando o identificador EWS retornado no elemento AssociatedCalendarItemId .

  3. Compare o horário de início e término original com a nova hora de reunião proposta. Se o novo horário de reunião proposto for aceitável para o organizador, vá para a etapa 4. Caso contrário, o organizador da reunião pode ignorar a hora da reunião proposta ou enviar uma resposta por email ao participante que propôs a nova hora da reunião.

  4. (Opcional) Execute uma chamada de operação GetUserAvailability EWS para descobrir se o tempo proposto funcionará para todos os participantes, incluindo caixas de correio de sala e recursos. (Você também pode usar o método de API Gerenciada do ExchangeService.GetUserAvailability EWS para fazer isso.)

  5. Em seguida, o organizador pode atualizar sua reunião com os novos horários de reunião propostos e enviar as atualizações para todos os participantes usando a operação UpdateItem EWS (ou o método de API Gerenciada do Appointment.Update EWS).

A figura a seguir mostra o processo que ocorre entre o organizador da reunião, o participante e o servidor exchange que lidou com as chamadas EWS.

Figura 1. Processo para propor um novo horário de reunião

A figura mostra o fluxo de trabalho entre o organizador, o Exchange e um participante quando um novo horário de reunião é proposto. Se o organizador permitir novas propostas de reuniões, um participante poderá propor um novo horário para a reunião com um objeto de resposta.

Diferenças de versão

O novo recurso de hora de proposta foi introduzido no Exchange build versão 15.00.0800.007. Em versões anteriores do Exchange, os usuários do aplicativo EWS precisam enviar um email separado ao organizador da reunião para solicitar um horário de reunião diferente.

Confira também