Suche zur Auflistung aller Site Collections verwenden

Oft werde ich gefragt, wie man die Navigation in SharePoint einfacher gestalten kann, oder ob es nicht möglich sei, eine ganze Liste aller verfügbaren Websites anzuzeigen, auf die ein Benutzer Zugriff hat.

Personen mit Entwickler-Kenntnissen würden nun u.U. direkt zu Visual Studio greifen und ein WebPart schreiben, schließlich gibt es doch im Objektmodell alles: Ich kann auf alle Webs zugreifen und dort über die Methode DoesUserHavePermission() die Berechtigung prüfen. Damit befülle ich dann einfach eine DropDown-List.

In diesem Beitrag möchte ich jedoch zeigen, dass es auch mit Standardmitteln in Verbindung mit der Suche ganz einfach ist. Und zudem funktioniert es, denn die obige Methode hat einen großen Nachteil: Sie funktioniert nur in sehr kleinen Umgebungen zuverlässig. Sobald Sie eine große Anzahl Site Collections habe (>30-40) werden Sie sehr schnell einen Performanceeinbruch bemerken, die Auflistung dauert dann gefühlte Ewigkeiten und belastet das System enorm.

Für die Lösung benötigen wir Folgendes:

  • Ein Query zum Finden aller Site Collections
  • Das WebPart “Kernergebnisse der Suche”
  • Ein eigenes XSL-Template

Das Query

Um alle Site Collections zu finden, auf die ein Benutzer Zugriff hat, müssen wir nur auf die Site Collection Typen einschränken, die Berechtigungsprüfung ist bereits eingebaut. Hierzu verwenden wir das Managed Property “contentclass”. In diesem Artikel sind mögliche Werte beschrieben, unser Query lautet damit:

Contentclass:STS_Site

Das WebPart

Das CoreResults-WebPart wird auf einer beliebigen Page plaziert, eben dort, wo Sie das DropDown haben möchten:

In den WebPart-Properties muss dann ein Fixed Query angegeben werden (Abfrageoptionen für Ergebnisse à Feste Stichwortabfrage), hier wird unser Query von oben eingetragen. Zudem muss die Location Visualization deaktiviert werden (Eigenschaften anzeigen à Speicherortvisualisierung verwenden)

Das XSL-Template

Und nun kommt der schwierige Teil. Wir benötigen ein XSL-Template, das eine DropDown-List befüllt und zudem ein kleines JavaScript zur Weiterleitung an die URL hinterlegt. Hier steckt der größte Aufwand, ich poste den Code dafür direkt hier:

Dieser Code muss in den WebPart-Properties im XSL-Editor eingetragen werden. Den Quelltext habe ich hier zum Download zur Verfügung gestellt.

Das Ergebnis

Alles zusammen sieht dann wie gewünscht aus:

Dies kann natürlich auch Teil einer MasterPage sein, wobei man hier eventuell noch ein Caching einbauen sollte, um die Suche nicht zu überlasten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte die Buchstaben des captcha Bildes im Eingabefeld eintippen

Please type the characters of this captcha image in the input box