Freigeben über


Serienmuster und EWS

Erfahren Sie mehr über Serienmuster und serienserien in Exchange.

Eine Serie ist ein Termin oder eine Besprechung, die nach einem definierten Muster wiederholt wird. Eine Serie kann entweder eine bestimmte Anzahl von Vorkommen aufweisen oder sich auf unbestimmte Zeit wiederholen. Darüber hinaus kann eine Serienserie Ausnahmen aufweisen, die nicht dem Muster der restlichen Vorkommen folgen, und vorkommen, die aus dem Muster gelöscht wurden. Sie können die verwaltete EWS-API und EWS verwenden, um mit serienserien und den zugehörigen Kalenderelementen zu arbeiten.

Wiederkehrende Kalenderelemente

Alle Kalenderelemente fallen in eine der folgenden vier Kategorien:

  • Nicht wiederkehrende Kalenderelemente

  • Wiederkehrende Master

  • Vorkommen in einer Reihe

  • Geänderte Vorkommen in einer Reihe, die als Ausnahmen bezeichnet werden

In diesem Artikel werden die drei Arten von Kalenderelementen behandelt, die Teil einer Serie sind.

Es ist hilfreich zu verstehen, wie serienserien auf dem Exchange-Server implementiert werden. Anstatt für jedes Vorkommen in einer Serie ein separates separates Element zu erstellen, erstellt der Server nur ein tatsächliches Element im Kalender, das als wiederkehrende Master bezeichnet wird. Das Format einer Masterserie ähnelt stark einem nicht wiederkehrenden Termin, mit dem Hinzufügen von Wiederholungsmusterinformationen. Der Server generiert dann Vorkommen basierend auf dem Serienmuster als Reaktion auf Clientanforderungen für Termininformationen mithilfe eines Prozesses namens Erweiterung. Diese generierten Vorkommen werden nicht dauerhaft auf dem Server gespeichert. Dies ist wichtig zu verstehen, da die Art und Weise, wie Sie nach Kalenderelementen suchen, bestimmt, welche Informationen Sie erhalten und ob eine Erweiterung erfolgt.

Serienmuster

Das Schlüsselstück zu einer Serie, die eine Erweiterung ermöglicht, ist das Serienmuster. Das Serienmuster befindet sich auf dem wiederkehrenden Master und beschreibt eine Reihe von Kriterien für die Berechnung von Vorkommen basierend auf dem Datum und der Uhrzeit des wiederkehrenden Masters.

Tabelle 1. Verfügbare Serienmuster

Verwaltete EWS-API-Klasse EWS-Element Beispiele
Recurrence.DailyPattern
DailyRecurrence
Wiederholen Sie dies täglich.
Wiederholen Sie dies jeden zweiten Tag.
Recurrence.MonthlyPattern
AbsoluteMonthlyRecurrence
Wiederholen Sie jeden Monat am zehnten Tag des Monats.
Wiederholen Sie dies jeden zweiten Monat am einundzwanzigten Tag des Monats.
Recurrence.RelativeMonthlyPattern
RelativeMonthlyRecurrence
Wiederholen Sie dies am zweiten Dienstag jedes Monats.
Wiederholen Sie dies alle drei Monate am dritten Donnerstag des Monats.
Recurrence.RelativeYearlyPattern
RelativeYearlyRecurrence
Wiederholen Sie dies jedes Jahr am ersten Montag im August.
Recurrence.WeeklyPattern
WeeklyRecurrence
Wiederholen Sie dies jeden Montag.
Wiederholen Sie dies jeden Dienstag und Donnerstag alle zwei Wochen.
Recurrence.YearlyPattern
AbsoluteYearlyRecurrence
Wiederholen Sie dies jedes Jahr am 1. September.

Die andere wichtige Information für ein Serienmuster ist das Ende der Wiederholung. Dies kann entweder als eine festgelegte Anzahl von Vorkommen, als Enddatum oder als ohne Ende ausgedrückt werden.

Tabelle 2. Optionen für das Ende einer Serie

Verwaltete EWS-API-Methode/-Eigenschaft EWS-Element Beschreibung
Recurrence.NumberOfOccurrences
NumberedRecurrence
Der Wert dieser Eigenschaft oder dieses Elements gibt die Anzahl der Vorkommen an.
Recurrence.EndDate
EndDateRecurrence
Das letzte Vorkommen in der Reihe liegt auf oder vor dem datum, das von dieser Eigenschaft oder diesem Element angegeben wird.
Recurrence.HasEnd
Recurrence.NeverEnds
NoEndRecurrence
Die Reihe hat kein Ende.

Erweiterte ansichten im Vergleich zu nicht erweiterten Ansichten

