Aktualisieren einer Serie mit EWS in Exchange
Erfahren Sie, wie Sie eine ganze Serie gleichzeitig mithilfe der EWS Managed API oder EWS in Exchange aktualisieren.
Sie können die verwaltete EWS-API oder EWS verwenden, um eine Serie zu aktualisieren, indem Sie entweder die gesamte Reihe oder ein einzelnes Vorkommen aktualisieren. In diesem Artikel wird erläutert, wie Sie die gesamte Reihe gleichzeitig aktualisieren.
Im Allgemeinen ähnelt das Aktualisieren einer Serie sehr dem Ändern eines einzelnen Termins. Sie verwenden die gleichen Methoden und Vorgänge, aber Sie verwenden die Element-ID des wiederkehrenden Masters der Reihe. In einigen Fällen beginnen Sie möglicherweise nicht mit dem wiederkehrenden Master, und Sie müssen möglicherweise die Element-ID für den wiederkehrenden Master suchen.
Es gibt jedoch einen wichtigen Unterschied, den Sie beim Aktualisieren einer Serie berücksichtigen sollten: das Aktualisieren des Serienmusters. Das Aktualisieren des Serienmusters ist nur mit dem wiederkehrenden Master möglich, und Änderungen am Muster können Vorkommen hinzufügen oder entfernen. Wenn Sie z. B. die Recurrence.EndDate-Eigenschaft auf ein Datum ändern, das später als der aktuelle Wert liegt, wird das Serienmuster neu ausgewertet, und es können weitere Vorkommen hinzugefügt werden.
Ändern aller Vorkommen in einer Reihe mithilfe der verwalteten EWS-API
So ändern Sie alle Vorkommen in einer Reihe:
- Binden Sie an den wiederkehrenden Master für die Reihe, indem Sie die Appointment.BindToRecurringMaster - oder Appointment.Bind-Methode für einen wiederkehrenden Master verwenden.
- Aktualisieren Sie die Eigenschaften für das wiederkehrende Master-Appointment-Objekt .
- Speichern Sie die Änderungen am wiederkehrenden Master mit der Appointment.Save-Methode .
Im folgenden Beispiel wird eine Serie aktualisiert, um den Speicherort zu ändern, einen Teilnehmer hinzuzufügen und das Serienmuster zu ändern. In diesem Beispiel wird davon ausgegangen, dass das im Dienstparameter übergebene ExchangeService-Objekt mit gültigen Werten in den Eigenschaften Anmeldeinformationen und URL initialisiert wurde. Der recurringAppointment-Parameter ist ein Appointment-Objekt , das entweder an ein Vorkommen oder den wiederkehrenden Master für die zu aktualisierende Reihe gebunden ist.
using Microsoft.Exchange.WebServices.Data;
public static bool UpdateRecurringSeries(ExchangeService service, Appointment recurringAppointment)
{
Appointment recurringMaster = null;
// If the item is a single appointment, fail.
if (recurringAppointment.AppointmentType == AppointmentType.Single)
{
Console.WriteLine("ERROR: The item to delete is not part of a recurring series.");
return false;
}
// Check the Appointment that was passed. Is it
// an occurrence or the recurring master?
if (recurringAppointment.AppointmentType != AppointmentType.RecurringMaster)
{
// If an occurrence was passed in, bind to the master.
try
{
// This method results in a call to EWS.
recurringMaster = Appointment.BindToRecurringMaster(service, recurringAppointment.Id);
}
catch (Exception ex)
{
Console.WriteLine("Couldn't bind to master: {0}", ex.Message);
return false;
}
}
else
{
// Bind to the appointment to load all properties.
// This method results in a call to EWS.
recurringMaster = Appointment.Bind(service, recurringAppointment.Id);
}
// Basic updates. These kinds of updates are the same
// as if you were updating a single appointment.
// Update the location. All occurrences will update to this new location.
recurringMaster.Location = "Conference Room 2";
// Add an attendee.
Attendee newAttendee = new Attendee("sadie@contoso.com");
recurringMaster.RequiredAttendees.Add(newAttendee);
// Changes to the recurrence. This is only applicable to a recurring
// master.
// If the series has an end date, extend the series to add two more occurrences.
if (recurringMaster.Recurrence.HasEnd)
{
// NumberOfOccurrences is only set if the user created the
// appointment with a set number of occurrences.
// Otherwise, there's a start and end date.
if (recurringMaster.Recurrence.NumberOfOccurrences != null)
{
recurringMaster.Recurrence.NumberOfOccurrences += 2;
}
else
{
// This is a bit more complicated if you want to add two more
// occurrences. You need to calculate a new end date.
Type recurrenceType = recurringMaster.Recurrence.GetType();
switch (recurrenceType.Name)
{
case "DailyPattern":
recurringMaster.Recurrence.EndDate =
recurringMaster.Recurrence.EndDate.Value.AddDays(2);
break;
case "WeeklyPattern":
recurringMaster.Recurrence.EndDate =
recurringMaster.Recurrence.EndDate.Value.AddDays(14);
break;
case "YearlyPattern":
recurringMaster.Recurrence.EndDate =
recurringMaster.Recurrence.EndDate.Value.AddYears(2);
break;
default:
// Do nothing here. There are other recurrence
// types but for simplicity, these aren't covered.
break;
}
}
}
else
{
// If it has no end, set an end date to 2 weeks from today.
recurringMaster.Recurrence.EndDate = DateTime.Now.AddDays(14);
}
// Update the series.
try
{
// This method results in a call to EWS.
recurringMaster.Update(ConflictResolutionMode.AutoResolve);
}
catch (Exception ex)
{
Console.WriteLine("Error updating series: {0}", ex.Message);
return false;
}
return true;
}
Ändern aller Vorkommen in einer Reihe mithilfe von EWS
Um alle Vorkommen in einer Reihe zu ändern, müssen Sie den UpdateItem-Vorgang mit der Element-ID des wiederkehrenden Masters im ItemId-Element in der Anforderung verwenden. Die Struktur der Anforderung ist identisch mit einer Anforderung zum Aktualisieren eines einzelnen Termins.
Im folgenden Beispiel wird die Serie wie folgt aktualisiert:
- Aktualisierungen die Position der Reihe, indem Sie das Location-Element festlegen.
- Aktualisierungen die Teilnehmer, indem Sie das RequiredAttendees-Element festlegen.
- Aktualisierungen die Wiederholung durch Festlegen des Recurrence (RecurrenceType)-Elements.
<?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:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve" SendMeetingInvitationsOrCancellations="SendToAllAndSaveCopy">
<m:ItemChanges>
<t:ItemChange>
<t:ItemId Id="AAMkADA5..." ChangeKey="DwAAABYA..." />
<t:Updates>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Location" />
<t:CalendarItem>
<t:Location>Conference Room 2</t:Location>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:RequiredAttendees" />
<t:CalendarItem>
<t:RequiredAttendees>
<t:Attendee>
<t:Mailbox>
<t:Name>Mack Chaves</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 Daniels</t:Name>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
</t:RequiredAttendees>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Recurrence" />
<t:CalendarItem>
<t:Recurrence>
<t:WeeklyRecurrence>
<t:Interval>1</t:Interval>
<t:DaysOfWeek>Tuesday</t:DaysOfWeek>
</t:WeeklyRecurrence>
<t:EndDateRecurrence>
<t:StartDate>2014-05-06</t:StartDate>
<t:EndDate>2014-06-22-04:00</t:EndDate>
</t:EndDateRecurrence>
</t:Recurrence>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:MeetingTimeZone" />
<t:CalendarItem>
<t:MeetingTimeZone TimeZoneName="Pacific Standard Time" />
</t:CalendarItem>
</t:SetItemField>
</t:Updates>
</t:ItemChange>
</m:ItemChanges>
</m:UpdateItem>
</soap:Body>
</soap:Envelope>
Der Server antwortet mit einem UpdateItemResponse-Element , das ein ResponseCode-Element mit dem Wert NoError enthält, der angibt, dass das Update erfolgreich war.