Périodicités et EWS
Découvrez les modèles de périodicité et les séries périodiques dans Exchange.
Une série périodique est un rendez-vous ou une réunion qui se répète selon un modèle défini. Une série périodique peut avoir un nombre spécifique d’occurrences ou peut se répéter indéfiniment. En outre, une série périodique peut avoir des exceptions qui ne suivent pas le modèle du reste des occurrences, et peut avoir des occurrences qui ont été supprimées du modèle. Vous pouvez utiliser l’API managée EWS et EWS pour travailler avec les séries périodiques et les éléments de calendrier associés.
Éléments de calendrier récurrents
Tous les éléments de calendrier appartiennent à l’une des quatre catégories suivantes :
Éléments de calendrier non récurrents
Maîtres récurrents
Occurrences dans une série
Occurrences modifiées dans une série, appelées exceptions
Dans cet article, nous allons examiner les trois types d’éléments de calendrier qui font partie d’une série périodique.
Il est utile de comprendre comment les séries périodiques sont implémentées sur le serveur Exchange. Au lieu de créer un élément distinct distinct pour chaque occurrence d’une série périodique, le serveur crée un seul élément réel dans le calendrier, appelé maître périodique. Le format d’une forme de base périodique est très similaire à un rendez-vous non périodique, avec l’ajout d’informations de modèle de périodicité. Le serveur génère ensuite des occurrences basées sur le modèle de périodicité en réponse aux demandes clientes d’informations de rendez-vous, à l’aide d’un processus appelé expansion. Ces occurrences générées ne sont pas stockées définitivement sur le serveur. Il est important de comprendre cela, car la façon dont vous recherchez des éléments de calendrier détermine les informations que vous recevez et si l’expansion se produit.
Périodicités
L’élément clé d’une série périodique qui rend possible l’expansion est le modèle de périodicité. Le modèle de périodicité se trouve sur la forme de base périodique et décrit un ensemble de critères pour le calcul des occurrences en fonction de la date et de l’heure de la forme de base périodique.
Tableau 1. Modèles de récurrence disponibles
Classe d’API managée EWS | Élément EWS | Exemples |
---|---|---|
Recurrence.DailyPattern |
DailyRecurrence |
Répétez chaque jour. Répétez tous les deux jours. |
Recurrence.MonthlyPattern |
AbsoluteMonthlyRecurrence |
Répétez chaque mois le dixième jour du mois. Répétez tous les deux mois le vingt et unième jour du mois. |
Recurrence.RelativeMonthlyPattern |
RelativeMonthlyRecurrence |
Répétez le deuxième mardi de chaque mois. Répétez le troisième jeudi du mois tous les trois mois. |
Recurrence.RelativeYearlyPattern |
RelativeYearlyRecurrence |
Répétez chaque année le premier lundi d’août. |
Recurrence.WeeklyPattern |
WeeklyRecurrence |
Répétez chaque lundi. Répéter tous les mardis et jeudis toutes les deux semaines. |
Recurrence.YearlyPattern |
AbsoluteYearlyRecurrence |
Répétez chaque année le 1er septembre. |
L’autre information importante d’un modèle de périodicité concerne la fin de la périodicité. Cela peut être exprimé sous la forme d’un nombre défini d’occurrences, d’une date de fin ou d’une absence de fin.
Tableau 2. Options pour la fin d’une série périodique
Méthode/propriété de l’API managée EWS | Élément EWS | Description |
---|---|---|
Recurrence.NumberOfOccurrences |
NumberedRecurrence |
La valeur de cette propriété ou de cet élément spécifie le nombre d’occurrences. |
Recurrence.EndDate |
EndDateRecurrence |
La dernière occurrence de la série se situe à la date spécifiée par cette propriété ou cet élément. |
Recurrence.HasEnd Recurrence.NeverEnds |
NoEndRecurrence |
La série n’a pas de fin. |
Vues développées et non développées
L’utilisation de la méthode FindAppointments dans l’API managée EWS (ou l’opération FindItem avec un élément CalendarView dans EWS) appelle le processus d’expansion. Cela masque les rendez-vous maîtres récurrents du jeu de résultats et présente à la place une vue développée de cette série périodique. Les occurrences de et les exceptions au maître périodique qui appartiennent aux paramètres de l’affichage Calendrier sont incluses dans le jeu de résultats. À l’inverse, l’utilisation de la méthode FindItems dans l’API managée EWS (ou l’opération FindItem avec un élément IndexedPageItemView ou FractionalPageItemView dans EWS) n’appelle pas le processus d’extension, et les occurrences et exceptions ne sont pas incluses. Examinons un exemple comparant les deux méthodes.
Tableau 3. Méthodes et opérations pour la recherche de rendez-vous
Méthode d'API managée EWS | Opération EWS | Développe la série ? | Éléments inclus dans les résultats |
---|---|---|---|
ExchangeService.FindAppointments |
Opération FindItem avec un élément CalendarView |
Oui |
Rendez-vous non récurrents, occurrences uniques de séries périodiques et exceptions aux séries périodiques |
ExchangeService.FindItems |
Opération FindItem avec un élément IndexedPageItemView ou FractionalPageItemView |
Non |
Rendez-vous non récurrents et rendez-vous maîtres récurrents |
Sadie vient d’inscrire son fils à l’équipe de natation. L’équipe s’entraîne tous les mercredis matin à 8 h 30, à partir du 2 juillet, la dernière étant le 6 août. Ne voulant pas oublier la pratique, Sadie ajoute un rendez-vous récurrent à son calendrier pour le rappeler.
Tableau 4. Le rendez-vous récurrent de Sadie
Champ Rendez-vous | Valeur |
---|---|
Subject |
Pratique de l’équipe de natation |
Début |
2 juillet 2014 8h30 |
End |
2 juillet 2014 10:00 |
Revient |
Tous les mercredis |
Dernière occurrence |
6 août 2014 08:30 |
Un aperçu rapide d’un calendrier montre que l’équipe aura un total de six pratiques. Toutefois, il n’y a pas six éléments de rendez-vous distincts dans le calendrier. Au lieu de cela, il n’y a qu’un seul rendez-vous maître récurrent représentant la série.
Voyons maintenant comment trouver des rendez-vous dans le calendrier de Sadie qui se produisent au cours du mois de juillet. L’exemple de code suivant utilise la méthode FindItems dans l’API managée Exchange pour produire une vue non développée du calendrier de Sadie.
PropertySet propSet = new PropertySet(AppointmentSchema.Subject,
AppointmentSchema.Location,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.AppointmentType);
#region FindItems + ItemView method
ItemView itemView = new ItemView(100);
itemView.PropertySet = propSet;
List<SearchFilter> filterList = new List<SearchFilter>();
// Find appointments that start after midnight on July 1, 2014.
SearchFilter.IsGreaterThan startFilter = new SearchFilter.IsGreaterThan(AppointmentSchema.Start,
new DateTime(2014, 7, 1));
// Find appointments that end before midnight on July 31, 2014
SearchFilter.IsLessThan endFilter = new SearchFilter.IsLessThan(AppointmentSchema.End,
new DateTime(2014, 7, 31));
filterList.Add(startFilter);
filterList.Add(endFilter);
SearchFilter.SearchFilterCollection calendarFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filterList);
// This results in a call to EWS.
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Calendar, calendarFilter, itemView);
foreach(Item appt in results.Items)
{
Console.WriteLine(appt.Subject);
}
Ce code entraîne la demande d’opération FindItem suivante avec un élément IndexedPageItemView .
<?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="Pacific Standard Time" />
</t:TimeZoneContext>
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="calendar:Location" />
<t:FieldURI FieldURI="calendar:Start" />
<t:FieldURI FieldURI="calendar:End" />
<t:FieldURI FieldURI="calendar:CalendarItemType" />
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="100" Offset="0" BasePoint="Beginning" />
<m:Restriction>
<t:And>
<t:IsGreaterThan>
<t:FieldURI FieldURI="calendar:Start" />
<t:FieldURIOrConstant>
<t:Constant Value="2014-07-01T07:00:00.000Z" />
</t:FieldURIOrConstant>
</t:IsGreaterThan>
<t:IsLessThan>
<t:FieldURI FieldURI="calendar:End" />
<t:FieldURIOrConstant>
<t:Constant Value="2014-07-31T07:00:00.000Z" />
</t:FieldURIOrConstant>
</t:IsLessThan>
</t:And>
</m:Restriction>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar" />
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
La réponse du serveur comprend un seul élément, le maître périodique, indiqué par la valeur de l’élément CalendarItemType de RecurringMaster. La valeur de l’élément ItemId a été abrégée pour des raisons de lisibilité.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="939" MinorBuildNumber="16" Version="V2_11"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:RootFolder IndexedPagingOffset="1" TotalItemsInView="1" IncludesLastItemInRange="true">
<t:Items>
<t:CalendarItem>
<t:ItemId Id="AAMkADA5..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-02T15:30:00Z</t:Start>
<t:End>2014-07-02T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>RecurringMaster</t:CalendarItemType>
</t:CalendarItem>
</t:Items>
</m:RootFolder>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>
Nous allons maintenant comparer avec une vue développée. L’exemple de code suivant utilise la méthode FindAppointments dans l’API managée EWS pour créer une vue développée du calendrier de Sadie.
PropertySet propSet = new PropertySet(AppointmentSchema.Subject,
AppointmentSchema.Location,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.AppointmentType);
CalendarView calView = new CalendarView(new DateTime(2014, 7, 1),
new DateTime(2014, 7, 31));
calView.PropertySet = propSet;
FindItemsResults<Appointment> results = service.FindAppointments(WellKnownFolderName.Calendar, calView);
foreach(Appointment appt in results.Items)
{
Console.WriteLine(appt.Subject);
}
Ce code génère la demande d’opération FindItem suivante avec un élément CalendarView .
<?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="Pacific Standard Time" />
</t:TimeZoneContext>
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="calendar:Location" />
<t:FieldURI FieldURI="calendar:Start" />
<t:FieldURI FieldURI="calendar:End" />
<t:FieldURI FieldURI="calendar:CalendarItemType" />
</t:AdditionalProperties>
</m:ItemShape>
<m:CalendarView StartDate="2014-07-01T07:00:00.000Z" EndDate="2014-07-31T07:00:00.000Z" />
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar" />
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
Cette fois, la réponse du serveur comprend cinq occurrences, une pour chaque mercredi de juillet. Les éléments CalendarItemType de ces éléments ont tous la valeur Occurrence. Notez que la forme de base périodique n’est pas présente dans la réponse. Les valeurs des éléments ItemId ont été raccourcies pour plus de lisibilité.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="939" MinorBuildNumber="16" Version="V2_11"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:RootFolder TotalItemsInView="5" IncludesLastItemInRange="true">
<t:Items>
<t:CalendarItem>
<t:ItemId Id="AAMkADA6..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-02T15:30:00Z</t:Start>
<t:End>2014-07-02T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
</t:CalendarItem>
<t:CalendarItem>
<t:ItemId Id="AAMkADA7..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-09T15:30:00Z</t:Start>
<t:End>2014-07-09T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
</t:CalendarItem>
<t:CalendarItem>
<t:ItemId Id="AAMkADA8..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-16T15:30:00Z</t:Start>
<t:End>2014-07-16T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
</t:CalendarItem>
<t:CalendarItem>
<t:ItemId Id="AAMkADA9..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-23T15:30:00Z</t:Start>
<t:End>2014-07-23T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
</t:CalendarItem>
<t:CalendarItem>
<t:ItemId Id="AAMkADAA..." ChangeKey="DwAAABYA..." />
<t:Subject>Swim Team Practice</t:Subject>
<t:Start>2014-07-30T15:30:00Z</t:Start>
<t:End>2014-07-30T17:00:00Z</t:End>
<t:Location>Neighborhood Swimming Pool</t:Location>
<t:CalendarItemType>Occurrence</t:CalendarItemType>
</t:CalendarItem>
</t:Items>
</m:RootFolder>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>
Une fois que vous disposez d’une forme de base périodique, d’une occurrence ou d’une exception, vous pouvez toujours récupérer les autres éléments associés. En fonction d’une occurrence ou d’une exception, vous pouvez récupérer le maître récurrent, et inversement.
Utilisation des éléments de calendrier récurrents
Vous utilisez les mêmes méthodes et opérations pour travailler avec des séries périodiques que pour travailler avec des éléments de calendrier non récurrents. La différence est que, selon l’élément que vous utilisez pour appeler ces méthodes ou opérations, les actions que vous effectuez peuvent s’appliquer à la série entière ou à une seule occurrence. Les actions effectuées sur le maître récurrent s’appliquent à toutes les occurrences de la série, tandis que les actions effectuées sur une seule occurrence ou exception s’appliquent uniquement à cette occurrence ou exception.
Dans cette section
Supprimer des rendez-vous dans une série périodique à l’aide d’EWS dans Exchange
Mettre à jour une série périodique à l’aide d’EWS dans Exchange