Обновление повторяющихся серий с помощью EWS
Узнайте, как изменять встречи в повторяющихся сериях с помощью управляемого API или EWS EWS в Exchange.
Управляемый API EWS или EWS можно использовать для обновления повторяющейся серии либо путем обновления всей серии, либо путем обновления одного события. В этой статье мы обсудим, как обновить одно происшествие.
Изменение одной встречи в серии очень похоже на изменение одного экземпляра. Вы используете те же методы и операции, но используете ID элемента возникновения, который необходимо изменить.
При изменении одного события в серии это событие добавляется в массив измененных назначений, связанных с повторяющимся мастером для серии. Вы можете использовать свойство Managed API Appointment.ModifiedOccurrences EWS или элемент ModifiedOccurrences EWS для доступа ко всем встречам в серии, которые были изменены.
Изменение одного события в серии с помощью управляемого API EWS
Привязывайте к возникновению, который необходимо изменить, используя метод Appointment.BindToOccurrence со значением индекса элемента, или метод Appointment.Bind с ИД возникновения. Этот ID вы получите либо из свойства Id объекта " Назначение", соответствующего возникновению, либо из свойства ItemId объекта OccurrenceInfo , соответствующего возникновению.
Обновим свойства объекта Назначение возникновения.
Сохраните изменения в объекте назначения возникновения с помощью метода Appointment.Save .
В следующем примере обновляется встреча в повторяющейся серии и проверяется, что измененное назначение обновляется на повторяющейся мастер. В этом примере предполагается, что вы сдали Exchange сервер и приобрели службу с именем объекта ExchangeService. Параметр recurrenceMasterId
— это идентификатор, связанный с повторяющимся мастером для изменения возникновения.
public static ItemId ModifyARecurringSeries(ExchangeService service, ItemId recurrenceMasterId)
{
Appointment calendarItem = Appointment.Bind(service, recurrenceMasterId, new PropertySet(AppointmentSchema.AppointmentType));
Appointment recurrMaster = new Appointment(service);
if (calendarItem.AppointmentType == AppointmentType.RecurringMaster)
{
// Get the recurring master from an occurrence in a recurring series with the properties you need.
recurrMaster = Appointment.Bind(service,
recurrenceMasterId,
new PropertySet(AppointmentSchema.AppointmentType,
AppointmentSchema.Subject,
AppointmentSchema.FirstOccurrence,
AppointmentSchema.LastOccurrence,
AppointmentSchema.ModifiedOccurrences,
AppointmentSchema.DeletedOccurrences));
}
else
{
Console.WriteLine("Item id was not for a recurring master.");
return recurrenceMasterId;
}
// Bind to the second occurrence in the series with the properties to modify.
Appointment occurrenceToModify = Appointment.BindToOccurrence(service,
recurrMaster.Id,
2,
new PropertySet(AppointmentSchema.Location,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.RequiredAttendees,
AppointmentSchema.Subject));
// Update the properties you want to change.
occurrenceToModify.Location = "Helipad of Contoso Bldg 1";
occurrenceToModify.Start = occurrenceToModify.Start.AddDays(1);
occurrenceToModify.End = occurrenceToModify.End.AddDays(1);
occurrenceToModify.RequiredAttendees.Add("Contoso CEO", "sadie@contoso");
occurrenceToModify.RequiredAttendees.Add("Contoso Head of Research", "ronnie@contoso.com");
occurrenceToModify.RequiredAttendees.Add("Contoso Head of Security", "alfred@contoso.com");
occurrenceToModify.Subject = occurrenceToModify.Subject.ToString() + ":Mandatory";
// Update the occurrence in your calendar folder and send meeting update requests to attendees.
// This method call results in an UpdateItem request to EWS.
occurrenceToModify.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);
// View updated and deleted occurrences on the recurring master prior to retrieving updated information.
Console.WriteLine("Modified Occurrences prior to updating recurring master: {0}",
(recurrMaster.ModifiedOccurrences == null ? "None" : recurrMaster.ModifiedOccurrences.Count.ToString()));
// Update the recurring master to view the modified and deleted occurrences.
recurrMaster = Appointment.Bind(service, recurrenceMasterId, new PropertySet(AppointmentSchema.ModifiedOccurrences,
AppointmentSchema.DeletedOccurrences));
// View updated and deleted occurrences on the recurring master after retrieving updated information.
Console.WriteLine("Modified Occurrences after updating recurring master:\t {0}",
(recurrMaster.ModifiedOccurrences == null ? "None" : recurrMaster.ModifiedOccurrences.Count.ToString()));
return recurrMaster.Id;
}
Изменение одного события в серии с помощью EWS
Изменение одного экземпляра в серии по сути то же самое, что и изменение назначения одного экземпляра. Можно указать, как изменить возникновение, с помощью элемента ItemId или occurrenceItemId .
В следующем примере показан XML запроса при использовании операции UpdateItem для обновления возникновения в повторяющейся серии встреч. ItemId и ChangeKey сокращены для читаемости.
<?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="Exchange2010" />
</soap:Header>
<soap:Body>
<m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToAllAndSaveCopy">
<m:ItemChanges>
<t:ItemChange>
<t:ItemId Id="AAMkA" ChangeKey="DwAAAB" />
<t:Updates>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Location" />
<t:CalendarItem>
<t:Location>Helipad of Contoso Bldg 1</t:Location>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Start" />
<t:CalendarItem>
<t:Start>2014-03-27T19:33:00.000-07:00</t:Start>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:End" />
<t:CalendarItem>
<t:End>2014-03-27T20:33:00.000-07:00</t:End>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:RequiredAttendees" />
<t:CalendarItem>
<t:RequiredAttendees>
<t:Attendee>
<t:Mailbox>
<t:Name>Mack@contoso.com</t:Name>
<t:EmailAddress>Mack@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Sadie@contoso.com</t:Name>
<t:EmailAddress>Sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Magdalena@contoso.com</t:Name>
<t:EmailAddress>Magdalena@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso CEO</t:Name>
<t:EmailAddress>sadie@contoso</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso Head of Research</t:Name>
<t:EmailAddress>ronnie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso Head of Security</t:Name>
<t:EmailAddress>alfred@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
</t:RequiredAttendees>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="item:Subject" />
<t:CalendarItem>
<t:Subject>Weekly Update Meeting:Mandatory</t:Subject>
</t:CalendarItem>
</t:SetItemField>
</t:Updates>
</t:ItemChange>
</m:ItemChanges>
</m:UpdateItem>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос UpdateItem сообщением UpdateItemResponse, которое включает значение ResponseCode NoError, которое указывает на успешное обновление события, и ItemId обновленного назначения.