Arquitectura, buenas prácticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016

Uso de ClientPeoplePicker: Modelo Servidor

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:

PersonalizacionPeoplePicker

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?

  1. 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" %>
    
  2. 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.

mm

Sobre Adrián Díaz

Adrián Díaz es Ingeniero Informático por la Universidad Politécnica de Valencia. Es MVP de Microsoft en la categoría Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 3 años está centrado en el desarrollo sobre SharePoint. Actualmente es Software & Cloud Architect Lead en ENCAMINA.
Esta entrada ha sido publicada en desarrollo, sharepoint 2013 y etiquetada como , , . Enlace permanente .
Suscríbete a Desarrollando sobre SharePoint

Suscríbete a Desarrollando sobre SharePoint

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores