Crear eventos de todo el día mediante EWS en Exchange

Obtenga información sobre cómo crear eventos de todo el día mediante la API administrada ews o EWS en Exchange.

Los eventos de todo el día proporcionan una forma de representar algo que sucede durante todo un día o varios días, por ejemplo, días festivos o de vacaciones. Crear eventos durante todo el día con la API administrada ews o EWS es un complemento. Es como crear citas, pero con algunos pequeños cambios.

Establecer las horas de inicio y finalización

Por definición, los eventos de todo el día comienzan a medianoche en un día específico y terminan 24 horas (o un múltiplo de 24 horas) más tarde. Sin embargo, la API administrada ews y EWS permiten especificar horas que no son medianoche al crear eventos de todo el día. Esto puede provocar un comportamiento no intencionado si no sabe cómo se traducen estas veces en el servidor.

Cuando se recibe una solicitud para crear un nuevo evento de todo el día con horas de inicio y/o finalización que no son medianoche (en la zona horaria de la solicitud o cita), esas horas se ajustan a medianoche en la zona horaria adecuada de acuerdo con las siguientes reglas:

  • Las horas de inicio que no son de medianoche se ajustan a la medianoche anterior a la hora especificada. Por ejemplo, a la 1:00 p.m. del 6 de junio se ajusta a las 12:00 a.m. del 6 de junio.
  • Las horas de finalización que no son de medianoche se ajustan a la medianoche después de la hora especificada. Por ejemplo, a la 1:00 p.m. del 6 de junio se ajusta a las 12:00 a.m. del 7 de junio.

Por lo tanto, el evento de todo el día que cree siempre incluye la hora de inicio y finalización que especifique, pero puede reclamar tiempo adicional en el calendario del usuario debido al cambio a medianoche. Dado que el servidor ajustará la hora de inicio y finalización a medianoche, se recomienda especificar la hora de inicio y finalización a medianoche para evitar cualquier cambio no intencionado en las horas.

También es importante tener en cuenta las zonas horarias al crear eventos de todo el día. Dado que el servidor Exchange aplica una hora de inicio y finalización de medianoche en la zona horaria de la solicitud o cita, ver que el evento de todo el día en un cliente configurado para una zona horaria diferente puede producir resultados inesperados. Según el cliente, puede aparecer como un evento de todo el día con días adicionales que no tenía intención de incluir, o puede que no aparezca como un evento de todo el día por completo. Debido a esto, se recomienda usar la zona horaria preferida del usuario siempre que sea posible al crear eventos de todo el día.

Crear un evento de todo el día mediante la API administrada de EWS

En el ejemplo siguiente se muestra cómo usar la API administrada de EWS para crear un evento de todo el día, a partir de la fecha especificada por el parámetro startDate y que dura el número de días especificado por el parámetro numDays . Tenga en cuenta que la cita se creará en la zona horaria especificada por la propiedad ExchangeService.TimeZone . En este ejemplo se supone que el objeto ExchangeService pasado en el parámetro service se ha inicializado con valores válidos para las propiedades Credentials y 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);
    }
}

Crear un evento de todo el día mediante EWS

En el ejemplo siguiente se muestra una solicitud de operación CreateItem de EWS para crear un evento de todo el día. La cita se crea en la zona horaria oriental, tal como se indica en el elemento TimeZoneContext . Observe que la parte de hora de los valores de los elementos Start y End es a las 04:00Z, que se convierte a medianoche en la zona horaria oriental durante el horario de verano.

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

Vea también: Calendarios y EWS en Exchange