Sharepoint PeopleEditor:如何找出返回的用户/组类型?

时间:2011-03-03 13:05:03

标签: c# sharepoint sharepoint-2010

我有一个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更好的方法?

1 个答案:

答案 0 :(得分:5)

使用PrincipalType哈希表中的EntityData值:

string principalType = pickerEntity1.EntityData["PrincipalType"].ToString();

我不记得所有可能的值,但UserSharePointGroup绝对是其中之一。


moontear的评论:

要列出此实体拥有的所有信息,EntityDataElements数组非常有用。对于SPGroup,其中包含SPGroupIDAccountNamePrincipalType


Janis Veinbergs的评论:

它可能包含来自Microsoft.SharePoint.Utilities.SPPrincipalType枚举的值,但我还没有测试过它。

你走了:

[Flags]
public enum SPPrincipalType
{
    None = , 
    User = 1,
    DistributionList = 2,
    SecurityGroup = 4,
    SharePointGroup = 8,
    All = SharePointGroup | SecurityGroup | DistributionList | User, 
}