Share via


Criar eventos de todos os dias usando o EWS no Exchange

Saiba como criar eventos durante todo o dia usando a API Gerenciada do EWS ou o EWS no Exchange.

Eventos durante todo o dia fornecem uma maneira de representar algo que acontece por um dia inteiro ou vários dias , por exemplo, um feriado ou dias de férias. Criar eventos durante todo o dia com a API Gerenciada do EWS ou o EWS é um snap. É como criar compromissos, mas com algumas pequenas alterações.

Configurando horários de início e término

Por definição, os eventos durante todo o dia começam à meia-noite em um dia específico e terminam 24 horas (ou várias 24 horas) depois. No entanto, a API Gerenciada do EWS e o EWS permitem especificar horários diferentes da meia-noite ao criar eventos do dia todo. Isso pode levar a um comportamento não intencional se você não estiver ciente de como essas vezes são traduzidas no servidor.

Quando uma solicitação é recebida para criar um novo evento durante todo o dia com não-meia-noite (no fuso horário da solicitação ou compromisso) horários de início e/ou término, essas horas são ajustadas à meia-noite no fuso horário apropriado de acordo com as seguintes regras:

  • Os horários de início fora da meia-noite são ajustados para a meia-noite antes da hora especificada. Por exemplo, 13:00 em 6 de junho é ajustado para 12:00 em 6 de junho.
  • Os horários de término fora da meia-noite são ajustados para a meia-noite após a hora especificada. Por exemplo, 13:00 em 6 de junho é ajustado para 12:00 em 7 de junho.

Portanto, o evento durante todo o dia que você cria é sempre inclusivo da hora de início e término que você especifica, mas pode reivindicar tempo adicional no calendário do usuário devido à mudança para meia-noite. Como o servidor ajustará a hora de início e término à meia-noite, recomendamos que você especifique sua hora de início e término à meia-noite para evitar alterações não intencionais nos horários.

Também é importante considerar fusos horários ao criar eventos durante todo o dia. Como o servidor exchange impõe um horário de início e término da meia-noite no fuso horário da solicitação ou compromisso, exibir esse evento durante todo o dia em um cliente configurado para um fuso horário diferente pode gerar resultados inesperados. Dependendo do cliente, ele pode aparecer como um evento durante todo o dia com dias extras que você não pretendia incluir, ou pode não aparecer como um evento durante todo o dia. Por causa disso, recomendamos que você use o fuso horário preferido do usuário sempre que possível ao criar eventos durante todo o dia.

Criar um evento durante todo o dia usando a API Gerenciada do EWS

O exemplo a seguir mostra como usar a API Gerenciada do EWS para criar um evento durante todo o dia, começando na data especificada pelo parâmetro startDate e com duração para o número de dias especificado pelo parâmetro numDays . Observe que o compromisso será criado no fuso horário especificado pela propriedade ExchangeService.TimeZone . Este exemplo pressupõe que o objeto ExchangeService passado no parâmetro de serviço foi inicializado com valores válidos para as propriedades Credenciais e 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);
    }
}

Criar um evento durante todo o dia usando o EWS

O exemplo a seguir mostra uma solicitação de operação CreateItem do EWS para criar um evento durante todo o dia. O compromisso é criado no fuso horário oriental, conforme indicado pelo elemento TimeZoneContext . Observe que a parte de hora dos valores dos elementos Start e End é 04:00Z, que se converte em meia-noite no fuso horário leste durante o horário de verão.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://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>

Confira também: Calendários e EWS no Exchange