我正在从客户端程序中的SharePoint列表中检索名称列表。这些名称是从SharePoint中的名称选择器填充的。在从列表查询返回的XML中,列表如下所示:
"#10;#Some Name;#12;#Another Name;#15;#Yet AnotherName"
我的程序需要获取每个用户的帐户名称(或电子邮件地址)。我可以使用GetUserProfileByName("domain\\username")
,但我没有帐户名称。我不能做GetUserProfileByName("Some Name")
之类的事情,因为它必须是帐户名。
每个名称前面的数字是索引或ID,但我不能使用GetUserProfileByIndex(10)
,因为我必须管理自己的数据或拥有管理员凭据。
所以基本上它提供了两个重要的信息,但我无法使用它们检索任何进一步的信息。
答案 0 :(得分:1)
您确定该号码是一个索引,我认为它可能是该网站集的用户ID。它似乎也是一种奇怪的用户列表,但无论如何:
string result = "#10;#Some Name;#12;#Another Name;#15;#Yet AnotherName";
string[] users = result.Substring(1).Split(new string[2] { ";", "#" }, StringSplitOptions.RemoveEmptyEntries);
for (int j = 0; j < users.Length; j = j + 2) {
using (ClientContext context = new ClientContext("http://yoursite")) {
List list = context.Web.SiteUserInfoList;
ListItem item = list.GetItemById(int.Parse(users[j]));
context.Load(item, i => i.Id, i => i["Name"]);
context.ExecuteQuery();
object username = item["Name"];
}
}
答案 1 :(得分:0)
我有一个非常混乱的解决方案,但我很想听听一些关于正确/优雅解决方案的想法。
现在我在GetListItems
列表中使用UserInfo
并创建ows_ImnName
和ows_Name
条目的字典,然后将列表查询中的字符串解析为命名并将它们用作查找值。
是更好的方法。