Как получить spuser по логину без использования SPWeb.EnsureUser()
Я хочу получить SPUser
Объект по имени пользователя в C#.
В моей программе я получил 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 ответ
Информация о пользователе хранится в списке на корневом сайте семейства сайтов. Когда вы вызываете SPWeb.EnsureUser
он проверяет этот список и добавляет пользователя в этот список, если его там еще нет.
Вы можете получить доступ к этому списку напрямую, чтобы проверить, есть ли у кого-то уже запись. Доступ к списку можно получить через SiteUserInfoList
собственность на SPWeb
объект.
Обратите внимание, что идентификатор записи пользователя в списке информации о пользователе - это номер, который отображается перед ;#
в строковом представлении пользователя.
Все, что сказал, вы уверены, что вам нужно избегать использования SPWeb.EnsureUser
? Он добавляет пользователя в список информации, если у него нет записи в списке, но он автоматически не предоставляет им доступ к сайту, если вас это беспокоит.