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

我有一个PeopleEditor:

 

它在页面上完美运行,即我可以选择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?

使用EntityData哈希表中的PrincipalType值:

 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, }