如何检查具有特定ID的用户是否存在?

时间:2018-06-01 09:41:12

标签: sharepoint csom sharepoint-apps

我必须遍历包含用户字段的表中的所有行。我必须检索这些用户并用它们做些讨厌的事情:

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

这很有效。然而,这些是#34; old"条目和许多这些人甚至不再存在。用户字段仍包含现已放弃的用户的数据,但当我尝试通过GetUserById()检索用户数据时,我检索到以下异常:

  

Microsoft.SharePoint.Client.ServerException:找不到用户。
  在   Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(流   responseStream)at   Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()

目前我只是抓住这些例外并继续下一个用户。 但这很糟糕而且很慢。 有更聪明的方法吗?像"如果web.UserExists(id)..."

1 个答案:

答案 0 :(得分:1)

修改

检查用户是否存在,不抛出错误或创建新用户(作为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);
}       

如果存在ID == 1的记录,则返回该记录,否则返回值将为null。

根据站点中的用户数量,这可能存在性能问题,但是,根据您希望生成检查用户ID的异常数量,此解决方案可能是可行的。

参考:Csom or rest to verify user