Utilisation de l’API de recherche dans le modèle de complément SharePoint
L’approche que vous utilisez pour exécuter des recherches avec le service de recherche SharePoint est différente dans le nouveau modèle de complément SharePoint et dans le code de confiance totale. Dans un scénario standard de code de confiance totale (FTC) / solution de batterie de serveurs, le modèle objet côté serveur SharePoint (remplacements du composant WebPart Content By Query) ou les services web de recherche ont été utilisés pour exécuter des recherches avec le service de recherche SharePoint.
Dans un scénario de modèle de complément SharePoint, vous exécutez des recherches avec le service de recherche SharePoint via les API CSOM ou REST.
Conseils importants
En règle générale, nous aimerions fournir les instructions générales suivantes pour créer et configurer des collections de sites et des sous-sites, puis y déployer des artefacts, des configurations et des ressources de personnalisation.
- L’utilisation de l’authentification AppOnly n’est pas prise en charge pour les opérations du service de recherche.
- Cela est dû au fait que le service de recherche accède au service de profil utilisateur pour rechercher des informations de profil utilisateur et que l’UPS ne prend pas en charge l’authentification AppOnly.
- Par conséquent, étant donné que la pertinence de la recherche et d’autres facettes de recherche dépendent d’un utilisateur donné et de ses attributs de profil, le modèle d’authentification AppOnly ne fonctionnera pas.
Options permettant d’exécuter des recherches avec le service de recherche SharePoint
Vous disposez d’un ensemble d’options pour exécuter des recherches avec le service de recherche SharePoint.
- API CSOM .NET
- JavaScript CSOM (JSOM) API
- API REST
API CSOM .NET
Dans cette option, vous utilisez l’API CSOM .Net pour exécuter des recherches avec le service de recherche SharePoint.
- Cette API est disponible uniquement dans le code .Net managé.
Quand est-elle adaptée ?
- Cette API convient parfaitement aux compléments hébergés par le fournisseur, aux opérations de longue durée ou à d’autres scénarios côté serveur qui s’exécutent sur la plateforme .Net.
- Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, services API Web ASP.NET, console .Net ou applications Windows, et Azure Web Jobs.
Mise en route
L’exemple suivant montre comment exécuter des recherches avec le service de recherche SharePoint avec l’API CSOM .Net. Cet exemple montre également comment accéder au profil d’un utilisateur pour personnaliser les résultats de la recherche.
L’article Guide pratique pour effectuer des requêtes de recherche personnalisées avec CSOM (vidéo PnP O365) vous guide dans Search.PersonalizedResults (exemple PnP O365).
La méthode btnPerformSearch_Click dans la classe Default.aspx.cs exécute une recherche pour la valeur de texte que l’utilisateur entre dans la zone de recherche et étend la recherche à tout le contenu stocké dans une collection de sites. Le paramètre contentclass:"STS_Site » limite l’étendue de recherche aux collections de sites.
protected void btnPerformSearch_Click(object sender, EventArgs e)
{
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
// Since in this case we want only site collections, let's filter based on result type
string query = searchtext.Text + " contentclass:\"STS_Site\"";
ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
lblStatus1.Text = FormatResults(results);
}
}
La méthode btnPersonalizedSearch_Click dans la classe Default.aspx.cs exécute la même recherche que la méthode btnPerformSearch_Click et ajoute également un paramètre supplémentaire basé sur le profil de l’utilisateur actuel. La classe PeopleManager est utilisée pour accéder aux propriétés de profil de l’utilisateur actuel.
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 teh value for About Me to investigate current values
string aboutMeValue = personProperties.UserProfileProperties["AboutMe"];
string templateFilter = ResolveAdditionalFilter(aboutMeValue);
// Let's build the query
string query = "contentclass:\"STS_Site\" " + templateFilter;
ClientResult<ResultTableCollection> results = ProcessQuery(clientContext, query);
lblStatus2.Text = FormatResults(results);
}
}
La méthode ResolveAdditionalFilter de la classe Default.aspx.cs évalue les propriétés de profil de l’utilisateur actuel et retourne un paramètre de recherche applicable. Dans cet exemple, si la propriété de profil utilisateur aboutMeValue contient AppTest, le paramètre de recherche WebTemplate=STS est retourné. Ce paramètre limite l’étendue de recherche aux sites créés avec le modèle STS (Site d’équipe).
private string ResolveAdditionalFilter(string aboutMeValue)
{
if (!aboutMeValue.Contains("AppTest"))
{
return "WebTemplate=STS";
}
return "";
}
Dans les deux cas, la méthode ProcessQuery de la classe Default.aspx.cs utilise la classe SearchExecutor pour exécuter la requête de recherche et retourner les résultats.
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;
}
JavaScript CSOM (JSOM) API
Dans cette option, vous utilisez l’API JavaScript CSOM (JSOM) pour exécuter des recherches avec le service de recherche SharePoint.
- Cette API est disponible uniquement dans le code JavaScript côté client.
Quand est-elle adaptée ?
- Cette API convient parfaitement aux compléments hébergés par SharePoint et aux compléments hébergés par un fournisseur s’exécutant sur n’importe quelle plateforme web.
- Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, sites web PHP, sites web Python, etc.
Prise en main
L’exemple de code suivant montre comment exécuter des recherches avec le service de recherche SharePoint avec l’API JavaScript CSOM (JSOM). Cet exemple exécute une recherche pour tous les éléments qui contiennent le terme « Blizzard ».
var context = SP.ClientContext.get_current();
var keywordQuery =
new Microsoft.SharePoint.Client.Search.Query.KeywordQuery(context);
keywordQuery.set_queryText("Blizzard");
var searchExecutor =
new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(context);
results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onGetEventsSuccess, onGetEventsFail);
API REST
Dans cette option, vous utilisez l’API REST pour exécuter des recherches avec le service de recherche SharePoint.
- Cette API est la plus flexible, car elle est disponible à la fois dans le code côté serveur et côté client.
- Le point de terminaison racine de l’API REST du service de recherche SharePoint est :
- <https:// tenant>/site/_api/search/query
- Voici quelques exemples simples :
Recherche par mot clé
https://tenant/site/_api/search/query?querytext='{Apples}'
Sélection de propriétés spécifiques
https://tenant/site/_api/search/query?querytext='test'&selectproperties='Rank, Title'
Tri
https://tenant/site/_api/search/query?querytext='Oranges'&sortlist='LastModifiedTime:ascending'
Quand est-elle adaptée ?
Cette API convient parfaitement aux compléments hébergés par SharePoint et aux compléments hébergés par un fournisseur s’exécutant sur n’importe quelle plateforme web.
- Voici quelques exemples de ces scénarios : ASP.NET sites web MVC, sites web PHP, sites web Python, services API Web ASP.NET, console .Net ou applications Windows, Azure Web Jobs, etc.
Prise en main
Option côté serveur
L’exemple suivant montre comment exécuter des recherches avec le service de recherche SharePoint avec l’API REST à partir de code .Net managé.
EmployeeDirectory (Contenu de formation OfficeDev)
La méthode Index dans la classe HomeController.cs exécute une recherche pour tous les utilisateurs dont le nom commence par la valeur de texte sur laquelle l’utilisateur clique.
var spContext = SharePointContextProvider.Current.GetSharePointContext(HttpContext); string accessToken = spContext.UserAccessTokenForSPHost; //Build the REST API request StringBuilder requestUri = new StringBuilder() .Append(spContext.SPHostUrl) .Append("/_api/search/query?querytext='LastName:") .Append(startLetter) .Append("*'&selectproperties='LastName,FirstName,WorkEmail,WorkPhone'&sourceid='B09A7990-05EA-4AF9-81EF-EDFAB16C4E31'&sortlist='FirstName:ascending'"); //Create HTTP Client HttpClient client = new HttpClient(); //Add the REST API request HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri.ToString()); //Set accept header request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); //Set Bearer header equal to access token request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); //Send the REST API request HttpResponseMessage response = await client.SendAsync(request); //Set the response string responseString = await response.Content.ReadAsStringAsync();
Le Guide pratique pour créer des compléments SharePoint qui tirent parti de la recherche (vidéo PnP O365) vous guide tout au long du répertoire EmployeeDirectory (contenu de formation OfficeDev).
Option côté client
L’exemple de code suivant montre comment exécuter des recherches avec le service de recherche SharePoint avec l’API REST à partir de JavaScript. Cet exemple exécute une recherche pour tous les éléments qui contiennent le terme « Crosse ».
$.ajax({
url: "http://site/_api/search/" +
"query?querytext='{Lacrosse}‘",
method: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: onSuccess,
error: onError
});
Liens associés
- Comment effectuer des requêtes de recherche personnalisées avec CSOM (Vidéo PnP O365)
- EmployeeDirectory (Contenu de formation OfficeDev)
- Comment créer des compléments SharePoint qui tirent parti de la recherche (Vidéo PnP O365)
- Articles d’aide dans https://aka.ms/OfficeDevPnPGuidance
- Références dans MSDN sur https://aka.ms/OfficeDevPnPMSDN
- Vidéos sur https://aka.ms/OfficeDevPnPVideos
Exemples PnP
- Search.PersonalizedResults (Exemple PnP O365)
- Exemples et contenu dans Modèles et pratiques Microsoft 365 (PnP)
S’applique à
- Office 365 multi-locataire (MT).
- Office 365 dédiés (D)
- SharePoint 2013 en local