Wir bekamen die Projektanforderung, dass innerhalb einer SharePoint Liste in genau einem Feld nach Werten gesucht werden soll. Natürlich dachten wir hier zuerst an den Search Server bzw. an die Suche innerhalb von MOSS.
Leider fanden wir keinen Weg, dass innerhalb einer SharePoint Liste nach nur genau einem Feld und dessen Werten gesucht werden kann. Falls es diesen Weg doch gibt, dann sind wir sehr neugierig auf die Lösung.
Erst ein Artikel, welcher unter http://philwicklund.com/archive/2009/04/11/using-the-data-view-web-part-to-search-a-sharepoint-list.aspx zu finden ist, konnte uns weiterhelfen.
Die Anforderungen waren:
- Suche nach Werten eines Feldes (Nachname) innerhalb einer Liste (hier Kontaktliste)
- Wildcard Suche ermöglichen
- Groß- und Kleinschreibung darf keine Rolle spielen
- und funktionieren muss es auf WSS und MOSS
WSS liefert von Hause aus keinerlei Such Web Parts und daher mussten wir auf die vorhandenen Standardmittel zurück greifen. Die erforderlichen Schritte waren nun im Einzelnen:
1. Erstellen einer neuen Web Part Seite, hier die Data View aufbauen und an die richtige Stelle in der Web Part Seite verschieben. Dieses gilt als Grundbasis für die gewünschte Liste und entspricht quasi dem formatierten Suchergebnis.
2. Ein “Form Web Part” auf der Seite einfügen, die Bezeichnung des Buttons über die Eigenschaften ändern und z.B. auch eine feste Breite mit 250px wählen.
3. Eine Verbindung zwischen dem Form Web Part und der Data View herstellen, in dem im Form Web Part eine “Web Part Connection …” erstellt wird. Im ersten Schritt soll das Form Web Part seine Werte weitergeben (“Provide form values to”) und als Ziel geben wir natürlich das Data View Web Part an und es soll Werte entgegen nehmen (“Get Filter Values From”). Zum Schluss müssen wir dem Data View Web Part noch mitteilen, für welches Feld wir entsprechende Werte übergeben. Dabei müssen wir aus dem Form Web Part das Feld “T1” in unserem Beispiel dem Feld “Nachname” zuordnen. Den Assistenten nun beenden und die Verknüpfung ist gesetzt.
Damit war die erste Aufgabe erfüllt. Hier sollte allerdings die Möglichkeit nun eingebaut werden, die Sucheingabe wieder zu löschen, dass auch alle Einträge der Liste angezeigt werden können. Wenn jetzt erneut gesucht wird mit einem anderen Begriff, dann wird das vorherige Suchergebnis als Basis für die erneute Suche genommen und nicht die komplette Liste. Daher kann ein einfacher Link eingesetzt werden, mit welchem wir das Suchergebnis zurücksetzen. Als Link geben wir die Seite an, auf welcher sich die Suche befindet.
Wildcard Suche und keine Unterscheidung von Groß- und Kleinschreibung ist ohne Eingriff in den Quellcode nicht möglich und daher auch nicht einfach.
4. Dazu muss ein Parameter in der Data View erstellt werden mittels SharePoint Designer. Dafür auf die Eigenschaften klicken und “Parameters” auswählen. Einen neuen Parameter mit sprechendem Namen anlegen (z.B. “Suchbegriff").
5. Anpassung der Web Part Connections, hier nun für das Data View Web Part als Target Action “Get Parameters From” auswählen und danach “T1” aus dem Form Web Part dem Parameter “Suchbegriff” zuordnen.
6. Jetzt muss der Quellcode verändert werden. Dazu muss im Quellcode das Data View Web Parts nach name=”Rows” gesucht werden. Beim Suchtreffer sollte der folgende weitere Quellcode zu finden sein: select=”/dsQueryResponse/Rows/Row”. Dieser wird wie folgt verändert: select=”/dsQueryResponse/Rows/Row[contains(@Nachname, $Suchbegriff)]”. Das Feld @Nachname ist das Feld in der Liste, nachdem gesucht werden soll, $Suchbegriff ist der Parameter aus dem Data View. Nun sollte die Wildcard Suche funktionieren.
Nun fehlt nur noch die Anforderung, dass kein Unterschied zwischen Groß- und Kleinschreibung gemacht werden soll. Auch hier ist Quellcode Anpassungen notwendig.
7. Direkt vor der Zeile, welche in Punkt 6 verändert wurde, werden die folgenden Zeilen eingefügt:
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyzöäüß'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZÖÄÜß'" />
<xsl:variable name="searchcaps" select="translate($Suchbegriff, $smallcase, $uppercase)" />
Diese drei Zeilen sorgen dafür, dass alle eingegebenen Zeichen innerhalb des Suchfeldes in Großbuchstaben umgewandelt werden. Doch damit das Suchfeld “Nachname” ebenfalls in Großbuchstaben umgewandelt wird, muss die Zeile aus Punkt 6 wie folgt verändert werden:
select=”/dsQueryResponse/Rows/Row[contains(translate(@Nachname, $smallcase, $uppercase), $searchcaps)]”
Nun sollte die Groß- und Kleinschreibung keinen Unterschied mehr ausmachen.
Zusammenfassung: Wir können uns dem Verfasser der Vorlage für diesen Blogbeitrag nur anschließen, das Data View Web Part in Verbindung mit dem Form Web Part lässt es zu, schöne kleine Suchanwendungen zu entwickeln, bei welchen die SharePoint Suche leider nicht helfen kann. Wenn Sie interessante Anwendungsfälle haben oder schon damit umgesetzt haben, würden wir über ein kleines Feedback unter sharepoint (at) s-pi.de freuen.