moyen le plus simple pour obtenir SPUser ou SP Groupe iD en 2010 sharepoint
-
22-10-2019 - |
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 !!!
La solution
Je suggère deux changements.
- Utilisez
SPFieldUserValue
. Il ne jette pas une exception si l'utilisateur ne exist. -
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
}