Самый простой способ получить Spuser или Spgroup от ID в SharePoint2010

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/19778

  •  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;

                    }

                }

Пожалуйста, предложите, что делать !!!

Это было полезно?

Решение

Я бы предложил два изменения.

  1. Использовать SPFieldUserValue. Анкет Это не бросает исключение, если пользователь не существует.
  2. Использовать 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top