Bạn nhận được các cột mà như FieldUserValue từ danh sách, một khi bạn có mà bạn sử dụng giá trị tra cứu id và sau đó truy vấn so với Sites User Info List. Trong ví dụ bên dưới, tôi lưu trữ kết quả để ngăn không cho tìm kiếm cùng một id nhiều hơn một lần vì truy vấn có thể tốn kém.
private readonly Dictionary<int, string> userNameCache = new Dictionary<int, string>();
public string GetUserName(object user)
{
if (user == null)
{
return string.Empty;
}
var username = string.Empty;
var spUser = user as FieldUserValue;
if (spUser != null)
{
if (!userNameCache.TryGetValue(spUser.LookupId, out username))
{
var userInfoList = context.Web.SiteUserInfoList;
context.Load(userInfoList);
var query = new CamlQuery { ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='ID' /><Value Type='int'>" + spUser.LookupId + "</Value></Eq></Where></Query></View>" };
var users = userInfoList.GetItems(query);
context.Load(users, items => items.Include(
item => item.Id,
item => item["Name"]));
if (context.TryExecuteQuery())
{
var principal = users.GetById(spUser.LookupId);
context.Load(principal);
context.ExecuteQuery()
username = principal["Name"] as string;
userNameCache.Add(spUser.LookupId, username);
}
}
}
return username;
}
Nguồn
2010-12-15 01:57:34
sử dụng ctx.Web.EnsureUser làm việc như một nét duyên dáng ... – onzur
LookupValue mang lại cho tôi hiển thị tên và không tên đăng nhập. –