首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SharePoint 2010中使用托管元数据的KeywordQuery显示自定义用户属性?

在SharePoint 2010中使用托管元数据的KeywordQuery显示自定义用户属性?
EN

Stack Overflow用户
提问于 2012-10-17 19:05:00
回答 1查看 5.5K关注 0票数 2

背景:

我正在使用KeywordQuery在SharePoint 2010的自定义2010部件中执行人员搜索。我正在搜索特定的用户配置文件属性。这些属性映射到Search Service应用程序中的托管属性。我想在搜索结果中输出这些属性。这适用于不使用托管元数据的标准属性和自定义用户属性。

问题:

但是,问题是:使用托管元数据术语集的用户配置文件属性不会显示在搜索结果中。我不确定这个问题是否与MM有关,但这似乎是可能的,因为出现了其他自定义属性。关键是搜索本身似乎运行得很好。当我搜索使用MM.的用户配置文件属性时,我得到了预期的人。

相关代码:

在下面的代码中,我使用SelectProperties为我想要显示的属性添加列。自定义属性Regular_Property和MM_Property都是托管属性。然而,在这两个中,只有Regular_Property出现在GridView中。在MM_Property上搜索,例如keywordQueryText = MM_Property:"Some Value",似乎工作得很好。

代码语言:javascript
复制
private void ExecuteKeywordQuery(string keywordQueryText)
        {
            SearchServiceApplicationProxy SSAProxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.
               GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));

            KeywordQuery keywordQuery = new KeywordQuery(SSAProxy);
            keywordQuery.ResultsProvider = SearchProvider.Default;
            keywordQuery.QueryText = keywordQueryText;
            keywordQuery.ResultTypes |= ResultType.RelevantResults; 
            //keywordQuery.ResultTypes = ResultType.RelevantResults;
            keywordQuery.HiddenConstraints = "scope:\"People\"";
            //keywordQuery.KeywordInclusion = KeywordInclusion.AnyKeyword;

            keywordQuery.SelectProperties.Add("Title");
            keywordQuery.SelectProperties.Add("Path");
            keywordQuery.SelectProperties.Add("MobilePhone");
            keywordQuery.SelectProperties.Add("Regular_Property");
            keywordQuery.SelectProperties.Add("MM_Property");


            ResultTableCollection searchResults = keywordQuery.Execute();

            if (searchResults.Exists(ResultType.RelevantResults))
            {
                ResultTable searchResult = searchResults[ResultType.RelevantResults];
                DataTable result = new DataTable();
                result.TableName = "SearchResults";
                result.Load(searchResult, LoadOption.OverwriteChanges); 


                PopulateResultsGrid(result);
            }
private void PopulateResultsGrid(DataTable resultsTable)
        {
            gridSearchResults = new GridView();
            gridSearchResults.DataSource = resultsTable;
            gridSearchResults.DataBind();
            Controls.Add(gridSearchResults);
        }

有人知道怎么做吗?我尝试了无数次尝试重置索引,完全爬行,增量爬行,用户配置文件同步等。它似乎仍然不起作用。

EN

回答 1

Stack Overflow用户

发布于 2012-10-18 17:02:26

我最终找到了答案,答案简单得让人恼火。由于MM_Property是多值的,因此存储在列中的值的数据类型(由result.Columns“MM_Property”.DataType返回)是一个字符串数组,而不是字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12932925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档