CAML-Abfragen bei wiederkehrenden Kalendereinträgen

Dieser Beitrag zeigt, wie man wiederkehrende Ereignisse in SharePoint-Kalendern über eine CAML-Abfrage per Code auslesen kann. Der Beitrag ist eine Ergänzung zu einem allgemeinen Beitrag über CAML, den ich hier geschrieben habe.

Wiederkehrende Ereignisse werden in einer Kalenderliste durch ein einziges Element repräsentiert. Man bekommt sie also nicht über eine Anfrage mit einer normalen Where-Klausel. Wenn man über eine Anfrage alle Ereignisse zu einem bestimmten Zeitpunkt oder zu einem bestimmten Zeitraum haben möchte, muß man eine bestimmte Syntax in CAML notieren. Das sieht dann so aus:

<Where>
  <DateRangesOverlap>
    <FieldRef Name=’EventDate’/>
    <FieldRef Name=’EndDate’/>
    <FieldRef Name=’RecurrenceID’/>
    <Value Type=’DateTime‘><Today/></Value>
  </DateRangesOverlap>
</Where>

Damit diese Anfrage funktioniert, muß die ExpandRecurrence-Eigenschaft des SPQuery-Objekts auf true festgelegt werden. Wenn man sonst nichts weiter angibt, bekommt man durch diese Abfrage alle Ereignisse für heute. Falls ein anderes Datum gewünscht ist, muß außerdem die CalendarDate-Eigenschaft des SPQuery-Objekts auf das gewünschte Datum festgelegt werden. Der gesamte Code sieht dann so aus:

SPQuery query = new SPQuery();
query.ExpandRecurrence = true;
query.CalendarDate = new DateTime(2012, 12, 4);
query.Query = @"<Where>
                  <DateRangesOverlap>
                    <FieldRef Name=’EventDate’/>
                    <FieldRef Name=’EndDate’/>
                    <FieldRef Name=’RecurrenceID’/>
                    <Value Type=’DateTime‘><Today/></Value>
                  </DateRangesOverlap>
                </Where>";

Falls man nicht nur die Ereignisse für einen einzelnen Tag möchte, kann man bei <Value> auch <Month/> oder <Year/> verwenden. Alle anderen Angaben bei <Value> funktionieren nicht. Insbesondere das abzufragende Datum muß bei SPQuery.CalendarDate angegeben werden!

Achtung:

Die durch eine solche Abfrage erhaltenen Elemente müssen nochmal geprüft werden, ob sie auch wirklich zum gewünschten Datum oder Zeitraum gehören. Man bekommt meist auch angrenzende Ereignisse geliefert. Bei einer Abfrage für einen Monat bekommt man z.B. auch die Ereignisse des Vormonats und des Folgemonats, die in einer Monatsansicht des Kalenders angezeigt werden würden. Bug oder Feature?

Ein Gedanke zu “CAML-Abfragen bei wiederkehrenden Kalendereinträgen

  1. hello, thank you, it is a great. is there a possibility to compare the user membership with the choose in a dropdownlist. example: The user creates a new calendar appointment and choose in a dropdownlist the domain usergroup for the appointment. thanks, Jim from ItalyAfter that, only the members of the selected group see the appointment.

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s