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



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

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

这行得通。然而,这些都是"旧"条目,其中许多人甚至不再存在。user-字段仍然包含现在被遗弃的用户的数据,但是当我尝试通过GetUserById()检索用户数据时,我检索了以下异常:

Microsoft.SharePoint.Client.ServerException:找不到用户。
在 Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream 响应流( 在 Microsoft.SharePoint.Client.ClientRequest.ProcessResponse((

目前,我只是捕获这些异常并继续下一个用户。 但这很糟糕,而且非常缓慢。 有没有更聪明的方法?任何类似"如果网络。UserExists(id(...">

编辑

在不引发错误或创建新用户(作为web.EnsureUser(@"domainusername")方法的结果(的情况下检查用户是否存在的一种可能方法是在本地加载完整的用户集合,并使用 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 或 rest 以验证用户

相关内容

  • 没有找到相关文章

最新更新