【问题标题】:Displaying Custom User Properties with KeywordQuery that uses Managed Metadata in SharePoint 2010?在 SharePoint 2010 中使用使用托管元数据的 KeywordQuery 显示自定义用户属性?
【发布时间】:2012-10-17 11:04:59
【问题描述】:
背景:

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

问题:

但是,问题是:使用托管元数据术语集的用户配置文件属性未显示在搜索结果中。我不确定问题是否与 MM 有关,但似乎很可能,因为出现了其他自定义属性。更重要的是,搜索本身似乎工作正常。当我搜索使用 MM 的用户个人资料属性时,我得到了预期的人。

相关代码:

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

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);
        }

有人知道如何进行这项工作吗?我在重置索引、完全爬取、增量爬取、用户配置文件同步等方面尝试了无数次。它似乎仍然不起作用。

【问题讨论】:

    标签: c# sharepoint sharepoint-2010


    【解决方案1】:

    我最终想通了,答案很简单。由于 MM_Property 是多值的,存储在列中的值的数据类型(由 result.Columns["MM_Property"].DataType 返回)是字符串数组,而不是字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      相关资源
      最近更新 更多