我在用户配置文件中创建了一个自定义属性。我想搜索所有用户配置文件并输出自定义属性包含特定字符串的配置文件
例如:
用户 1 - 自定义属性值为 1,2,3User2 - 2,4,5 中的自定义属性值用户 3- 自定义属性值为 4,6,8
我想输出自定义属性包含 2 的所有配置文件(使用 C# 代码(
所以输出应该有用户 1 和用户 2
有人可以建议实现它的最佳方法吗?我确实在互联网上找到了一些使用关键字搜索搜索用户配置文件的链接,但不确定这些方法是否可用于搜索自定义属性。示例:https://www.collaboris.com/how-to-use-search-keywordquery-to-query-user-profiles-in-sharepoint/
我正在使用 SharePoint 2013
我们最终将添加到用户配置文件的自定义属性提升为托管属性。此外,似乎我们可以对托管属性进行通配符搜索,因此我们进行诸如"CustomProperty:*,2,*"之类的人员搜索,以便它将返回在其用户配置文件的自定义属性中具有数字 2 的所有用户配置文件
有趣的是,通配符仅适用于 FirstName 等 OOTB 属性的末尾,因此我们不能做像 FirstName:oh 这样的事情,并期望它会返回 John Doe 的个人资料但我们当然可以这样做 - FirstName:joh* 这将返回所有名字以 Joh 开头的人(包括 John Doe(
但似乎通配符在自定义托管属性的开头和结尾都有效(这对我们有很大帮助(
关于如何使用 c# 返回搜索结果,我们使用了这个-
private DataTable GetPeople(SPSite spSite, string queryText)
{
var keywordQuery = new KeywordQuery(spSite)
{
QueryText = queryText,
KeywordInclusion = KeywordInclusion.AllKeywords,
SourceId = System.Guid.Parse("b09a7990-05ea-4af9-81ef-edfab16c4e31")
};
keywordQuery.RowLimit = this.MaxProfilesToDisplay;
keywordQuery.SelectProperties.Add("AccountName");
keywordQuery.SelectProperties.Add("PictureURL");
SearchExecutor e = new SearchExecutor();
ResultTableCollection rt = e.ExecuteQuery(keywordQuery);
var tab = rt.Filter("TableType", KnownTableTypes.RelevantResults);
var result = tab.FirstOrDefault();
DataTable DT = result.Table;
return DT;
}
我们会像这样调用它
DataTable dt = GetPeople(SPContext.Current.Site, "CustomProperty:*,2,*" );