Wenn Sie die FindAppointments-Methode in der verwalteten EWS-API (oder den FindItem-Vorgang mit einem CalendarView-Element in EWS) verwenden, wird der Erweiterungsprozess aufgerufen. Dadurch werden wiederkehrende Mastertermine aus dem Resultset ausgeblendet, und stattdessen wird eine erweiterte Ansicht dieser Serie angezeigt. Vorkommen von und Ausnahmen vom wiederkehrenden Master, die in die Parameter der Kalenderansicht fallen, sind im Resultset enthalten. Umgekehrt ruft die Verwendung der FindItems-Methode in der verwalteten EWS-API (oder der FindItem-Vorgang mit einem IndexedPageItemView - oder FractionalPageItemView-Element in EWS) den Erweiterungsprozess nicht auf, und Vorkommen und Ausnahmen sind nicht enthalten. Sehen wir uns ein Beispiel an, in dem die beiden Methoden verglichen werden.

Tabelle 3. Methoden und Vorgänge zum Suchen von Terminen

EWS Managed API-Methode EWS-Vorgang Erweitert Serie? In Ergebnissen enthaltene Elemente
ExchangeService.FindAppointments
FindItem-Vorgang mit einem CalendarView-Element
Ja
Nicht wiederkehrende Termine, einzelne Vorkommen von Serienserien und Ausnahmen bei serienserien
ExchangeService.FindItems
FindItem-Vorgang mit einem IndexedPageItemView-Element oder FractionalPageItemView-Element
Nein
Nicht wiederkehrende Termine und wiederkehrende Mastertermine

Sadie hat gerade ihren Sohn für das Schwimmteam angemeldet. Das Team trainiert jeden Mittwochmorgen um 8:30 Uhr, beginnend am 2. Juli, mit dem letzten Training am 6. August. Sadie möchte die Übung nicht vergessen und fügt ihrem Kalender einen wiederkehrenden Termin hinzu, um sie daran zu erinnern.

Tabelle 4. Sadies Terminserie

Terminfeld Wert
Betreff
Schwimm-Team-Übung
Start
Juli 2, 2014 8:30 AM
Ende
Juli 2, 2014 10:00 AM
Wiederholt
Jeden Mittwoch
Letztes Vorkommen
6. August 2014, 8:30 Uhr

Ein kurzer Blick auf einen Kalender zeigt, dass das Team insgesamt sechs Methoden hat. Es gibt jedoch nicht sechs unterschiedliche Terminelemente im Kalender. Stattdessen gibt es nur einen wiederkehrenden Haupttermin, der die Reihe darstellt.

Sehen wir uns nun die Suche nach Terminen in Sadies Kalender an, die innerhalb des Monats Juli stattfinden. Im folgenden Codebeispiel wird die FindItems-Methode in der verwalteten Exchange-API verwendet, um eine nicht erweiterte Ansicht des Kalenders von Sadie zu erstellen.

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);
}

Dieser Code führt zur folgenden FindItem-Vorgangsanforderung mit einem IndexedPageItemView-Element .

<?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>

Die Antwort des Servers enthält nur ein einzelnes Element, den wiederkehrenden Master, der durch den CalendarItemType-Elementwertvon RecurringMaster angegeben wird. Der Wert des ItemId -Elements wurde zur besseren Lesbarkeit gekürzt.

<?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>

Vergleichen wir nun mit einer erweiterten Ansicht. Im folgenden Codebeispiel wird die FindAppointments-Methode in der verwalteten EWS-API verwendet, um eine erweiterte Ansicht des Kalenders von Sadie zu erstellen.

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);
}

Dieser Code führt zu der folgenden FindItem-Vorgangsanforderung mit einem CalendarView-Element .

<?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>

Dieses Mal enthält die Serverantwort fünf Vorkommen, eines für jeden Mittwoch im Juli. Die CalendarItemType-Elemente für diese Elemente haben alle den Wert Occurrence. Beachten Sie, dass der wiederkehrende Master nicht in der Antwort vorhanden ist. Die Werte der ItemId-Elemente wurden zur Lesbarkeit gekürzt.

<?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>

Nachdem Sie über einen wiederkehrenden Master, ein Vorkommen oder eine Ausnahme verfügen, können Sie immer die anderen verwandten Elemente abrufen. Bei einem Vorkommen oder einer Ausnahme können Sie den wiederkehrenden Master abrufen und umgekehrt.

Arbeiten mit wiederkehrenden Kalenderelementen

Sie verwenden dieselben Methoden und Vorgänge, um mit wiederkehrenden Datenreihen zu arbeiten, wie sie für die Arbeit mit nicht wiederkehrenden Kalenderelementen verwendet werden. Der Unterschied besteht darin, dass abhängig vom Element, das Sie zum Aufrufen dieser Methoden oder Vorgänge verwenden, die Aktionen, die Sie ausführen, auf die gesamte Reihe oder nur auf ein einzelnes Vorkommen angewendet werden können. Aktionen, die für den wiederkehrenden Master ausgeführt werden, gelten für alle Vorkommen in der Reihe, während Aktionen, die für ein einzelnes Vorkommen oder eine ausnahme ausgeführt werden, nur für dieses Vorkommen oder diese Ausnahme gelten.

Inhalt dieses Abschnitts

Siehe auch