Question

Je suis collé à un problème où j'ai une liste ID - liste des Ids je dois trouver le LoginName de SPUser ou SPGroup avec l'identifiant dans le ListID

i essayé ce qui suit, mais il threws exception, car il n'a pas trouvé l'utilisateur lorsque l'identifiant de groupe est là

              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;

                    }

                }

S'il vous plaît suggérer quoi faire !!!

Était-ce utile?

La solution

Je suggère deux changements.

  1. Utilisez SPFieldUserValue. Il ne jette pas une exception si l'utilisateur ne exist.
  2. Utilisez le 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
    }
    

Autres conseils

Si je lis votre bonne question: Vous avez la liste appelée ID dans laquelle vous avez Ids numériques (ids utilisateur et groupe) et que vous souhaitez ajouter le nom de l'utilisateur ou d'un groupe correspondant à l'identifiant à une autre liste (appelés lstUsers ou lstGroups).

L'exception est à prévoir si l'identifiant est manipulé est l'identifiant d'un groupe. La web.SiteUsers.GetById() fonction lève une exception lorsque l'identifiant donné est introuvable et est ce que vous essayez d'abord. Essayez d'envelopper dans un try-catch bloc.

Bonus:. SiteUsers de magasin et SiteGroups dans une variable, pour éviter d'être cette infomation encore et encore de la base de données dans chaque itération de la boucle

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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top