如何检查具有特定ID的用户是否存在?
How to check if user with a specific ID exists?
我必须遍历 table 中包含用户字段的所有行。我必须找回那些用户并对他们做下流的事情:
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;
}
这行得通。然而,这些是 "old" 个条目,其中很多人甚至已经不存在了。用户字段仍然包含现在被放弃的用户的数据,但是当我尝试通过 GetUserById()
检索用户数据时,我检索到以下异常:
Microsoft.SharePoint.Client.ServerException: User cannot be found.
at
Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream
responseStream) at
Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
目前我只是捕获这些异常并继续处理下一个用户。
但这很糟糕而且很慢。
有没有更聪明的方法? "if web.UserExists(id)..."?
编辑
检查用户是否存在而不引发错误或创建新用户(作为 web.EnsureUser(@"domain\username")
方法的结果)的一种可能方法是在本地加载完整的用户集合并使用通过 Id 查找用户的 LINQ 语句。
例如:
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 的记录,它将被 return 编辑,否则 return 值将为空。
根据站点中的用户数量,这可能会带来性能问题,但是,根据您预计在检查用户 ID 时产生的异常数量,此解决方案可能是可行的。
我必须遍历 table 中包含用户字段的所有行。我必须找回那些用户并对他们做下流的事情:
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;
}
这行得通。然而,这些是 "old" 个条目,其中很多人甚至已经不存在了。用户字段仍然包含现在被放弃的用户的数据,但是当我尝试通过 GetUserById()
检索用户数据时,我检索到以下异常:
Microsoft.SharePoint.Client.ServerException: User cannot be found.
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream) at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
目前我只是捕获这些异常并继续处理下一个用户。 但这很糟糕而且很慢。 有没有更聪明的方法? "if web.UserExists(id)..."?
编辑
检查用户是否存在而不引发错误或创建新用户(作为 web.EnsureUser(@"domain\username")
方法的结果)的一种可能方法是在本地加载完整的用户集合并使用通过 Id 查找用户的 LINQ 语句。
例如:
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 的记录,它将被 return 编辑,否则 return 值将为空。
根据站点中的用户数量,这可能会带来性能问题,但是,根据您预计在检查用户 ID 时产生的异常数量,此解决方案可能是可行的。