我有一个PeopleEditor:
<SharePoint:PeopleEditor ID="peopleEdit" ... SelectionSet="User,DL,SecGroup,SPGroup" />
它在页面上完美运行,即我可以选择AD用户,Sharepoint组以及我想要的任何内容。
问题是我无法在PeopleEditor上找到返回什么类型的用户/组的属性。我们来看下面的例子:
//User: John Doe - mycompany\jondoe is at position 0
//Sharepoint group: "All Site Users" is at position 1
PickerEntity pickerEntity1 = (PickerEntity).peopleEdit.ResolvedEntities[1];
// pickerEntity1.Key = "All Site Users"
// pickerEntity1.Claim = null
// pickerEntity1.DisplayText = "All Site Users"
PickerEntity pickerEntity0 = (PickerEntity).peopleEdit.ResolvedEntities[0];
// pickerEntity1.Key = "mycompany\jondoe"
// pickerEntity1.Claim = null
// pickerEntity1.DisplayText = "Doe, John"
我可以做一些“hackish”事情,例如尝试将返回的字符串[sic]值转换为User或Group,并执行某种基于Exception的程序流程(如果用户存在,请执行此操作,否则如果组存在等等。),但我不会考虑干净的代码。
在Sharepoint中选择人员/群组是否有更好的方法,或者使用PeopleEditor更好的方法?
答案 0 :(得分:5)
使用PrincipalType
哈希表中的EntityData
值:
string principalType = pickerEntity1.EntityData["PrincipalType"].ToString();
我不记得所有可能的值,但User
和SharePointGroup
绝对是其中之一。
moontear的评论:
要列出此实体拥有的所有信息,EntityDataElements
数组非常有用。对于SPGroup
,其中包含SPGroupID
,AccountName
,PrincipalType
。
Janis Veinbergs的评论:
它可能包含来自Microsoft.SharePoint.Utilities.SPPrincipalType
枚举的值,但我还没有测试过它。
你走了:
[Flags]
public enum SPPrincipalType
{
None = ,
User = 1,
DistributionList = 2,
SecurityGroup = 4,
SharePointGroup = 8,
All = SharePointGroup | SecurityGroup | DistributionList | User,
}