SharePoint 2010中是否有任何方法可以在所有用户中获取属性的Distinct值?例如,我想要一个Profile Store中所有部门的列表。
在SQL中我可以做到
SELECT DISTINCT(PropertyVal) FROM [ProfileDB].[dbo].[UserProfileValue]
WHERE PropertyID = 14
但是访问SQL数据库当然是一个很大的禁忌,所以我想知道对象模型中是否存在某些内容?
请注意,访问SPSite上的用户信息列表不够好,因为只有一小部分用户在该列表中。我想直接从Profile Store中获取它。
答案 0 :(得分:0)
博客条目Sharepoint User Profiles介绍了如何从中央配置文件存储中获取所有用户配置文件。 MSDN具有description UserProfileManager类和configuring the user Profile store using the object model。
在所有情况下,似乎都需要SPSite来提供上下文。您应该能够通过传入sharepoint服务器的URL来获取所有配置文件。 UserProfileManager.UserProfiles集合提供对所有用户配置文件的访问权限。
要获取所有用户的配置文件属性的所有不同值,请迭代所有配置文件,提取所需的属性值并将其添加到哈希集。在迭代结束时,hashset保存所有不同的值。
它不会像直接查询数据库那样高效 - 对象模型似乎不是按照您想要的方式对数据进行切片 - 但它会通过官方支持的通道提供结果。 / p>
答案 1 :(得分:0)
所以听起来你有几个选择而且都不理想......
您获取所有配置文件,循环并将唯一值添加到哈希表中以选择不同的值。虽然这也需要很多权限来执行此操作。
将SP添加到数据库并在那里执行,并且可能让Sharepoint团队更改数据库格式。这可能不受支持,但它也可能不太危险,它不像你正在改变表格格式,并且你可以在sharepoint团队确实做出改变的情况下重写sp。
如果我有这个任务,我很可能会创建存储过程
答案 2 :(得分:-1)
我选择了直接查询Sharepoint数据库的方法。不是很好,但实用主义赢了。