Categorías: desarrollo sharepoint 2013

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:

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.

Compartir
Publicado por
Adrián Díaz

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)