Самый простой способ получить Spuser или Spgroup от ID в SharePoint2010
-
22-10-2019 - |
Вопрос
Я застрял в проблеме, в которой у меня есть идентификатор списка - список идентификаторов, я должен найти логин -имя SPUSER или SPGROUP с идентификатором в ListID
Я попробовал следующее, но это забросило исключение, поскольку он не нашел пользователя, когда там есть идентификатор группы
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;
}
}
Пожалуйста, предложите, что делать !!!
Решение
Я бы предложил два изменения.
- Использовать
SPFieldUserValue
. Анкет Это не бросает исключение, если пользователь не существует. Использовать
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 }
Другие советы
Если я правильно прочитал ваш вопрос: у вас есть список ID
в котором у вас есть числовые идентификаторы (идентификаторы пользователя и группы), и вы хотите добавить имя пользователя или группы, соответствующего идентификатору другому списку (называемым LSTUSERS или LSTGROUPS).
Исключение следует ожидать, если обрабатывается идентификатор, является идентификатором группы. Функция web.SiteUsers.GetById()
бросает исключение, когда данный идентификатор не найден, и это то, что вы попробуете в первую очередь. Попробуйте завернуть его в try-catch
-блокировать.
Бонус: Храните сайта -сайта и группы сайтов в переменной, чтобы не получить эту информацию снова и снова из базы данных в каждой итерации петли.
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
}