2017-01-27 4 views
0

Я хочу получить объект SPUser по имени входа в C#.Как получить spuser по loginname wihtout с помощью SPWeb.EnsureUser()

В моей программе я получил DataTable от SPListItemCollection и попытался получить объект SPUser в цикле foreach.

Вот фрагмент кода, который показывает, как я пытаюсь получить SPUser

SPUser usera = new SPFieldUserValue(web, Convert.ToString(dr["OnlyUser"])).User; 

, но я получил сообщение об ошибке о:

Значение не попадает в ожидаемый диапазон

Ошибка возникает из-за того, что SPFieldUserValue требует определенного формата ([int];#[domain]\[username]). Я потерпел неудачу, потому что он возвращает имя пользователя только из DataTable.

Следовательно, кто-нибудь знает, как получить spuser obj по имени loginName, не используя SPWeb.EnsureUser(), потому что это добавит пользователя на сайт, если он еще не добавлен.

+1

Какая версия sharepoint мы говорим? 2010, 2013, 2016? И почему не 'SPUser usera = web.Users [dr [" OnlyUSer "]]' не работает? – Marco

ответ

0

Информация о пользователе хранится в списке в корневом сайте семейства сайтов. Когда вы вызываете SPWeb.EnsureUser, он проверяет этот список и добавляет пользователя в этот список, если он еще не существует.

Вы можете получить доступ к этому списку напрямую, чтобы проверить, есть ли у кого-то запись. Доступ к списку возможен через свойство SiteUserInfoList на объекте SPWeb.

Обратите внимание, что идентификатор записи пользователя в списке сведений о пользователе - это номер, который отображается перед ;# в строчном представлении пользователя.

Все, что сказал, вы уверены, что вам нужно избегать использования SPWeb.EnsureUser? Он добавляет пользователя в список информации, если у них нет записи в списке, но он не автоматически предоставляет им доступ к сайту, если это вас беспокоит.