Eine Ja/Nein-Spalte ausblenden

Normalerweise kann man einzelne Spalten sehr einfach über die Einstellungen beim Inhaltstyp ausblenden. Diese Möglichkeit hat uns Microsoft (warum auch immer) bei Ja/Nein-Spalten leider genommen. In diesem Beitrag wird gezeigt, wie man das mit Hilfe von SharePoint Designer erreichen kann.

Wenn man bei einem Inhaltstyp auf einen Spaltennamen klickt, gelangt man zu einer Seite, auf der man u.a. angeben kann, ob diese Spalte erforderlich, optional oder ausgeblendet sein soll. Z.B. bei einer Standard-Titelspalte sieht das so aus:

Diese Einstellungen sind bei einer Ja/Nein-Spalte ausgegraut, so daß diese praktische Möglichkeit ein Feld zu verstecken hier nicht zur Verfügung steht. Weil ich gerade mal wieder darüber gestolpert bin, habe ich kurz Google bemüht. Eigentlich wollte ich herausfinden, warum das so ist. Das ist mir zwar auf die Schnelle nicht gelungen, aber dafür habe ich hier eine praktische Lösung gefunden. Ich halte das für eines der kuriosesten und am besten versteckten Features von SharePoint Designer.

Um das Gewünschte zu erreichen, hatte ich bisher entweder SharePoint Manager bemüht, mit dem man die Hidden-Eigenschaft einer solchen Spalte problemlos umsetzen kann oder die Spalte wurde ohnehin per Feature erzeugt und auch dort kann man sie problemlos ausblenden.

Lösung mit SharePoint Designer

Man öffnet die Website in SharePoint Designer und geht dann entweder über die Websiteinhaltstypen oder über die Liste und deren Inhaltstyp(en). In den Einstellungen zum Inhaltstyp, der eine auszublendende Spalte enthält, klickt man entweder links oben auf Spalten bearbeiten oder auf den Link in der Mitte Inhaltstypspalten bearbeiten. Man gelangt zu einer Liste mit allen Spalten des Inhaltstyps:

Wie kann man die Einstellung in der dritten Spalte jetzt ändern? Ganz einfach, wenn man es weiß: man klickt genau dreimal auf den Wert in der dritten Spalte und siehe da, sie verwandelt sich in ein DropDown und man kann den Wert ändern.

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?