forma más simple de obtener Spuser o Sproup de ID en SharePoint2010
-
22-10-2019 - |
Pregunta
Estoy apegado a un problema en el que tengo una ID de lista - Lista de ID. Tengo que encontrar el nombre de sesión de Spuser o SpUrgroup con la ID en Listid
Probé lo siguiente pero lanzó una excepción, ya que no encontró el usuario cuando la identificación del grupo está allí
foreach (var id in ID)
{
SPUser spUser = web.SiteUsers.GetByID(Convert.ToInt32(id));
if (spUser != null)
{
lstUsers.Add(spUser.LoginName);
continue;
}
SPGroup spGroup = web.SiteGroups.GetByID(Convert.ToInt32(id ));
if (spGroup != null)
{
lstGroups.Add(spGroup.LoginName);
continue;
}
}
Por favor, sugiere que hacer !!!
Solución
Sugeriría dos cambios.
- Usar
SPFieldUserValue
. No lanza una excepción si el usuario no existe. Utilizar el
SPGroupCollection.GetCollection(int[] ids)
SPUserCollection users = web.SiteUsers; SPGroupCollection groups = web.SiteGroups; foreach (var id in ID) { // try to get user-name SPUser spUser = new SPFieldUserValue(web, Convert.ToInt32(id), null).User; if (spUser != null) { lstUsers.Add(spUser.LoginName); continue; } // try to get group-name var foundGroups = groups.GetCollection(new int[] { Convert.ToInt32(id) }); if (foundGroups.Count > 0) { lstGroups.Add(foundGroups[0]); continue; } // If execution reaches this point: Nothing found with this id }
Otros consejos
Si leo su pregunta correcto: se ha llamado a la lista ID
en el que tiene ID numéricos (ID de usuario y grupo) y desea agregar el nombre del usuario o grupo correspondiente a la ID a otra lista (llamada LSTUSERS o LSTGROUPS).
La excepción es de esperar si la identificación que se maneja es la identificación de un grupo. La función web.SiteUsers.GetById()
Lanza una excepción cuando no se encuentra la identificación dada y eso es lo que intentas primero. Intenta envolverlo en un try-catch
-bloquear.
Prima: Almacene Siteusers y Site Groups en una variable, para evitar obtener esta infominación una y otra vez de la base de datos en cada iteración del bucle.
SPUserCollection users = web.SiteUsers;
SPGroupCollection groups = web.SiteGroups;
foreach (var id in ID)
{
// try to get user-name
try{
SPUser spUser = users.GetByID(Convert.ToInt32(id));
if (spUser != null)
{
lstUsers.Add(spUser.LoginName);
continue;
}
}catch(Exception){
// no user found with id.
}
// try to get group-name
try {
SPGroup spGroup = groups.GetByID(Convert.ToInt32(id ));
if (spGroup != null)
{
lstGroups.Add(spGroup.LoginName);
continue;
}
}catch(Exception){
// no group found with id
}
// If execution reaches this point: Nothing found with this id
}