Partager via


Créer des rendez-vous dans un fuseau horaire spécifique en utilisant EWS dans Exchange

Lorsqu’un rendez-vous ou une réunion est créé dans un calendrier Exchange, le fuseau horaire utilisé pour spécifier les heures de début et de fin est enregistré en tant que fuseau horaire de création pour le rendez-vous. Ce fuseau horaire est également utilisé pour interpréter les valeurs de date et d’heure qui n’ont pas de fuseau horaire explicite spécifié. Il est donc important de comprendre vos options pour spécifier le fuseau horaire.

Créer des rendez-vous dans différents fuseaux horaires à l’aide de l’API managée EWS

Lorsque vous créez des rendez-vous ou des réunions à l’aide de l’API managée EWS, vous avez trois options pour spécifier le fuseau horaire :

  • Pour utiliser le fuseau horaire de l’ordinateur sur lequel s’exécute votre API managée EWS, ne spécifiez pas de fuseau horaire lors de la création de l’objet ExchangeService .

  • Pour utiliser un fuseau horaire spécifique pour toutes les propriétés date/heure, y compris les propriétés lors de la création d’un rendez-vous ou d’une réunion, spécifiez un fuseau horaire dans le constructeur pour l’objet ExchangeService .

  • Pour utiliser un fuseau horaire différent de celui spécifié dans la propriété ExchangeService.TimeZone , utilisez les propriétés Appointment.StartTimeZone et Appointment.EndTimeZone .

Remarque

La propriété EndTimeZone n’est disponible que lorsque la propriété ExchangeService.RequestedServerVersion est définie sur Exchange2010 ou version ultérieure. S’il n’est pas disponible, la définition de StartTimeZone s’applique aux heures de début et de fin du rendez-vous.

Dans l’exemple suivant, l’API managée EWS est utilisée pour créer trois rendez-vous. Chaque rendez-vous est défini pour commencer à 13h00 dans deux jours, dans un fuseau horaire non spécifié, et se terminer une heure plus tard. Le premier rendez-vous est créé dans le fuseau horaire de l’ordinateur client à l’aide du comportement par défaut de l’API managée EWS. Le deuxième est créé dans le fuseau horaire central à l’aide des propriétés Appointment.StartTimeZone et Appointment.EndTimeZone . Dans ce cas, nous définissons également la propriété étendue TimeZoneDescription sur la même valeur que TimeZone utilisée. Le troisième est créé dans le fuseau horaire Montagne à l’aide de la propriété ExchangeService.TimeZone .

using Microsoft.Exchange.WebServices.Data;
using System.Security;
static void CreateAppointments(string userEmail, SecureString userPass)
{
    // *****************************************************
    // Create an appointment using the client computer's time zone.
    // *****************************************************
    // Do not specify a time zone when creating the ExchangeService.
    ExchangeService clientTZService = new ExchangeService(ExchangeVersion.Exchange2010);
    clientTZService.Credentials = new NetworkCredential(userEmail, userPass);
    clientTZService.AutodiscoverUrl(userEmail, redirectionCallback);
    // Create the appointment.
    Appointment clientTZAppt = new Appointment(clientTZService);
    clientTZAppt.Subject = "Appointment created using client time zone";
    clientTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", clientTZService.TimeZone.DisplayName));
    // Set the start time to 1:00 PM two days from today.
    DateTime startTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 2);
    startTime = startTime.AddHours(13);
    clientTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    DateTime endTime = startTime.AddHours(1);
    clientTZAppt.End = endTime;
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        clientTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
    // *****************************************************
    // Create an appointment in the Central time zone by
    // using the StartTimeZone property.
    // *****************************************************
    // Extended Property for the TimeZone Description
    ExtendedPropertyDefinition tzDescription = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Appointment, 33332, MapiPropertyType.String);
    // Retrieve the Central time zone.
    TimeZoneInfo centralTZ = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
    // Create the appointment.
    Appointment centralTZAppt = new Appointment(clientTZService);
    centralTZAppt.Subject = "Appointment created using Central time zone";
    centralTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", centralTZ.DisplayName));
    // Set the time zone on the appointment.
    centralTZAppt.StartTimeZone = centralTZ;
    centralTZAppt.EndTimeZone = centralTZ;
    // Set the start time to 1:00 PM two days from today.
    centralTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    centralTZAppt.End = endTime;
    // Set the TimeZone Description on the appointment/meeting
    centralTZAppt.SetExtendedProperty(tzDescription, centralTZ.DisplayName);
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        centralTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
    // *****************************************************
    // Create an appointment in the Mountain time zone by
    // using the ExchangeService.TimeZone property.
    // *****************************************************
    // Specify the Mountain time zone when creating the ExchangeService.
    TimeZoneInfo mountainTZ = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");
    ExchangeService mountainTZService = new ExchangeService(ExchangeVersion.Exchange2010, mountainTZ);
    mountainTZService.Credentials = new NetworkCredential(userEmail, userPass);
    mountainTZService.AutodiscoverUrl(userEmail, redirectionCallback);
    // Create the appointment.
    Appointment mountainTZAppt = new Appointment(mountainTZService);
    mountainTZAppt.Subject = "Appointment created using Mountain time zone";
    mountainTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", mountainTZService.TimeZone.DisplayName));
    // Set the start time to 1:00 PM two days from today.
    mountainTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    mountainTZAppt.End = endTime;
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        mountainTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
}

Remarque

Dans le deuxième exemple, la propriété étendue TimeZoneDescription doit être définie pour éviter un problème d’potentialité lorsque des mises à jour de réunion sont envoyées au destinataire en entrée.

Lorsque cet exemple est exécuté sur un ordinateur client configuré dans le fuseau horaire Est et que les trois rendez-vous qu’il crée sont affichés à partir d’un client configuré dans le fuseau horaire Est, ils apparaissent respectivement à 13h00, 14h00 et 15h00.

Créer des rendez-vous dans différents fuseaux horaires à l’aide d’EWS

Lorsque vous créez des rendez-vous ou des réunions à l’aide d’EWS, vous avez trois options pour spécifier le fuseau horaire :

L’exemple suivant de demande d’opération CreateItem crée un rendez-vous à l’aide de l’utc. Notez que l’élément TimeZoneContext , l’élément StartTimeZone et l’élément EndTimeZone sont absents. Les valeurs des éléments Start et End sont exprimées au format UTC.

<?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="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using UTC</t:Subject>
          <t:Body BodyType="HTML">Time zone: UTC</t:Body>
          <t:Start>2023-02-07T17:00:00.000Z</t:Start>
          <t:End>2023-02-07T18:00:00.000Z</t:End>
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

L’exemple suivant de demande d’opération CreateItem utilise les éléments StartTimeZone et EndTimeZone pour spécifier le fuseau horaire central du rendez-vous. Notez que l’élément TimeZoneContext est absent. Toutefois, si elle était présente, les valeurs des éléments StartTimeZone et EndTimeZone remplaceraient sa valeur. Là encore, les valeurs des éléments Start et End sont exprimées au format UTC. Nous définissons également la propriété étendue TimeZoneDescription sur la même valeur que TimeZone utilisée.

<?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="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using Central time zone</t:Subject>
          <t:Body BodyType="HTML">Time zone: (UTC-06:00) Central Time (US &amp;amp; Canada)</t:Body>
          <t:ExtendedProperty>
             <t:ExtendedFieldURI DistinguishedPropertySetId="Appointment" PropertyId="33332" PropertyType="String" />
             <t:Value>(UTC-06:00) Central Time (US &amp; Canada)</t:Value>
          </t:ExtendedProperty>
          <t:Start>2023-02-07T18:00:00.000</t:Start>
          <t:End>2023-02-07T19:00:00.000</t:End>
          <t:StartTimeZone Id="Central Standard Time" />
          <t:EndTimeZone Id="Central Standard Time" />
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

L’exemple suivant de demande d’opération CreateItem définit l’élément TimeZoneContext sur le fuseau horaire Montagne. Notez que les éléments StartTimeZone et EndTimeZone sont absents. Again, the Start and End element values are expressed in UTC.

<?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="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Mountain Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using Mountain time zone</t:Subject>
          <t:Body BodyType="HTML">Time zone: (UTC-07:00) Mountain Time (US &amp;amp; Canada)</t:Body>
          <t:Start>2023-02-07T19:00:00.000</t:Start>
          <t:End>2023-02-07T20:00:00.000</t:End>
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Lorsque les trois rendez-vous créés par les exemples de demandes EWS précédents sont affichés à partir d’un client configuré dans le fuseau horaire Est, ils apparaissent respectivement à 13h00, 14h00 et 15h00.

Maintenant que vous savez comment créer des rendez-vous dans des fuseaux horaires spécifiques, vous pouvez mettre à jour les fuseaux horaires des rendez-vous existants vers un autre.

Voir aussi