SharePoint物件模式獲取“使用者或使用者組”欄的值
阿新 • • 發佈:2019-01-31
harePoint的People Picker控制元件真的是非常好用的一個東東。
但是,如果您需要輸出某一個“使用者或使用者組”欄的值時,就顯得有點麻煩了。
- 如果您採用item["***"].ToString()這樣的形式的話,輸出的每一個人或組的資訊前都有N#這樣的符號。
很顯然,很多時候採用這種方式時,我們不得不對字串進行分析並擷取。 - “使用者或使用者組”型別的在物件模型中,有其對應的型別: SPFieldUser,通過它,我們就可以獲取到某一個
使用者或使用者組欄的物件模型了,如:SPFieldUser uField=item["***"] as SPFieldUser; - “使用者或使用者組”中,您可以輸入使用者,也可以輸入使用者組
- “使用者或使用者組”型別欄的值的獲取實際上是通過SPFieldUserValueCollection和SPFieldUserValue來獲取的,
而SPFieldUserValue指的是某一個人或某一個組。 - SPFieldUserValueCollection的獲取方法 : SPFieldUserValueCollection users=item["欄名"] as SPFieldUser
ValueCollection. 那獲取SPFieldUserValue呢? 當然,您可以通過users的迭代來獲取,但是,某種情況下,這種方法行不通:當你沒有啟用“使用者或使用者 組”這一欄“允許多重選擇”時,通過上述方法獲取的users將為null,可能你會有如下的方法來獲取 SPFieldUserValue user=item["欄名"] as SPFieldUserValue。
唉,我也通過這種方法來獲取,但是非常遺憾的是,系統友好的提示我:此路不通! - 牢 騷:為什麼在“允許多重選擇”的情況下,通過SPFieldUserValueCollection users=item["欄名"] as SPFieldUserValueCollection就可以,而沒啟用的情況下用SPSPFieldUserValue user=item["欄名"] as SPFieldUserValue就行不通呢?這二個用法在針對是否啟用“允許多重選擇”下,是合情合理的啊?不管你怎麼想,它就是行不通。
- 實際上,在沒有“允許多重選擇”的情況下,您得通過SPFieldUserValue的建構函式來初始化一個物件,如:
SPFieldUserValue usere = new SPFieldUserValue(web, item["欄目名"].ToString());
夠折騰人的吧? -
獲得了SPFieldUserValueCollection和SPFieldUserValue物件後,該如何獲取它裡面的使用者或使用者組呢?
獲取使用者:使用SPFieldUserValue的User屬性。
獲取使用者組:當SPFieldUserValue的User屬性為null的時候,通過web.SiteGroups.GetByID(SPFieldUserValue.LookupID)來獲取使用者組。 -
一波三折後,無論是獲取使用者或使用者組(包括獲取使用者組裡的使用者)應該就是手到擒來了。
-
附上一段從欄中獲取使用者的程式碼《沒有作相關的異常或效能優化處理》:
1 public List < SPUser > GetUsersFromSPFieldUser(SPListItem item)
2 {
3 List < SPUser > fUsers = new List < SPUser > ();
4 SPWeb web = item.ParentList.ParentWeb;
5 SPFieldUser uField = item.Fields[ " 作者 " ] as SPFieldUser;
6 if (!uField.AllowMultipleValues) // 允許多重選擇 7 {
8 SPFieldUserValue userValue = new SPFieldUserValue(web, item[ " 作者 " ].ToString());
9 fUsers.Add(userValue.User);
10 } 11 else 12 {
13 SPFieldUserValueCollection userValues = item[ " 作者 " ] as SPFieldUserValueCollection;
14 foreach (SPFieldUserValue userValue in userValues)
15 {
16 if ( null != userValue.User)
17 {
18 fUsers.Add(userValue.User);
19 } 20 else 21 {
22 SPGroup userGroup = web.SiteGroups.GetByID(userValue.LookupID);
23 fUsers.AddRange(userGroup.Users);
24 } 25 } 26 } 27 return fUsers;
28 }