tutorial que office gratis descargar sharepoint wss

que - sharepoint server



¿Cuál es la mejor manera de convertir una cadena de campo multiusuario de SharePoint en una matriz de SPUsers? (2)

Esto funciona para mí al obtener un usuario de SPS de un campo de usuario. Debe ser lo mismo para extraerlo de los datos de evento .:

private SPUser getGroup(SPListItem item, string fieldName) { string fieldValue = item[fieldName] as string; if (string.IsNullOrEmpty(fieldValue)) return null; int id = int.Parse(fieldValue.Split('';'')[0]); SPUser user = item.Web.AllUsers.GetByID(id); return user; }

El número entero hace referencia a la identificación del usuario en la base de datos de usuarios de SPWebs local. Sin embargo, esto no está sincronizado, por lo que el usuario puede haber sido eliminado de la base de datos del usuario desde que se guardó el elemento de la lista.

Estoy escribiendo un manejador de ItemAdding para una lista de SharePoint, y la lista contiene campos multiusuario. Dado que SPItem no está realmente disponible en este punto, creo que estoy relegado a utilizar la cadena que proviene de SPItemEventDataCollection. Esa cadena se verá más o menos así cuando usuario1, usuario2 y usuario3 estén presentes:

1; #MYDOMAIN / user1; # 4; #MYDOMAIN / user2; # 10; #MYDOMAIN / user3

Me gustaría convertir esto en una matriz de objetos SPUser para pasarlo a otro método existente. ¿Hay alguna forma integrada de SharePoint para manejar estas cadenas, o estoy relegado a analizar esta cadena?

Además, suponiendo que tenga que tratar con esta cadena, parece que los tokens enteros aquí siempre corresponden al dominio / nombre de usuario que sigue. ¿Hay algún caso en que esto no sea cierto y el entero o el dominio / nombre de usuario falten o sean incorrectos? ¿Sería seguro usar los números y usar el método SiteUsers.GetByID (id) de SPWeb? En un puñado de pruebas no puedo conseguir que falle, pero parece extraño que los datos numéricos y de cadena se incluirían si son totalmente redundantes.

¡Gracias!


SPFieldUserValueCollection hace exactamente lo que estás buscando. Su constructor acepta un SPWeb y una cadena de usuarios. Los elementos SPFieldUserValue en la colección proporcionan una propiedad de usuario que devuelve los objetos de SPUser correspondientes para la web.

private void ProcessUsers(SPListItem item, string fieldName) { string fieldValue = item[fieldName] as string; SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue); foreach(SPFieldUserValue uv in users) { SPUser user = uv.User; // Process user } }

El tipo SPFieldUser hereda su comportamiento del SPFieldLookup estándar, que también almacena ID y Título y tiene una SPFieldLookupValueCollection correspondiente. El ID admite integridad referencial (débil) mientras que el valor en caché permite consultas rápidas.