Sie erhalten die Spalte, die als FieldUserValue aus der Liste, sobald Sie, dass Sie die Lookup-ID-Wert verwenden und dann Abfrage der Seiten User Info-Liste. Im folgenden Beispiel cache ich die Ergebnisse, um zu verhindern, dass dieselbe ID mehr als einmal nachgeschlagen wird, da die Abfrage teuer sein kann.
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;
}
mit ctx.Web.EnsureUser arbeitete wie ein Charme ... – onzur
LOOKUPVALUE gibt mir Namen angezeigt werden und nicht Login-Namen. –