Provedor de declarações personalizadas - Resultados não exibidos no People Picker
-
28-09-2020 - |
Pergunta
Implementei um provedor de declarações personalizado.Quando insiro um termo no seletor de pessoas, ele consulta o provedor e retorna uma lista de objetos PickerEntity correspondentes.
A depuração mostra que o número correto de objetos PickerEntity está sendo enviado de volta ao SharePoint, mas o seletor de pessoas não os exibe.No entanto, ele mostra uma string informando 'Mostrando x resultados', onde x corresponde ao número de resultados que deve exibir.
Meu método FillSearch é o seguinte:
protected override void FillSearch(Uri context, string[] entityTypes, string searchValue, string hierarchyNodeID, int maxCount, SPProviderHierarchyTree searchTree)
{
// Ensure that People Picker is asking for the type of entity that we
// return; site collection administrator will not return, for example.
if (!EntityTypesContain(entityTypes, SPClaimEntityTypes.FormsRole)) { return; }
List<PickerEntity> matches = new List<PickerEntity>();
/*
removed code that retrieves the matches
*/
searchTree.AddEntities(matches);
}
O código que preenche a lista de correspondências faz isso chamando o seguinte método
private PickerEntity GetPickerEntity(string claimValue)
{
PickerEntity pickerEntity = CreatePickerEntity();
pickerEntity.Claim = CreateClaim(BaseClaimType, claimValue, StringClaimValueType);
pickerEntity.Description = ProviderDisplayName + ":" + claimValue;
pickerEntity.DisplayText = claimValue;
pickerEntity.EntityData[PeopleEditorEntityDataKeys.DisplayName] = claimValue;
pickerEntity.EntityType = SPClaimEntityTypes.FormsRole;
pickerEntity.IsResolved = true;
return pickerEntity;
}
Como posso exibir os resultados?
Solução
Isso acabou sendo um problema de ativação.Percebi que entre as implantações do meu código de provedor personalizado, os métodos FillClaimTypes e FillClaimValueTypes não estavam sendo chamados.
Desativei o provedor personalizado usando o SP2013ReivindicaçõesFerramentas e o reativou.Os métodos FillClaimTypes e FillClaimValueTypes foram chamados e tudo começou a funcionar conforme o esperado.
Outras dicas
Eu tive o mesmo problema.Estava no método FillClaimTypes.Há uma falta de correspondência entre o URL do esquema especificado no método e o URL do esquema atribuído à sua declaração.Resolvi atribuir o mesmo URL de esquema.Aqui para mais detalhes http://www.lucacostante.com/item/41-custom-claims-provider-results-not-showing-in-people-picker.html