Verwenden von Abfrageregeln, Ergebnistypen und Anzeigevorlagen für eine benutzerdefinierte Suche nach Vertriebsberichten in SharePoint 2013
Veröffentlichung des Originalartikels: 24.07.2012
(Standarderklärung: Die Formatierung von Blogs kann nerven. Tun Sie Ihren Augen einen Gefallen – laden Sie die Anlage herunter, um diesen Artikel als Word-Dokument zu lesen.)
Okay, dies ist ein langer Titel für dieses Thema, aber wir behandeln auch eine große Stoffmenge. SharePoint 2013 bietet eine Reihe hervorragender Features, mit denen Sie Suchergebnisse besser als jemals zuvor nutzen und anpassen können. Ich will nicht versuchen, eine vollständige Übersicht über alle Features oder auch nur über wesentliche Details der Komponenten zu bieten, die wir in diesem Blogbeitrag verwenden, da sie an anderer Stelle mit großer Sachkenntnis erläutert werden. Ich biete Ihnen jedoch einen Einstieg in Suchergebnisse sowie eine knappe Übersicht über die einzelnen Features und zeige dann, wie sich mit ihnen ein beeindruckendes, angepasstes Suchergebnis erstellen lässt, das veranschaulicht, wie die einzelnen Teile ineinandergreifen.
Betrachten wir zunächst, wie die Suchergebnisse aussehen, wenn ich in meiner Farm eine Abfrage nach „sales reports“ ausführe (HINWEIS: Dies ist ein Beta-2-Build, und in der endgültigen Version sehen die Ergebnisse eventuell anders aus):
Dies ist die standardmäßige Darstellung von Suchergebnissen, und sie ist vollkommen in Ordnung. Wir haben diese Features jedoch hinzugefügt, um für Sie als Endbenutzer die Suche in SharePoint 2013 komfortabler zu machen, daher wollen wir dieses Szenario ein wenig ergänzen. In unserer Firma gibt es mehrere Abteilungen, und einige davon sind für den Vertrieb in ihrer Verteilung verantwortlich. Jede Abteilung verwendet für Berichte über ihre Vertriebsaktivitäten im zeitlichen Verlauf eine Excel-Standardvorlage. In jeder Abteilung ist eine Person für die Kundenbetreuung und das Berichten der Vertriebsinformationen verantwortlich. Wie können wir mit diesen Features in SharePoint wichtige Informationen über die Abteilung und ihre Kunden standardisieren und darstellen? Wir versuchen, dies mit einem mehrgleisigen Ansatz zu erreichen.
Benutzerdefinierter Inhaltstyp
Zunächst erstellen wir für jede Person, die Vertriebsberichte in SharePoint hochlädt, einen benutzerdefinierten Inhaltstyp. Zu diesem Zweck erstelle ich die Websitespalten, die ich verwenden möchte. Dies sind die Felder, die ich im Vertriebssuchbericht anzeigen können möchte. Für unser Szenario habe ich die folgenden Websitespalten definiert, die wir verwenden werden:
Websitespaltenname |
Typ |
Account Manager |
Eine Textzeile |
Direct Reports |
Zahl |
Sales Region |
Auswahl: Nordamerika, EMEA, Asien |
Top Accounts |
Eine Textzeile |
Total Accounts |
Zahl |
Anschließend habe ich einen Inhaltstyp erstellt, der sämtliche dieser Websitespalten enthält. Ich habe den Inhaltstyp auf der Veröffentlichungshubwebsite für meinen verwalteten Metadatendienst erstellt, damit er auf alle meine Abonnentenwebsites in der Farm, in meinem Fall alle Websites in allen Webanwendungen, übertragen wird.
Der nächste Schritt (in meinem Fall manuell) war das Hinzufügen dieses Inhaltstyps zur Liste der für die Websitesammlung jeder Abteilung verfügbaren Inhaltstypen, und zwar in der Dokumentbibliothek, in der u. a. Vertriebsberichte gespeichert werden. Es gibt selbstverständlich mehrere Möglichkeiten, dies zu automatisieren, der Kürze halber habe ich diesen Schritt jedoch manuell ausgeführt. Den ersten Schritt haben wir jetzt also ausgeführt: Wir verfügen über einen benutzerdefinierten Inhaltstyp, dieser wurde bereitgestellt, und wenn den Dokumentbibliotheken Vertriebsberichte hinzugefügt werden, können die Kundenbetreuer einen Vertriebsbericht einfach identifizieren, wenn sie ihn hochladen und die Metadaten eingeben.
Verwaltete Eigenschaften
Da jetzt unsere Websites mit den Vertriebsberichten aufgefüllt werden, müssen wir aus den benutzerdefinierten Websitespalten für Vertriebsberichte verwaltete Eigenschaften erstellen. In diesem Szenario gibt es keine Unterschiede zwischen SharePoint 2013 und SharePoint 2010: Sie müssen eine vollständige Durchforstung ausführen, um die durchforsteten Eigenschaften zu erstellen, anschließend verwaltete Eigenschaften erstellen, die den durchforsteten Eigenschaften zugeordnet sind, und dann eine weitere vollständige Durchforstung ausführen. In diesem Szenario gibt es keinen Unterschied zu SharePoint 2010, weil wir eine Lösung für die gesamte Farm implementieren. SharePoint 2013 bietet jedoch ein großartiges Feature, mit dem Websitesammlungsadministratoren eine Websitesammlung oder Website oder sogar eine Liste für eine vollständige Durchforstung markieren können. So müssen Sie nicht eine vollständige unternehmensweite Durchforstung ausführen, wenn Sie einen kleineren Bereich durchforsten möchten, und dies kann äußerst hilfreich sein. Ich werde versuchen, dieses Feature in einem anderen Beitrag zu behandeln – Ich wollte nur darauf hinweisen, dass es dieses Feature gibt. In unserem Fall ist es jedoch ohne Belang, da unsere Lösung die gesamte Farm betrifft.
Abfrageregeln
Jetzt haben wir Vertriebsberichte, in denen ein benutzerdefinierter Inhaltstyp verwendet wird, und wir haben verwaltete Eigenschaften, die mit den Metadatenwerten für die Vertriebsberichte aufgefüllt werden. Jetzt sollten wir sicherstellen, dass diese Elemente wahrgenommen werden, wenn jemand eine Suche ausführt, deren Ergebnis wahrscheinlich einen der Vertriebsberichte enthält. SharePoint 2013 biete ein Feature mit dem Namen „Abfrageregeln“, das diesen Zweck perfekt erfüllt. Abfrageregeln bestehen aus drei Hauptkomponenten:
- Bedingungen: Die Bedingungen für eine Abfrageregel bestimmen, wann eine Regel angewendet wird. Es gibt unterschiedliche Varianten, wie Sie Regeln verwenden können. Dies ist nur eine knappe Übersicht über sie, es gibt jedoch unzählige Möglichkeiten für ihre Verwendung, und Sie werden feststellen, dass eine Reihe von ihnen vordefiniert mitgeliefert wird. Ein weiterer interessanter Aspekt: Wenn eine Abfrageregel bei jedem Suchergebnis ausgelöst werden soll, legen Sie einfach keine Bedingung fest. Sie können natürlich auch umgekehrt vorgehen und mehrere Bedingungen festlegen. Sie erkennen wahrscheinlich schnell, dass die Gefahr besteht, den Überblick über die zahlreichen Möglichkeiten zu verlieren. Für eine Abfrageregel können u. a. folgende Bedingungen verwendet werden:
- Eine Abfrage, die mit einem bestimmten Wort oder Ausdruck beginnt oder endet
- Eine Abfrage, die ein Tätigkeitswort enthält (die von Ihnen definierten Wörter sind i. d. R. Verben, z. B. „herunterladen“ usw.)
- Eine Abfrage enthält ein Wort, das in einem Ausdruckssatz mit verwalteten Metadaten enthalten ist (dies ermöglicht einige äußerst elegante Lösungen)
- Eine Abfrage, die in einer anderen Ergebnisquelle, z. B. Videoergebnisse, Dokumentergebnisse usw., häufig vorhanden ist – es kann sich um eine beliebige Ergebnisquelle handeln, da Sie Ergebnisquellen selbst definieren und erstellen
- Die Ergebnisse enthalten einen Ergebnistyp, auf den häufig geklickt wird, z. B. Diskussionen, Excel-Tabellen usw.
- Erweiterte Regeln, in denen Sie nach Herzenslust reguläre Ausdrücke verwenden können, die Abfrage in Tätigkeitswörter und Gegenstandswörter (was übrig bleibt, nachdem die Tätigkeitswörter entfernt wurden) aufteilen können usw.
- Aktionen: Dies sind die Aktionen, die ausgeführt werden, wenn die Bedingungen für die Abfrageregel erfüllt wurden. Auch hier stehen drei Optionen zur Auswahl:
- „Heraufgestuftes Ergebnis hinzufügen“ (Add Promoted Result): Diese Option ähnelt der Funktionsweise von „Beste Suchergebnisse“ (Best Bets) in SharePoint 2010 und „Visuelles bestes Suchergebnis“ (Visual Best Bets) in FAST Search für SharePoint 2010. Sie können einen neuen Link hinzufügen, der am Anfang aller Suchergebnisse angezeigt wird. Sie können auswählen, ob der Link als Hyperlink oder als Bild gerendert wird (letzteres ähnelt dem visuellen besten Suchergebnis).
- „Ergebnisblock hinzufügen“ (Add Result Block): In einem Ergebnisblock können Sie eine zusätzliche Abfrage ausführen und die Ergebnisse zusammen mit den ursprünglichen Suchergebnissen zurückgeben und anzeigen. Die Bezeichnung „Block“ wird verwendet, weil alle Ergebnisse gemeinsam in einem Block angezeigt werden. Der Block kann am Anfang aller Suchergebnisse oder entsprechend dem Rang zwischen den anderen Suchergebnissen angezeigt werden. Dies bedeutet jedoch nicht, dass eine Rangfolge nach Relevanz der beiden Abfragen festgelegt wird. Es bedeutet lediglich, dass der Block als Ganzes einen Rang unter allen anderen lokalen Suchergebnissen aufweist. Wenn Sie auf ein Element im Ergebnisblock klicken, wird diese Aktion lokal aufgezeichnet, und die Relevanz des gesamten Blocks wird erhöht. Wenn häufig auf Elemente im Block geklickt wird, wird der Block im Lauf der Zeit aufwärts verschoben, da er eine höhere Relevanz als einzelne Ergebnisse hat, auf die weniger häufig geklickt wird. Es gibt unzählige Aktionen, die Sie zum Konfigurieren des Ergebnisblocks ausführen können, aber wie bereits erwähnt, will ich dieses Thema an dieser Stelle nicht vertiefen.
- „Bewertete Ergebnisse durch Ändern der Abfrage ändern“ (Changed ranked results by changing the query): Diese Option dient genau dem Zweck, den ihr langer Name beschreibt. Sie können die angeforderte Abfrage auf beliebige Weise ändern. Sie können zusätzliche Kriterien hinzufügen, Sie können Ausdrücke entfernen, Sie können mit XRANK die Rangfolge ändern – hier stehen Ihnen vielfältige Optionen zur Verfügung.
- Veröffentlichen: Durch das Veröffentlichen können Sie steuern, ob und wann eine Abfrageregel verwendet wird. Beispielsweise können Sie einen Satz von Regeln erstellen, die zu Beginn der Weihnachtssaison angewendet werden sollen. Sie sollen jedoch nicht vorher angewendet werden. In diesem Fall können Sie die Regeln erstellen, das Veröffentlichen jedoch so konfigurieren, dass die Regeln inaktiv sind. Oder Sie können die Regel aktivieren, aber festlegen, dass sie nur von einem bestimmten Anfangsdatum bis zu einem bestimmten Enddatum gelten soll.
Das war jetzt der kurze Überblick über Abfrageregeln. Wie verwenden wir sie also hier? Zufälligerweise gibt es eine vordefinierte Regel, die wir für unseren Zweck verwenden können. Beim Erstellen des obigen Screenshots habe ich die Regel deaktiviert, damit Sie ihre Auswirkungen besser erkennen können. In unserem Fall möchten wir bei Abfragen, mit denen jemand einen Vertriebsbericht sucht, dass der Abteilungsvertriebsbericht eingeblendet und wahrgenommen wird. Öffnen Sie also das Suchcenter in der Websitesammlung und „Websiteeinstellungen“ (Site Settings), und klicken Sie auf den Link „Abfrageregeln“ (Query Rules). Klicken Sie im Dropdownmenü auf Quelle auswählen (Select a source), und wählen Sie „Ergebnisse für lokale Berichte und Daten“ (Local Reports and Data Results) aus. Anschließend wird eine Abfrageregel mit dem Namen „Berichte und Daten“ (Reports and Data) angezeigt. Klicken Sie auf die Regel, und wählen Sie im Dropdownmenü „Anzeigen“ (View) aus, um die Komponenten der Regel anzuzeigen. Diese lauten wie folgt:
- Bedingung: Die Bedingung für die Regel ist, dass sich am Anfang oder Ende der Abfrage eines der folgenden Wörter befindet: „analysis;cube;dashboard;dashboards;data;database;report;reports;sales“. Beachten Sie, dass hier „reports“ und „sales“ angezeigt werden. Wenn jemand eine Abfrage nach „sales report“ durchführt, wird diese Regel ausgeführt. Das klingt perfekt – wenn jemand nach „sales report“ sucht, sollen die Abteilungsvertriebsberichte angezeigt werden. Diese Regel weist außerdem die Übereinstimmung den Tätigkeitswörtern zu, und alles andere wird den Gegenstandswörtern zugewiesen. In diesem Fall wird „reports“ dem Tätigkeitswort und „sales“ dem Gegenstandswort zugewiesen.
- Aktion: Die Aktion für diese Regel ist das Ausführen einer weiteren Abfrage, die NUR auf den Gegenstandswörtern basiert. Daher wird entsprechend der obigen Bedingung eine eigene Abfrage lediglich für „sales“ ausgeführt. Die Aktion fügt einen Block hinzu, der immer über allen anderen Ergebnissen zurückgegeben wird. Aber ... es wird NUR nach Umsätzen in der Quelle „Ergebnisse für lokale Berichte und Daten“ (Local Reports and Data Results) gesucht. Diese Ergebnisquelle ist ebenfalls vordefiniert, und sie gibt Excel-Dokumente zurück (die Dateierweiterungen lauten „.xlxs“, .xls“ usw.). Also werden bei der Abfrage dieser Ergebnisquelle nur Excel-Dokumente abgefragt.
- Veröffentlichen: Die Regel ist ohne Anfangs- und Enddatum aktiviert, daher wird sie immer angewendet.
Ich habe diese Abfrageregel erneut aktiviert, daher sehen die Ergebnisse wie folgt aus, wenn ich eine Abfrage nach „sales reports“ ausführe:
Cool, das sieht schon besser aus. Die Abfrageregel wurde angewendet, und jetzt werden die Dokumente basierend auf dem benutzerdefinierten Inhaltstyp „sales reports“ zurückgegeben, der am Anfang der Ergebnisse angezeigt wird. Sehr schön! Es werden jedoch immer noch keine Metadaten zu den Dokumenten angezeigt, dabei wird mit diesen erst alles zusammengeführt.
Anzeigevorlagen
Wenn Sie in SharePoint 2010 ein bestimmtes Element anders darstellen wollten, war es recht mühsam, einen großen Abschnitt XSLT im Hauptergebniswebpart zu ändern. Sie mussten Ihre gesamten XSLT-Kenntnisse zur Anwendung bringen, um die richtige Stelle in dem riesigen Dokument zu finden, an der der benutzerdefinierte Code eingefügt werden musste. Es lässt sich kaum behaupten, dass dies viel Freude bereitet hat.
In SharePoint 2013 – Tusch! – gibt es Anzeigevorlagen, und diese sind eine echte Verbesserung. Sie benötigen nicht mehr Ihren XSLT-Werkzeugkasten, sondern können den benutzerdefinierten Anzeigecode direkt als HTML erstellen – super! Für diesen Beitrag habe ich den „Code“ für meine benutzerdefinierte Anzeigevorlage mit Adobe Dreamweaver CS6 erstellt. Was ist also das Funktionsprinzip von Anzeigevorlagen?
Bei einer Anzeigevorlage müssen Sie einige Dinge im Auge behalten:
- Verwaltete Eigenschaften: Sie müssen festlegen, welche verwalteten Eigenschaften zum Zeitpunkt der Abfrage abgerufen werden müssen. Diese Eigenschaften können Sie dann im HTML verwenden, mit einer Methode, die ich weiter unten beschreibe.
- Externes JS und CSS: Wenn Sie JavaScript- oder CSS-Dateien für die Anzeigevorlage verwenden möchten, können Sie sie verfügbar machen und der Anzeigevorlage hinzufügen.
- Inline-JavaScript: Sie können in der Anzeigevorlage auch Inline-JavaScript verwenden. Sie müssen lediglich sicherstellen, dass es sich unter dem ersten <div>-Element in der Anzeigevorlage befindet. Auch darüber mehr weiter unten.
- HTML: Hier erstellen Sie das eigentliche HTML für die Anzeigevorlage, mit der die Ergebnisse dargestellt werden.
Wir bringen für die Anzeigevorlage die Attribute aus dem benutzerdefinierten Inhaltstyp „sales report“, den wir erstellt haben, zusammen, damit die Suchergebnisse wie folgt angezeigt werden:
Fangen wir also an. Es ist fast immer sinnvoll, neue Anzeigevorlagen aus einer vorhandenen Anzeigevorlage zu erstellen. Öffnen Sie das Suchcenter in der Websitesammlung und „Websiteeinstellungen“ (Site Settings), und klicken Sie dann auf den Link „Gestaltungsvorlagen und Seitenlayouts“ (Master pages and page layouts). Klicken Sie in der Bibliothek auf den Ordner „Display Templates“ und dann auf den Ordner „Search“. Dieser Ordner enthält alle vordefinierten Anzeigevorlagen. Wahrscheinlich werden einige Dateien mit dem gleichen Namen angezeigt, sie unterscheiden sich jedoch durch die Erweiterung „.html“ und „.js“. Für Sie sind nur die HTML-Dateien relevant – die JS-Dateien werden automatisch generiert, wenn Sie eine HTML-Datei hochladen. Da in diesem Fall die Anzeigevorlage für Excel-Dateien vorgesehen ist, habe ich die Datei „Item_Excel.htm“ verwendet. Ich habe lokal eine Kopie heruntergeladen, in „SalesReport.html“ umbenannt und sie dann in Dreamweaver geöffnet.
Dann habe ich die verwalteten Eigenschaften hinzugefügt. Es gibt ein Tag mit dem Namen „mso:ManagedPropertyMapping“, in das die verwalteten Eigenschaften eingefügt werden, die für die Anzeigevorlage erforderlich sind. Ich habe einfach die verwalteten Eigenschaften am Ende der Liste hinzugefügt, im gleichen Format wie die restlichen verwalteten Eigenschaften. Die Liste sieht wie folgt aus:
<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title', 'Author':'Author', 'Size':'Size', 'Path':'Path', 'Description':'Description', 'LastModifiedTime':'LastModifiedTime', 'CollapsingStatus':'CollapsingStatus', 'DocId':'DocId', 'HitHighlightedSummary':'HitHighlightedSummary', 'HitHighlightedProperties':'HitHighlightedProperties', 'FileExtension':'FileExtension', 'ViewsLifeTime':'ViewsLifeTime', 'ParentLink':'ParentLink', 'ViewsRecent':'ViewsRecent', 'FileType':'FileType', 'IsContainer':'IsContainer', 'ServerRedirectedURL':'ServerRedirectedURL', 'ServerRedirectedEmbedURL':'ServerRedirectedEmbedURL', 'ServerRedirectedPreviewURL':'ServerRedirectedPreviewURL', 'AccountManager':'AccountManager', 'SalesRegion':'SalesRegion', 'TotalAccounts':'TotalAccounts', 'TopAccounts':'TopAccounts', 'DirectReports':'DirectReports', 'ContentType':'ContentType'</mso:ManagedPropertyMapping>
Sie sehen, dass ich „AccountManager“, „SalesRegion“ usw. hinzugefügt habe – alle Eigenschaften, die ich für den benutzerdefinierten Inhaltstyp erstellt hatte. Anschließend habe ich einen Bildlauf nach unten bis zu folgender Stelle ausgeführt:
<div id="_#= $htmlEncode(itemId) =#_" name="Item" data-displaytemplate="ExcelItem" class="ms-srch-item" onmouseover="_#= ctx.CurrentItem.csr_ShowHoverPanelCallback =#_" onmouseout="_#= ctx.CurrentItem.csr_HideHoverPanelCallback =#_">
_#=ctx.RenderBody(ctx)=#_
<div id="_#= $htmlEncode(hoverId) =#_" class="ms-srch-hover-outerContainer"></div>
</div>
Ich habe alles zwischen den äußeren DIV-Tags (oben rot hervorgehoben) gelöscht. Jetzt kann ich das HTML schreiben. Bevor ich dies beschreibe, sollten Sie drei Dinge wissen, die Sie beachten müssen:
- Wahrscheinlich können Sie das HTML einfacher erstellen, wenn Sie im <head>-Abschnitt der Anzeigevorlage ein <style>-Tag stehen lassen. Diese style-Tags werden aus Gründen, die ich hier nicht weiter ausführe, beim Darstellen der Anzeigevorlage verworfen. Daher müssen Sie die style-Tags in eine eigene CSS-Datei kopieren. Jedoch können Sie beim Erstellen des HTML die style-Tags verwenden und ändern, um sicherzustellen, dass Sie für die Anzeigevorlage das gewünschte Aussehen und Verhalten erzeugen.
- Wie bereits erwähnt, können Sie sogenanntes Inline-JavaScript hinzufügen. Dies bedeutet lediglich, dass Sie JavaScript-Code hinzufügen können, solange Sie ihn an der richtigen Position hinzufügen. Bei einer Anzeigevorlage bedeutet dies, dass sich der JavaScript-Code hinter dem ersten DIV-Tag