Freigeben über


Beispiel für Das SharePoint-Add-In zum Personalisieren von Suchergebnissen

Das Search.PersonalizedResults-Beispiel zeigt Ihnen, wie Sie SharePoint personalisieren, indem Sie Informationen basierend auf dem Wert einer Benutzerprofileigenschaft filtern. Beispiele für die Personalisierung sind:

  • Nachrichtenartikel oder andere Inhalte, gefiltert nach Land oder Ort.
  • Navigationslinks werden basierend auf der Rolle oder organization des Benutzers gefiltert.
  • Restaurants oder Verkaufsstellenauflistungen basierend auf dem Standort Ihres Geschäftsstandorts.

In diesem Codebeispiel wird ein vom Anbieter gehostetes Add-In verwendet, um dem Benutzer Suchergebnisse anzuzeigen, die entweder alle Websites oder nur Teamwebsites enthalten, auf die der Benutzer Zugriff hat. Dazu wird im Beispiel Folgendes verwendet:

  • Überprüft den Wert der AboutMe-Benutzerprofileigenschaft .
  • Erstellt eine Suchabfragefilterzeichenfolge, die dem Wert der AboutMe-Benutzerprofileigenschaft zugeordnet ist.
  • Führt die Suchabfrage aus und zeigt die Suchergebnisse an.

Bevor Sie beginnen

Laden Sie zunächst das Search.PersonalizedResults-Beispiel-Add-In aus dem Projekt Office 365 Developer Patterns and Practices auf GitHub herunter.

Hinweis

Der Code in diesem Artikel wird wie besehen und ohne jegliche Garantie zur Verfügung gestellt, gleich ob ausdrücklich oder konkludent, einschließlich jedweder stillschweigenden Gewährleistung der Eignung für einen bestimmten Zweck, Marktgängigkeit oder Nichtverletzung von Rechten.

Verwenden des Search.PersonalizedResults-Beispiel-Add-Ins

Wenn Sie dieses Codebeispiel ausführen, wird eine vom Anbieter gehostete Anwendung angezeigt.

Screenshot: Startseite des Search.PersonalizedResults-Add-Ins

In diesem Artikel wird das Szenario Durchführen einer personalisierten Suche aller Websitevorlagen mithilfe von Profildaten beschrieben. Wenn Sie Personalisierte Suche ausführen auswählen, werden gefilterte Suchergebnisse zurückgegeben, die nur Teamwebsites enthalten, wie in der folgenden Abbildung dargestellt. Beachten Sie, dass die Spalte Vorlage nur Websites vom Typ STS enthält.

Screenshot der Suchergebnisse mit nur Teamwebsites

Für die Verarbeitung von Personalisierungsszenarien können Sie die Suchabfrage wie folgt ändern:

  • Lesen und Testen des Werts einer Benutzerprofileigenschaft für diesen Benutzer. In diesem Codebeispiel wird die About Me-Eigenschaft auf den Wert AppTest getestet.

  • Eine bestimmte Vorgehensweise basierend auf dem Wert der Benutzerprofileigenschaft. Wenn der Wert der Benutzerprofileigenschaft Über mich beispielsweise AppTest ist, entfernt dieses Codebeispiel den Teamwebsitefilter und gibt Suchergebnisse zurück, die alle Websites enthalten.

Geben Sie AppTest in die Benutzerprofileigenschaft "Über mich" ein.

  1. Wählen Sie oben auf Ihrer Office 365-Website Ihr Profilbild und dann Über mich aus.

    Screenshot der Benutzerprofilseite mit hervorgehobener Option

  2. Wählen Sie auf der Seite Über mich die Option Profil bearbeiten aus.

  3. Geben Sie unter Über michden Namen AppTest ein.

  4. Klicken Sie auf Alles speichern und schließen.

Kehren Sie zum vom Anbieter gehosteten Add-In Search.PersonalizedResults zurück, und wählen Sie erneut Personalisierte Suche ausführen aus. Das Add-In ändert den Filter für die Suchabfrage so, dass nur alle Websites anstelle von Teamwebsites angezeigt werden, wie in der folgenden Abbildung dargestellt. Die Spalte Vorlage enthält jetzt mehrere verschiedene Websitevorlagentypen.

Screenshot der Suchergebnisse mit allen Seiten

Wenn Sie in default.aspx.cs die Option Personalisierte Suche ausführen auswählen, wird die btnPersonalizedSearch_Click-Methode aufgerufen, die die folgenden Aktionen ausführt:

  • Verwendet PeopleManager , um alle Benutzerprofileigenschaften für den Benutzer abzurufen, der dieses Add-In ausführt.

  • Ruft den Wert der AboutMe-Benutzerprofileigenschaft ab und überprüft diese. Wenn der Wert der AboutMe-EigenschaftAppTest ist, ruft die Suchabfrage alle Websites mithilfe der Abfragezeichenfolge contentclass:"STS_Site"ab. Wenn der Wert der AboutMe-Eigenschaft nicht AppTest ist, wird der Teamwebsitefilter an die Abfragezeichenfolge (WebTemplate=STS) angefügt, und die Suchabfrage ruft nur Teamwebsites ab.

  • Ruft die ProcessQuery-Methode auf, um die Suchergebnisse basierend auf der angegebenen Abfragezeichenfolge abzurufen. ProcessQuery veranschaulicht auch, wie eine Liste von Eigenschaften angegeben wird, die mit den Suchergebnissen zurückgegeben werden sollen.

  • Ruft die FormatResults-Methode auf, um die Suchergebnisse in eine HTML-Tabelle zu formatieren.

protected void btnPersonalizedSearch_Click(object sender, EventArgs e)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                // Load user profile properties.
                PeopleManager peopleManager = new PeopleManager(clientContext);
                PersonProperties personProperties = peopleManager.GetMyProperties();
                clientContext.Load(personProperties);
                clientContext.ExecuteQuery();
                // Check the value of About Me.
                string aboutMeValue = personProperties.UserProfileProperties["AboutMe"];
                string templateFilter = ResolveAdditionalFilter(aboutMeValue);
                // Build the query string.
                string query = "contentclass:\"STS_Site\" " + templateFilter;
                ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
                lblStatus2.Text = FormatResults(results);
            }
        }

private ClientResult<ResultTableCollection> ProcessQuery(ClientContext ctx, string keywordQueryValue)
        {
            KeywordQuery keywordQuery = new KeywordQuery(ctx);
            keywordQuery.QueryText = keywordQueryValue;
            keywordQuery.RowLimit = 500;
            keywordQuery.StartRow = 0;
            keywordQuery.SelectProperties.Add("Title");
            keywordQuery.SelectProperties.Add("SPSiteUrl");
            keywordQuery.SelectProperties.Add("Description");
            keywordQuery.SelectProperties.Add("WebTemplate");
            keywordQuery.SortList.Add("SPSiteUrl", Microsoft.SharePoint.Client.Search.Query.SortDirection.Ascending);
            SearchExecutor searchExec = new SearchExecutor(ctx);
            ClientResult<ResultTableCollection> results = searchExec.ExecuteQuery(keywordQuery);
            ctx.ExecuteQuery();
            return results;
        }

Siehe auch