El otro día (vaya a saber uno que día), uno de esos días donde pasamos inmersos frente a la pantalla de nuestra computadora y las agujas del reloj dan vueltas como locas sin parar, me encontré frente a un requerimiento (uno de los tantos que tenia este desarrollo) y que teníamos que resolver. Con Javier veníamos dando dura batalla a todo lo que teníamos que desarrollar, él mano a mano con el WorkFlow y yo mano a mano con los formularios personalizados de las listas. En un momento tuvimos que cambiar el enfoque del desarrollo y salirnos de Infopath 2007 y volcarnos al desarrollo tradicional de WebParts. Otra vez nos encontramos con que Infopath 2007 para Forms Services está limitado y hay cosas que no se pueden hacer (ese es un tema aparte) y desarrollar un formulario utilizando una WebPart para dar de altas elementos en la lista. Una de las cosas que tenía que tener el formulario era la posibilidad de seleccionar usuarios de Sharepoint y cargarlos. Todos hemos trabajados con los formularios que nos proporciona Sharepoint 2007 para las listas. Cuando tenemos un campo del tipo Persona o Grupo, en el formulario se nos brinda un control que nos permite introducir dicho usuario o grupo, validarlo o desplegar una pantalla para buscarlo, en la siguiente imagen se muestra dicho control. Imagen 1
Estamos acostumbrados a utilizar este tipo de campos en los formularios de Sharepoint 2007 para cargar personas o grupos. Incluso Infopath 2007 provee un control Activex, Contact Selector para utilizar dicha características en los formularios creados, acá les dejo las dirección a dos artículos de amigos de la comunidad que explican al pie de la letra como utilizar dicho control, · Marco Nosotros queríamos mantener esta característica en los formularios que estábamos creando, así que decidimos utilizar el control PeopleEditor que nos provee Sharepoint 2007 para incorporarlo en los mismos. Sección 1 <%@ Register tagprefix="SharePoint" namespace="Microsoft.SharePoint.WebControls" assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> Una vez registrado el Assembly correspondiente estábamos en condiciones de poder usar el control en nuestro formulario, así que declarativamente lo incorporamos al mismo como se puede ver en la sección 2. Sección 2 <SharePoint:PeopleEditor ID="PeopleEditorPersona" AllowEmpty="false" ValidatorEnabled="true" MultiSelect="false" runat="server" SelectionSet="User" CssClass="general_control" />
En la sección 3 vemos algunas de las propiedades que podemos establecer en el control PeopleEditor.
Sección 3 · AllowEmpy: propiedad que indica si el control puede estar vacio. · ValidatorEnabled: propiedad que indica si la velicación esta activada. · MultiSelect: propiedad que indica si podemos selecciona más de un usuario a la vez. · SelectionSet: propiedad que indica que tipo de objeto podemos seleccionar, en nuestro caso, solo usuarios.
Todos los valores permitidos por la propiedad SelectionSet del control se encuentran listados en la siguiente enumeración dentro de la clase PeopleEditor:
Microsoft.SharePoint.WebControls.PeopleEditor.AccountType
Para más información de esta enumeración vistitar la pagina del MSDN
Una vez el control está cargado en nuestro formulario lo que debemos hacer es colocar el código necesario para poder tomar los usuarios ingresados en el mismo. En nuestra clase asociada al control ASCX nos referimos al control utilizando la propiedad ID y utilizando la propiedad “Accounts” la cual nos brinda colección de strings con los usuarios cargados en el formato “dominiousuario”. Con cada elemento de la posición del ArrayList podemos cargar el usuario del sitio Web para tomar sus valores, en la sección 4 vemos el código completo del método asociado al evento click de nuestro botón “Guardar” del formulario y un método adicional que obtiene el usuario de nuestro portal Sharepoint 2007 a partir de la cuenta cargada. Para obtener el usuario del portal utilizamos el objeto SPContext que nos brinda una referencia al contexto de ejecución del sitio actual. Sección 4 protected void cmdGuardar_Click(object sender, EventArgs e) { SPUser lUser = GetUserLogged(PeopleEditorPersona.Accounts[0].ToString()); lblMsg.Text += "Nombre: " + lUser.Name + "<br>"; lblMsg.Text += "Login Name: " + lUser.LoginName + "<br>"; lblMsg.Text += "Email: " + lUser.Email + "<br>"; } private SPUser GetUserLogged(string pUserAccount) { return SPContext.Current.Web.AllUsers[pUserAccount]; }
En la magen 2 vemos como funciona el control dentro del formulario personalizdo creado para cargar el usuario de Sharepoint.
Imagen 2
|