Créer des événements sur une journée entière à l'aide d’EWS dans Exchange
Découvrez comment créer des événements d’une journée entière à l’aide de l’API managée EWS ou EWS dans Exchange.
Les événements d’une journée entière permettent de représenter quelque chose qui se produit pendant une journée entière ou plusieurs jours, par exemple, un jour férié ou des jours fériés. La création d’événements d’une journée entière avec l’API managée EWS ou EWS est un instantané. C’est comme créer des rendez-vous, mais avec quelques petits changements.
Définition des heures de début et de fin
Par définition, les événements d’une journée entière commencent à minuit un jour spécifique et se terminent 24 heures (ou un multiple de 24 heures) plus tard. Toutefois, l’API managée EWS et EWS vous permettent de spécifier des heures autres que minuit lors de la création d’événements toute la journée. Cela peut entraîner un comportement involontaire si vous ne savez pas comment ces temps sont traduits sur le serveur.
Lorsqu’une demande est reçue pour créer un événement d’une journée entière avec des heures de début et/ou de fin autres que minuit (dans le fuseau horaire de la demande ou du rendez-vous), ces heures sont ajustées à minuit dans le fuseau horaire approprié conformément aux règles suivantes :
- Les heures de début autres que minuit sont ajustées à minuit avant l’heure spécifiée. Par exemple, 13h00 le 6 juin est ajusté à 12h00 le 6 juin.
- Les heures de fin autres que minuit sont ajustées à minuit après l’heure spécifiée. Par exemple, 13h00 le 6 juin est ajusté à 12h00 le 7 juin.
Par conséquent, l’événement d’une journée entière que vous créez comprend toujours l’heure de début et de fin que vous spécifiez, mais peut demander une heure supplémentaire dans le calendrier de l’utilisateur en raison du décalage vers minuit. Étant donné que le serveur ajuste l’heure de début et de fin à minuit, nous vous recommandons de spécifier votre heure de début et de fin à minuit pour éviter toute modification involontaire des heures.
Il est également important de prendre en compte les fuseaux horaires lors de la création d’événements d’une journée entière. Étant donné que le serveur Exchange applique une heure de début et de fin minuit dans le fuseau horaire de la demande ou du rendez-vous, l’affichage de cet événement d’une journée entière dans un client configuré pour un autre fuseau horaire peut produire des résultats inattendus. Selon le client, il peut apparaître comme un événement d’une journée entière avec des jours supplémentaires que vous n’avez pas l’intention d’inclure, ou il peut ne pas apparaître comme un événement d’une journée entière. Pour cette raison, nous vous recommandons d’utiliser le fuseau horaire préféré de l’utilisateur chaque fois que cela est possible lorsque vous créez des événements d’une journée entière.
Créer un événement d’une journée entière à l’aide de l’API managée EWS
L’exemple suivant montre comment utiliser l’API managée EWS pour créer un événement d’une journée entière, commençant à la date spécifiée par le paramètre startDate et durent pendant le nombre de jours spécifié par le paramètre numDays . Notez que le rendez-vous sera créé dans le fuseau horaire spécifié par la propriété ExchangeService.TimeZone . Cet exemple suppose que l’objet ExchangeService passé dans le paramètre de service a été initialisé avec des valeurs valides pour les propriétés Credentials et 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);
}
}
Créer un événement d’une journée entière à l’aide d’EWS
L’exemple suivant montre une demande d’opération CreateItem EWS pour créer un événement d’une journée entière. Le rendez-vous est créé dans le fuseau horaire Est, comme indiqué par l’élément TimeZoneContext . Notez que la partie heure des valeurs des éléments Start et End sont toutes deux 04:00Z, ce qui est converti en minuit dans le fuseau horaire Est pendant l’heure d’été.
<?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>