Как проверить, существует ли пользователь с определенным идентификатором? - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно перебрать все строки в таблице, которые содержат пользовательское поле.Я должен восстановить этих пользователей и делать с ними неприятные вещи:

private void GetUsrInfo(FieldUserValue user, ClientContext clientContext) {
    int id=user.LookupId;

    Web web = clientContext.Web;
    User spuser = web.GetUserById(id);
    clientContext.Load(spuser);
    clientContext.ExecuteQuery();
    Mail = spuser.Email;
}

Это работает.Однако это «старые» записи, и многие из них даже не существуют.Поле пользователя по-прежнему содержит данные об этом заброшенном пользователе, но когда я пытаюсь получить данные пользователя с помощью GetUserById(), я получаю следующее исключение:

Microsoft.SharePoint.Client.ServerException: Userне может быть найденследующему пользователю.Но это плохо и очень медленно.Есть ли более умный способ?Что-нибудь вроде "if web.UserExists (id) ..." ?

1 Ответ

0 голосов
/ 04 июня 2018

РЕДАКТИРОВАТЬ

Один из возможных способов проверить, существует ли пользователь, без выдачи ошибки или создания нового пользователя (как результат метода web.EnsureUser(@"domain\username")), заключается в загрузкеполная коллекция пользователей локально и использование оператора LINQ для поиска пользователя по Id.

Например:

UserCollection collUser = ctx.Web.SiteUsers;
ctx.Load(collUser);
ctx.ExecuteQuery();
var user = collUser.Cast<User>().FirstOrDefault(u => u.Id == 1);
if (null != user)
{           
    Console.WriteLine("User: {0} Login name: {1} Email: {2}",
            user.Title, user.LoginName, user.Email);
}       

Если есть запись с идентификатором == 1, она будет возвращена, если нет, возвращаемое значение будет нулевым.

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

Ссылка: Csom или отдых для проверки пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...