Dentro de SharePoint existen diversos elementos que podemos utilizar en nuestros desarrollos. Hace algún tiempo hablamos sobre el TaxonomyTaggingControl, ahora es el turno de una de las novedades que vienen con SharePoint 2013: el componente ClientPeoplePicker, una evolución del PeoplePicker pero con un notable rendimiento en la obtención de datos al hacer uso de JavaScript.
¿Qué es el ClientPeoplePicker?
Es un control que nos muestra los usuarios/grupo que podemos utilizar dentro de SharePoint. Algo como la siguiente imagen:
Las ventajas respecto al control PeoplePicker, que se utilizaba en versiones anteriores y que aún está disponible en SharePoint 2013, son claras. Este control es mucho más usable y simple para el usuario final. ¿Por qué? Pues porque sólo con introducir un par de letras, nos muestra sugerencias y se comprueba el valor introducido sin tener que realizar un click extra.
¿Cómo lo introducimos en nuestro desarrollo?
- Abrimos la página/Webpart/UserControl donde lo queremos utilizar y dentro de las referencias (en la cabecera de la pagina aspx) tenemos que tener introducido esto:
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
- A continuación, añadimos el componente en el lugar indicado de la siguiente forma:
<SharePoint:ClientPeoplePicker ID="txtPeoplePicker" ValidationEnabled="true" runat="server" VisibleSuggestions="3" AllowMultipleEntities="True" CssClass="estilo propo" PrincipalAccountType="User,SecGroup" InitialHelpText=" "/>
Aspectos de configuración
Como se observa dentro de la definición del componente, podemos establecer diversas opciones que deberemos conocer para obtener el máximo valor al componente. Estas propiedades son:
- ValidationEnabled: Podemos forzar que el usuario no pueda introducir cualquier valor.
- VisibleSuggestions: Número de personas/grupos que coinciden con las palabras introducidas.
- AllowMultipleEntities: Permite introducir uno o más usuarios.
- PrincipalAccountType. Tipos que se pueden introducir: Usuarios, Grupos o Grupos de Active Directory
¿Cómo obtener los datos del ClientPeoplePicker?
Para obtener los valores, tenemos que acceder a la propiedad ResolvedEntities que tiene el objeto ClientPeoplePicker y son los valores que hay introducidos para obtener el usuario correspondiente. A continuación, mostramos un ejemplo de cómo obtener sólo los Usuarios:
public static List<Userd> GetValuePeople(ClientPeoplePicker editor) { var resolvedEntities = editor.ResolvedEntities; return (from PickerEntity entity in resolvedEntities select SPContext.Current.Web.EnsureUser(entity.Key) into spUser select new Userd {Key = spUser.ID.ToString(), Value = spUser.LoginName}).ToList(); }
En caso de que necesitemos obtener los grupos de SharePoint, en lugar de acceder al objeto Web.EnsureUser, tendremos que acceder al objeto Group. Gracias a las propiedades del ClientPeoplePicker, podemos saber que tipo de objeto es.
P.D Un grupo de AD para este componente es igual que un usuario de SharePoint.
¿Cómo establecer los datos en el ClientPeoplePicker?
Para introducir valor en el componente basta con ir añadiendo Entities al objeto que sea de new List:
public static void SetUserPicker(IEnumerable<Userd> userList, ClientPeoplePicker field) { try { foreach (var user in userList) { var spUser = SPContext.Current.Web.EnsureUser(user.Value); var entity = new PickerEntity {Key = spUser.Name}; if ((String.IsNullOrEmpty(entity.DisplayText))) { entity.DisplayText = spUser.Name; } var pe = new PeopleEditor(); entity = pe.ValidateEntity(entity); field.AddEntities(new List<PickerEntity> { entity }); } } catch (Exception exception) { Logger.Error(string.Concat("Error SetUserPicker", exception.Message)); } }
Conclusión
Una de las ventajas que tiene SharePoint es que tiene bastantes controles, los definidos como out of the box. Estos los podemos utilizar dentro de nuestros desarrollo y los podemos customizar añadiendo nuestros propios estilos. Casi todos los elementos que hay definidos en SharePoint los podemos utilizar en nuestros desarrollos, por lo que hay que tenerlo en cuenta antes de realizar un desarrollo personalizado.