Personalizar os resultados da pesquisa exemplo de Suplemento do SharePoint
O exemplo Search.PersonalizedResults mostra como personalizar o SharePoint filtrando informações com base no valor de uma propriedade de perfil de usuário. Alguns exemplos de personalização incluem:
- Artigos de notícias ou outro conteúdo filtrado por país ou local.
- Links de navegação filtrados com base na função ou organização do usuário.
- Listagens de restaurantes ou pontos de venda com base na localização do seu local de negócios.
Este exemplo de código usa um suplemento hospedado pelo provedor para exibir resultados de pesquisa para o usuário que incluem todos os sites ou apenas sites de equipe aos quais o usuário tem acesso. Para fazer isso, o exemplo:
- Verifica o valor da propriedade de perfil de usuário AboutMe .
- Cria uma cadeia de caracteres de filtro de consulta de pesquisa associada ao valor da propriedade de perfil de usuário AboutMe .
- Executa a consulta de pesquisa e exibe os resultados da consulta de pesquisa.
Antes de começar
Para começar, baixe o suplemento de exemplo Search.PersonalizedResults do projeto Office 365 Padrões e Práticas do Desenvolvedor no GitHub.
Observação
The code in this article is provided as-is, without warranty of any kind, either express or implied, including any implied warranties of fitness for a particular purpose, merchantability, or non-infringement.
Usando o suplemento de exemplo Search.PersonalizedResults
Quando você executa esse exemplo de código, um aplicativo hospedado pelo provedor é exibido.
Este artigo descreve a pesquisa Executar personalizado de todos os modelos de site usando o cenário de dados de perfil . Escolher Executar Pesquisa Personalizada retorna resultados de pesquisa filtrados que contêm apenas sites de equipe, conforme mostrado na figura a seguir. Observe que a coluna Modelo contém apenas sites do tipo STS .
Para lidar com cenários de personalização, você pode alterar a consulta de pesquisa por:
Lendo e testando o valor de uma propriedade de perfil de usuário para esse usuário. Este exemplo de código testa a propriedade About Me para um valor de AppTest.
Tomando um curso de ação específico com base no valor da propriedade de perfil de usuário. Por exemplo, se o valor da propriedade de perfil de usuário About Me for AppTest, esse exemplo de código removerá o filtro do site da equipe e retornará os resultados da pesquisa que contêm todos os sites.
Insira AppTest na propriedade de perfil de usuário About Me
Na parte superior do seu site Office 365, escolha sua imagem de perfil e escolha Sobre mim.
Na página Sobre mim, escolha editar seu perfil.
Em Sobre mim, insira AppTest.
Escolha Salvar tudo e fechar.
Executar pesquisa personalizada
Retorne ao suplemento Search.PersonalizedResults hospedado pelo provedor e escolha Executar Pesquisa Personalizada novamente. O suplemento altera o filtro na consulta de pesquisa para mostrar todos os sites em vez de apenas sites de equipe, conforme mostrado na figura a seguir. A coluna Modelo agora contém vários tipos de modelo de site diferentes.
Em default.aspx.cs, escolher Executar Pesquisa Personalizada chama o método btnPersonalizedSearch_Click , que executa as seguintes ações:
Usa o PeopleManager para obter todas as propriedades do perfil de usuário para o usuário que executa esse suplemento.
Recupera e verifica o valor da propriedade de perfil de usuário AboutMe . Se o valor da propriedade AboutMe for AppTest, a consulta de pesquisa recuperará todos os sites usando a cadeia de caracteres
contentclass:"STS_Site"
de consulta . Se o valor da propriedade AboutMe não for AppTest, o filtro do site da equipe será acrescentado à cadeia de caracteres de consulta (WebTemplate=STS
) e a consulta de pesquisa recuperará apenas sites de equipe.Chama o método ProcessQuery para recuperar os resultados da pesquisa com base na cadeia de caracteres de consulta fornecida. ProcessQuery também demonstra como especificar uma lista de propriedades a serem retornadas com os resultados da pesquisa.
Chama o método FormatResults para formatar os resultados da pesquisa em uma tabela 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;
}