Поделиться через


Создание событий на весь день с помощью EWS в Exchange

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

События на весь день позволяют представить то, что происходит в течение целого дня или нескольких дней, например праздник или отпуск. Создание событий в течение всего дня с помощью управляемого API EWS или EWS — это привязка. Это как создание встреч, но с небольшими изменениями.

Настройка времени начала и окончания

По определению события в течение всего дня начинаются в полночь определенного дня и заканчиваются через 24 часа (или кратно 24 часам). Однако управляемый API EWS и EWS позволяют указывать время, отличное от полуночи, при создании событий в течение всего дня. Это может привести к непреднамеренности поведения, если вы не знаете, как это время преобразуется на сервере.

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

  • Время начала, отличное от полуночи, корректируется до полуночи до указанного времени. Например, 13:00 6 июня корректируется до 12:00 6 июня.
  • Время окончания, отличное от полуночи, корректируется до полуночи после указанного времени. Например, 13:00 6 июня корректируется до 00:00 7 июня.

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

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

Создание события в течение всего дня с помощью управляемого API EWS

В следующем примере показано, как использовать управляемый API EWS для создания события на весь день, начиная с даты, указанной параметром startDate , и продолжительности в течение числа дней, указанного параметром numDays . Обратите внимание, что встреча будет создана в часовом поясе, указанном свойством ExchangeService.TimeZone . В этом примере предполагается, что объект ExchangeService , переданный в параметре службы , инициализирован с допустимыми значениями свойств Credentials и Url .

static void CreateAllDayAppointment(ExchangeService service, DateTime startDate, int numDays)
{
    // Best practice is to set the start date to midnight
    // on the first day of the all-day event.
    DateTime startDateMidnight = startDate.Date;
    // The end date should be midnight on the first day
    // after the event.
    DateTime endDateMidnight = startDateMidnight.AddDays(numDays);
    Appointment allDayEvent = new Appointment(service);
    // Set IsAllDayEvent to true.
    allDayEvent.IsAllDayEvent = true;
    // Set other properties.
    allDayEvent.Subject = "Vacation";
    allDayEvent.LegacyFreeBusyStatus = LegacyFreeBusyStatus.OOF;
    allDayEvent.Start = startDateMidnight;
    allDayEvent.End = endDateMidnight;
    // Save the appointment.
    try
    {
        allDayEvent.Save(WellKnownFolderName.Calendar, SendInvitationsMode.SendToNone);
        Console.WriteLine("All day event created.");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving all day event: {0}", ex.Message);
    }
}

Создание события на весь день с помощью EWS

В следующем примере показан запрос операции EWS CreateItem для создания события на весь день. Встреча создается в часовом поясе Восточная, как указано в элементе TimeZoneContext . Обратите внимание, что временная часть значений элементов Start и End — 04:00Z, которая преобразуется в полночь в восточном часовом поясе во время летнего времени.

<?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="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="calendar" />
      </m:SavedItemFolderId>
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Vacation</t:Subject>
          <t:Start>2014-06-09T04:00:00.000Z</t:Start>
          <t:End>2014-06-10T04:00:00.000Z</t:End>
          <t:IsAllDayEvent>true</t:IsAllDayEvent>
          <t:LegacyFreeBusyStatus>OOF</t:LegacyFreeBusyStatus>
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

См. также календари и EWS в Exchange