Предложение нового времени собрания с помощью EWS в Exchange

Узнайте, как предлагать новое время собрания из клиентского приложения Exchange с помощью EWS в Exchange.

Функция предложения нового времени позволяет участникам предлагать организатору собрания новое время собрания в рамках рабочего процесса календаря Exchange. Когда участник предлагает новое собрание, организатор может использовать предложенное новое время собрания для обновления собрания и отправки обновлений всем участникам. Прежде чем разрешить участникам предлагать новое время собрания, необходимо определить, разрешает ли организатор новые предложения по времени. В этой статье описывается, как определить, можно ли предложить новое время и как использовать EWS для предложения нового времени.

Примечание.

Управляемый API EWS не реализует эту функцию.

Определите, можно ли предложить новое время для собрания с помощью EWS

Прежде чем предлагать новое время для собрания, необходимо найти ссылку на это собрание и определить, настроен ли организатор собрания для поддержки новых предложений по времени. Вы можете получить ссылку на собрание, выполнив одно из следующих действий:

  • Поиск приглашения на собрание в папке "Входящие"

  • Поиск встречи в календаре

Чтобы найти ссылку на собрание, выполните следующие действия.

  1. Используйте операцию FindItem EWS (или метод Folder.FindItems EWS Managed API), чтобы найти целевой запрос на собрание или элемент календаря. Кроме того, можно использовать операцию EWS SyncFolderItems , чтобы получить идентификатор целевого приглашения на собрание или элемента календаря.

  2. Выполните синтаксический анализ результатов операции FindItem (или метод Folder.FindItems ), чтобы получить идентификатор элемента собрания.

  3. Используйте операцию GetItem EWS, чтобы получить объекты ответа для собрания.

В следующем XML-файле показано, что отправляется для запроса объектов ответа на элемент.

<?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>

Если вы запросите идентификатор элемента, время начала и окончания собрания, коллекцию объектов отклика GetItem будет выглядеть примерно так, как в следующем формате XML, а организатор допускает предлагаемые изменения времени собрания. Коллекция объектов response, представленная элементом ResponseObjects , содержит набор ответов, допустимых для элемента календаря. Элемент ProposeNewTime — это объект ответа, указывающий, что пользователь может предложить новое время для собрания. Элементы AcceptItem, TentativelyAcceptItem и DeclineItem представляют объекты ответа, которые можно использовать для предложения нового времени собрания организатору собрания.

<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>

Предложение нового времени собрания с помощью EWS

Если при использовании операции GetItem для получения элемента календаря или приглашения на собрание вы получили объект ответа ProposedNewTime, вы можете ответить с предлагаемым новым временем собрания. Если вы не получили объект ответа ProposeNewTime , вы не сможете предложить новое время собрания в рамках рабочего процесса календаря. Однако вы можете ответить организатору, чтобы запросить новое время собрания. Если вы получаете объект ответа ProposeNewTime , вы можете ответить на собрание, указав его идентификатор, и предложить организатору новое время собрания. Здесь объект ответа ProposeNewTime отличается от типичного шаблона объекта ответа, так как вы не отвечаете объектом ответа ProposeNewTime . Чтобы предложить новое собрание, используйте один из других объектов ответа на собрание, например AcceptItem, TentativelyAcceptItem или DeclineItem. В этом примере используется объект ответа 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>

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

<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>

Организатор получит сообщение MeetingResponse , когда участник ответит предлагаемым новым временем собрания. Сообщение MeetingResponse содержит предлагаемое время начала и окончания собрания, а также идентификатор связанного элемента календаря в календаре организатора. Организатор может использовать эти сведения для обновления существующего элемента календаря для собрания. Ниже приведен рабочий процесс, в соответствии с которым организатор отвечает на сообщение MeetingResponse , предлагающее новое время собрания.

  1. Определите, заданы ли элементы ProposedStart или ProposedEnd в MeetingResponse. Если да, перейдите к шагу 2. В противном случае сообщение MeetingResponse указывает только, принял ли участник, предварительно принял или отклонил собрание.

  2. Получите существующий элемент календаря организатора для собрания с помощью идентификатора EWS, возвращенного в элементе AssociatedCalendarItemId .

  3. Сравните исходное время начала и окончания с предлагаемым новым временем собрания. Если предложенное новое время собрания приемлемо для организатора, перейдите к шагу 4. В противном случае организатор собрания может либо игнорировать предложенное время собрания, либо отправить ответ по электронной почте участнику, который предложил новое время собрания.

  4. (Необязательно) Выполните вызов операции GetUserAvailability EWS, чтобы узнать, будет ли работать предлагаемое время для всех участников, включая почтовые ящики помещений и ресурсов. (Для этого также можно использовать метод Управляемого API ExchangeService.GetUserAvailability EWS.)

  5. Затем организатор может обновить свое собрание новым предложенным временем собрания и отправить обновления всем участникам с помощью операции UpdateItem EWS (или метода Appointment.Update EWS Managed API).

На следующем рисунке показан процесс, который происходит между организатором собрания, участником и сервером Exchange Server, обрабатывающим вызовы EWS.

Рис. 1. Процесс предложения нового времени собрания

На рисунке показан рабочий процесс между организатором, Exchange и участником, когда предлагается новое время собрания. если организатор разрешил предложения новых собраний, участник может предложить новое время собрания с помощью объекта ответа.

Различия версий

Функция предложения нового времени появилась в сборке Exchange версии 15.00.0800.007. В более ранних версиях Exchange пользователи приложений EWS должны были отправить отдельное сообщение электронной почты организатору собрания, чтобы запросить другое время собрания.

Дополнительные ресурсы