Personnaliser l’exemple de complément SharePoint des résultats de recherche
L’exemple Search.PersonalizeResults vous montre comment personnaliser SharePoint en filtrant les informations en fonction de la valeur d’une propriété de profil utilisateur. Voici quelques exemples de personnalisation :
- Articles d’actualités ou autres contenus filtrés par pays ou emplacement.
- Liens de navigation filtrés en fonction du rôle ou du organization de l’utilisateur.
- Restaurants ou annonces de points de vente au détail en fonction de l’emplacement de votre lieu d’affaires.
Cet exemple de code utilise un complément hébergé par un fournisseur pour afficher les résultats de recherche à l’utilisateur qui incluent tous les sites ou uniquement les sites d’équipe auxquels l’utilisateur a accès. Pour ce faire, l’exemple :
- Vérifie la valeur de la propriété de profil utilisateur AboutMe .
- Génère une chaîne de filtre de requête de recherche associée à la valeur de la propriété de profil utilisateur AboutMe .
- Exécute la requête de recherche et affiche les résultats de la requête de recherche.
Avant de commencer
Pour commencer, téléchargez l’exemple de complément Search.PersonalizedResults à partir du projet Office 365 Developer Patterns and Practices sur GitHub.
Remarque
Le code dans cet article est fourni tel quel, sans garantie d’aucune sorte, expresse ou implicite, y compris mais sans s’y limiter, aucune garantie implicite d’adéquation à un usage particulier, à une qualité marchande ou une absence de contrefaçon.
Utilisation de l’exemple de complément Search.PersonalizedResults
Lorsque vous exécutez cet exemple de code, une application hébergée par un fournisseur s’affiche.
Cet article décrit le scénario Effectuer une recherche personnalisée de tous les modèles de site à l’aide de données de profil . L’option Effectuer une recherche personnalisée renvoie des résultats de recherche filtrés qui contiennent uniquement des sites d’équipe, comme illustré dans la figure suivante. Notez que la colonne Modèle contient uniquement des sites de type STS .
Pour gérer les scénarios de personnalisation, vous pouvez modifier la requête de recherche en :
Lecture et test de la valeur d’une propriété de profil utilisateur pour cet utilisateur. Cet exemple de code teste la propriété À propos de moi pour une valeur appTest.
Effectuer une action spécifique en fonction de la valeur de la propriété de profil utilisateur. Par exemple, si la valeur de la propriété de profil utilisateur À propos de moi est AppTest, cet exemple de code supprime le filtre de site d’équipe et retourne les résultats de recherche qui contiennent tous les sites.
Entrez AppTest dans la propriété À propos de moi du profil utilisateur
En haut de votre site Office 365, choisissez votre photo de profil, puis choisissez À mon sujet.
Sur la page À mon sujet, choisissez Modifier votre profil.
Dans À mon sujet, entrez AppTest.
Cliquez sur Enregistrer tout et fermer.
Effectuer une recherche personnalisée
Revenez au complément hébergé par le fournisseur Search.PersonalizedResults et choisissez à nouveau Effectuer une recherche personnalisée . Le complément modifie le filtre de la requête de recherche pour afficher tous les sites au lieu des sites d’équipe uniquement, comme illustré dans la figure suivante. La colonne Modèle contient désormais plusieurs types de modèles de site différents.
Dans default.aspx.cs, choisissez Effectuer une recherche personnalisée pour appeler la méthode btnPersonalizedSearch_Click , qui effectue les actions suivantes :
Utilise PeopleManager pour obtenir toutes les propriétés de profil utilisateur de l’utilisateur exécutant ce complément.
Récupère et vérifie la valeur de la propriété de profil utilisateur AboutMe . Si la valeur de la propriété AboutMe est AppTest, la requête de recherche récupère tous les sites à l’aide de la chaîne
contentclass:"STS_Site"
de requête . Si la valeur de la propriété AboutMe n’est pas AppTest, le filtre de site d’équipe est ajouté à la chaîne de requête (WebTemplate=STS
) et la requête de recherche récupère uniquement les sites d’équipe.Appelle la méthode ProcessQuery pour récupérer les résultats de la recherche en fonction de la chaîne de requête fournie. ProcessQuery montre également comment spécifier une liste de propriétés à retourner avec les résultats de la recherche.
Appelle la méthode FormatResults pour mettre en forme les résultats de la recherche dans une table HTML.
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;
}