我必须遍历包含用户字段的表中的所有行。我必须检索这些用户并用它们做些讨厌的事情:
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)..." ?
答案 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的异常数量,此解决方案可能是可行的。