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 !!!

¿Fue útil?

Solución

Sugeriría dos cambios.

  1. Usar SPFieldUserValue. No lanza una excepción si el usuario no existe.
  2. 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
}
Licenciado bajo: CC-BY-SA con atribución
scroll top