Accéder à une série périodique à l’aide d’EWS dans Exchange
Découvrez comment accéder aux éléments de calendrier d’une série périodique à l’aide de l’API managée EWS ou EWS dans Exchange.
Une série périodique de rendez-vous ou de réunions est composée d’un maître périodique, d’un certain nombre d’occurrences dans une série qui se répètent selon un modèle défini et, éventuellement, d’ensembles d’occurrences qui ont été modifiées et qui ont été supprimées. Vous pouvez utiliser l’API managée EWS ou EWS pour accéder aux éléments de calendrier d’une série périodique. Cela vous permet de :
Vérifiez si un élément de calendrier associé à un ID d’élément est une forme de base périodique, une occurrence dans une série ou une exception à une série.
Recherchez les rendez-vous de périodicité dans votre dossier de calendrier.
Obtenir les éléments de calendrier de périodicité associés
Itérer au sein des occurrences d’une série, des exceptions d’occurrence ou des suppressions d’occurrences.
Obtenir une collection d’éléments de calendrier récurrents à l’aide de l’API managée EWS
Si vous souhaitez récupérer une collection de rendez-vous, vous pouvez utiliser la méthode ExchangeService.FindAppointments pour récupérer tous les rendez-vous entre une date de début et une date de fin donnée, puis ajouter tous les éléments de calendrier avec un type de rendez-vous Occurrence ou Exception à une collection, comme illustré dans l’exemple suivant.
Cet exemple suppose que vous ont été authentifiés auprès d'un serveur Exchange et que vous avez acquis un ExchangeService object named service.
public static Collection<Appointment> FindRecurringCalendarItems(ExchangeService service,
DateTime startSearchDate,
DateTime endSearchDate)
{
// Instantiate a collection to hold occurrences and exception calendar items.
Collection<Appointment> foundAppointments = new Collection<Appointment>();
// Create a calendar view to search the calendar folder and specify the properties to return.
CalendarView calView = new CalendarView(startSearchDate, endSearchDate);
calView.PropertySet = new PropertySet(BasePropertySet.IdOnly,
AppointmentSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.IsRecurring,
AppointmentSchema.AppointmentType);
// Retrieve a collection of calendar items.
FindItemsResults<Appointment> findResults = service.FindAppointments(WellKnownFolderName.Calendar, calView);
// Add all calendar items in your view that are occurrences or exceptions to your collection.
foreach (Appointment appt in findResults.Items)
{
if (appt.AppointmentType == AppointmentType.Occurrence || appt.AppointmentType == AppointmentType.Exception)
{
foundAppointments.Add(appt);
}
else
{
Console.WriteLine("Discarding calendar item of type {0}.", appt.AppointmentType);
}
}
return foundAppointments;
}
Notez que les éléments récurrents du calendrier principal ne sont pas retournés dans un appel à FindAppointments. Si vous souhaitez récupérer des formes de base périodiques ou une approche plus générale de la récupération des éléments de calendrier, vous devez utiliser ExchangeService.FindItems. Vous pouvez ensuite utiliser un filtre de recherche pour récupérer uniquement les éléments dont la date de début est supérieure ou égale à une date que vous choisissez, et un affichage d’élément pour limiter le nombre d’éléments à renvoyer. Notez qu’un maître récurrent dont la date de début est antérieure à la date de début de votre recherche est introuvable, même si des occurrences se produisent dans cette plage.
Cet exemple suppose que vous ont été authentifiés auprès d'un serveur Exchange et que vous avez acquis un ExchangeService object named service.
public static Collection<Appointment> FindCalendarItemsByAppointmentType(ExchangeService service,
AppointmentType myAppointmentType,
DateTime startSearchDate)
{
Collection<Appointment> foundAppointments = new Collection<Appointment>();
// Create a search filter based on the start search date.
SearchFilter.SearchFilterCollection searchFilter = new SearchFilter.SearchFilterCollection();
searchFilter.Add(new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, startSearchDate));
// Create an item view to specify which properties to return.
ItemView view = new ItemView(20);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly,
AppointmentSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.AppointmentType,
AppointmentSchema.IsRecurring);
// Get the appointment items from the server with the properties we specified.
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Calendar, searchFilter, view);
// Add each of the appointments of the type you want to the collection.
foreach (Item item in findResults.Items)
{
Appointment appt = item as Appointment;
if (appt.AppointmentType == myAppointmentType)
{
foundAppointments.Add(appt);
}
}
return foundAppointments;
}
Obtenir les éléments de calendrier de périodicité associés à l’aide de l’API managée EWS
Parfois, vous avez une pièce du puzzle, mais pour le résoudre, vous avez besoin du reste des pièces. Si vous disposez de l’ID d’élément d’un élément de calendrier de périodicité, vous pouvez obtenir les autres éléments dont vous avez besoin à l’aide de l’une des propriétés ou méthodes de l’API managée EWS.
Tableau 1. Propriété ou méthode de l’API managée EWS à utiliser pour obtenir les éléments de calendrier de périodicité associés
Si vous avez l’ID d’élément pour... | Vous pouvez obtenir... | En utilisant le... |
---|---|---|
Élément de calendrier principal récurrent |
Première occurrence d’une série Dernière occurrence d’une série Exceptions à une série Les rendez-vous supprimés dans une série Toute occurrence (compte tenu de son index) |
Propriété Appointment.FirstOccurrence Propriété Appointment.LastOccurrence Propriété Appointment.ModifiedOccurrences Propriété Appointment.DeletedOccurrences Méthode Appointment.BindToOccurrence |
Une occurrence unique dans une série |
La forme de base périodique |
Méthode Appointment.BindToRecurringMaster |
Tout élément de calendrier (objet Appointment ) |
Valeur d’énumération du type de rendez-vous |
Propriété Appointment.AppointmentType |
L’exemple de code suivant montre comment obtenir une forme de base périodique, la première ou la dernière occurrence d’une série, ou une occurrence en fonction de son index.
Cet exemple suppose que vous ont été authentifiés auprès d'un serveur Exchange et que vous avez acquis un ExchangeService object named service.
public static void GetRelatedRecurrenceCalendarItems(ExchangeService service, ItemId itemId)
{
Appointment calendarItem = Appointment.Bind(service, itemId, new PropertySet(AppointmentSchema.AppointmentType));
Appointment recurrMaster = new Appointment(service);
PropertySet props = new PropertySet(AppointmentSchema.AppointmentType,
AppointmentSchema.Subject,
AppointmentSchema.FirstOccurrence,
AppointmentSchema.LastOccurrence,
AppointmentSchema.ModifiedOccurrences,
AppointmentSchema.DeletedOccurrences);
// If the item ID is not for a recurring master, retrieve the recurring master for the series.
switch (calendarItem.AppointmentType)
{
// Calendar item is a recurring master so use Appointment.Bind
case AppointmentType.RecurringMaster:
recurrMaster = Appointment.Bind(service, itemId, props);
break;
// The calendar item is a single instance meeting, so there are no instances to modify or delete.
case AppointmentType.Single:
Console.WriteLine("Item id must reference a calendar item that is part of a recurring series.");
return;
// The calendar item is an occurrence in the series, so use BindToRecurringMaster.
case AppointmentType.Occurrence:
recurrMaster = Appointment.BindToRecurringMaster(service, itemId, props);
break;
// The calendar item is an exception to the series, so use BindToRecurringMaster.
case AppointmentType.Exception:
recurrMaster = Appointment.BindToRecurringMaster(service, itemId, props);
break;
}
// View the first occurrence, last occurrence, and number of modified and deleted occurrences associated with the recurring master.
Console.WriteLine("Information for the {0} recurring series:", recurrMaster.Subject);
Console.WriteLine("The start time for the first appointment with id \t{0} was on \t{1}.",
recurrMaster.FirstOccurrence.ItemId.ToString().Substring(144),
recurrMaster.FirstOccurrence.Start.ToString());
Console.WriteLine("The start time for the last appointment with id \t{0} will be on \t{1}.",
recurrMaster.LastOccurrence.ItemId.ToString().Substring(144),
recurrMaster.LastOccurrence.Start.ToString());
Console.WriteLine("There are {0} modified occurrences and {1} deleted occurrences.",
recurrMaster.ModifiedOccurrences == null ? "no" : recurrMaster.ModifiedOccurrences.Count.ToString(),
recurrMaster.DeletedOccurrences == null ? "no" : recurrMaster.DeletedOccurrences.Count.ToString());
// Bind to the first occurrence of a series by using its index.
Appointment firstOccurrence = Appointment.BindToOccurrence(service,
recurrMaster.Id,
1, // Index of first item is 1, not 0.
new PropertySet(AppointmentSchema.AppointmentType,
AppointmentSchema.Start));
Console.WriteLine("Compare the start times for a recurring master's first occurrence " +
"and the occurrence found at index 1 using the BindToOccurrence method:");
Console.WriteLine("The appointment at index 1 has a start time of\t\t\t\t {0}\n" +
"Which matches that of the first occurrence on the recurring master: \t {1}",
firstOccurrence.Start.ToString(),
recurrMaster.FirstOccurrence.Start.ToString());
}
Accéder aux éléments de calendrier d’une série périodique à l’aide d’EWS
L’accès aux éléments de calendrier d’une série périodique est très similaire à l’accès à des instances uniques d’éléments de calendrier. Vous utilisez une demande d’opération GetItem , en spécifiant les propriétés souhaitées, avec l’OccurrenceItemId de l’instance de rendez-vous dont vous avez besoin. OccurrenceItemId contient l’ItemID du maître récurrent de l’occurrence, ainsi que sa valeur d’index dans la série.
Le code XML suivant montre la requête GetItem utilisée pour retourner une occurrence dans une série spécifiée par son index. Notez que l’ItemID du maître périodique a été raccourci pour plus de lisibilité.
<?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="Exchange2010" />
</soap:Header>
<soap:Body>
<m:GetItem>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="calendar:CalendarItemType" />
<t:FieldURI FieldURI="calendar:Start" />
</t:AdditionalProperties>
</m:ItemShape>
<m:ItemIds>
<t:OccurrenceItemId RecurringMasterId="AAMkA" InstanceIndex="1" />
</m:ItemIds>
</m:GetItem>
</soap:Body>
</soap:Envelope>
Le serveur répond à la requête GetItem avec un message GetItemResponse qui inclut une valeur ResponseCodenoError, qui indique que l’e-mail a été créé avec succès, et l’ItemId du message nouvellement créé.