martes, 6 de abril de 2010

Comportamiento curioso del control PeopleEditor de la familia SharePoint

Contexto:

Este control nos toda la funcionalidad de capturar los usuarios del Active Directory en nuestro elementos web personalizados tal y como lo hace SharePoint por lo que es muy útil y productivo.

Para los que no lo conocen este es un “screenshot” de como luce

image

Y en código HTML de un control de usuario luce así:

<SharePoint:PeopleEditor ID="CapturaAsignado" runat="server" IsValid="false" AllowEmpty="false"
                Height="20px" Width="400px" AllowTypeIn="true" MultiSelect="false" EnableViewState="true" />


Se debe declarar el ensamblado de los controles de SharePoint así:



<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>


Problema:



Bueno pero cual es el comportamiento curioso de este control; Dentro del código deshabilito el control dependiendo del usuario que este conectado y adivine qué? Pierde el valor que le fue asignado cuando se realiza un PostBack al servidor.  No así cuando siempre esta habilitado no sucede lo mismo.



Solución alterna:



Dentro de la lógica del código en el evento load() verificar si esta deshabilitado el control es decir CapturaAsignado.Enabled = false. Si es así sabemos que ya no lleva el valor debemos de asignarlo nuevamente al control (para ello debimos haberlo guardado antes obviamente).  Por ejemplo:




CapturaAsignado.CommaSeparatedAccounts = value;




Donde CapturaAsignado es el ID del control PeopleEditor y CommaSeparatedAccounts es su propiedad para asignar el login Name del usuario.



Espero evitarle un pequeño retraso en su trabajo.



Recuerde Code4Fun!,



Manolo Herrera

No hay comentarios.: