2011-02-09 56 views
1

我從客戶端程序中的SharePoint列表中檢索名稱列表。名稱從SharePoint中的名稱選擇器填充。在從列表中查詢返回的XML,列表如下:如何通過使用SP Web服務的「友好名稱」獲取SharePoint用戶配置文件?

"#10;#Some Name;#12;#Another Name;#15;#Yet AnotherName" 

我的程序需要得到每個用戶的賬戶名(或電子郵件地址)。我可以使用GetUserProfileByName("domain\\username"),但我沒有帳戶名稱。我不能做類似GetUserProfileByName("Some Name")的事情,因爲它必須是帳戶名稱。

每個名稱前面的數字是索引或ID,但我不能使用GetUserProfileByIndex(10),因爲我必須管理自己的數據或具有管理員憑據。

所以基本上它提供了兩個重要的信息,但我不能使用它們檢索任何進一步的信息。

+0

你有控制這個名單有名單? – Shoban 2011-02-09 02:55:16

+0

有點。你認爲有辦法改變列表的呈現方式(如提供帳戶名稱而不是全名)? – CMPalmer 2011-02-09 03:03:06

回答

0

我有一個非常混亂的解決方案工作,但我很想聽到一些適當的/優雅的解決方案的想法。

現在我的UserInfo名單上使用GetListItems和創造的ows_ImnNameows_Name項目的字典,然後解析從列表中查詢到名字的字符串,並利用他們作爲查找值。

是一個更好的方法。

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"]; 
    } 
} 
相關問題