SharePoint-Listenelemente nach Gruppenzugehörigkeit filtern

In SharePoint ist es bekanntermaßen sehr einfach möglich, sich eigene Abfragen in Form von Listenansichten auf der Weboberfläche “zusammen zu customizen”. In wenigen Sekunden kann man so nur noch die Listenelemente anzeigen lassen, die einer bzw. mehreren bestimmten Bedingungen entsprechen.

Ein oft genutztes Feature stellt die Möglichkeit dar, sich nur seine eigenen Items bzw. Dokumente anzeigen zu lassen, indem z.B. bei einer Aufgabenliste der Filter “Assigned to” = “[Me]” (also diejenigen Aufgaben, die mir zugewiesen sind) angewendet wird.
image

Genau an dieser Stelle ergeben sich interessante Möglichkeiten, denn häufig ist der einzelne Benutzer als Filterkriterium aus Gründen der Wartbarkeit und Wiederverwendbarkeit nicht wirklich praktikabel und schon ist der Wunsch nach einem Filter auf Gruppenebene geboren. So sollen bspw. Benutzer einer bestimmten Gruppe (z.B. einer Abteilung) innerhalb einer Aufgabenliste nur diejenigen Aufgaben angezeigt bekommen, die der entsprechenden Gruppe zugewiesen sind. Leider gibt es dafür out of the Box keine Filterfunktion im Rahmen der Customizingmöglichkeiten der Weboberfläche.

Dieser Blogeintrag beschreibt einen relativ einfachen Weg, diese Filtermöglichkeit nach Gruppenzugehörigkeit bereitzustellen. Dabei muss die Listenansicht, genauer das CAML (Collaborative Application Markup Language) Statement des darin befindlichen ListViewWebParts angepasst werden, z.B. mit Hilfe des SharePoint Designers.

  • Als erstes muss der SharePoint Designer mit der entsprechenden Website verbunden werden und dort die passende Liste geöffnet werden.
  • Ggf. ist nun eine neue Listenansicht anzulegen (alternativ kann auch eine bestehende angepasst werden). Im Bsp. sei dies die “OurGroupTasks” – also eine Ansicht mit allen Aufgaben für die Gruppe, welcher der aktuell angemeldete Benutzer zugehörig ist.
    image   image
  • Diese neu angelegte Listenansicht muss nun geöffnet und im asp-Code nach der Stelle gesucht werden, wo die Abfrage definiert wird. Dazu STRG+F –> Suchen nach “Query”. Das Ergebnis sollte der Cursor direkt im Code markiert darstellen.
    image
  • Wenn zuvor eine neue Listenansicht erzeugt wurde, sollte der Query-Tag leer sein, wie im Beispiel. Dieser Query-Tag muss nun - entsprechend der Logik “WENN zugewiesen an aktuelle Benutzergruppe” - angepasst werden. Achtung: in dem Fall werden wirklich nur die Aufgaben angezeigt, die der Gruppe zugewiesen sind:
    <Query> 
        <Where> 
            <Membership Type="CurrentUserGroups">
                <FieldRef Name="AssignedTo"/>
            </Membership>
        </Where> 
    </Query> 
  • Optional: Sollen auch zusätzlich zu den gemeinsamen Gruppenaufgaben noch die Aufgaben angezeigt werden, die dem Benutzer direkt zugewiesen sind, so ist die CAML Abfrage um eine Bedingung zu erweitern, so dass die Logik “WENN zugewiesen an aktuelle Benutzergruppe ODER Zugewiesen an = Meine UserID” zutrifft:
    <Query> 
        <Where> 
            <Or>
                <Membership Type="CurrentUserGroups">
                    <FieldRef Name="AssignedTo"/>
                </Membership>
                <Eq>
                    <FieldRef Name="AssignedTo"/>
                    <Value Type="Integer">
                        <UserID/>
                    </Value>
                </Eq>
            </Or>
        </Where> 
    </Query> 
     
  • Wenn jedoch nicht nach der CurrentUserGroup sondern einer ganz bestimmten Gruppe gefiltert werden soll, muss die ID der gewünschten Gruppe bekannt sein. Diese GroupID lässt sich unter den Site Settings –> People & Groups –> Gewünschte Gruppe in der Url ablesen:
    image
  • Soll nun der Filter für eine bestimmte Gruppe gesetzt werden, ist die folgende CAML Query zu verwenden (im Bsp. wurde dazu eine Ansicht “SpecificGroupTasks” angelegt, welche nach Aufgaben der SP Gruppe mit der ID 8 filtert):
    <Query> 
        <Where> 
            <Membership Type="SPGroup" ID="8">
                <FieldRef Name="AssignedTo"/>
            </Membership>
        </Where> 
    </Query> 
    Hierbei ist zu beachten, dass über diesen Weg alle direkt an Benutzer (die sich in dieser Gruppe befinden) zugewiesene Aufgaben zurück kommen, nicht aber die Aufgaben, die der Gruppe selbst zugewiesen sind).
    Um Aufgaben, die einer bestimmten Gruppe zugewiesen sind anzeigen zu lassen, muss folgende Bedingung verwendet werden (wichtig ist dabei, dass das Property LookupId auf true gesetzt wird, sonst kann nicht auf die ID der Gruppe verwiesen werden!):
    <Query> 
        <Where>
            <Eq>
                <FieldRef Name="AssignedTo" LookupId="true" />
                <Value Type="Integer">8</Value>
            </Eq>
        </Where>
    </Query> 
    Natürlich können diese beiden Bedingungen entsrechend verknüpft werden. Dann käme folgendes Statement zustande gemäß der Logik “WENN zugewiesen an Mitglied in Gruppe mit ID 8 ODER zugewiesen an = 8”:
    <Query> 
        <Where>
            <Or>
                <Membership Type="SPGroup" ID="8">
                    <FieldRef Name="AssignedTo"/>
                </Membership>
                <Eq>
                    <FieldRef Name="AssignedTo" LookupId="true" />
                    <Value Type="Integer">8</Value>
                </Eq>
            </Or>
        </Where>
    </Query> 
  • Nun muss die Page nur noch gespeichert und im Browser erneut geladen werden, damit die Änderungen sichtbar sind. Im Beispiel als Vergleich – Ansicht “Alle Aufgaben” (Bild A) vs. Ansicht “OurGroupTasks” (Bild B) vs. “OurGroupTasks” mit Anzeige der eigenen Aufgaben des Benutzers (Bild C):
    image    image    image
    Im Vergleich dazu die Listenansichten der zweiten Variante – das Anzeigen von Aufgaben von Benutzern einer bestimmten Gruppe (Bild D), von Aufgaben der Gruppe selbst (Bild E) sowie eine Verknüpfung beider Ergebnismengen (Bild F):
    image   image   image

Dieses Beispiel funktioniert natürlich auch mit SharePoint 2007 und 2010.

Kommentare sind geschlossen