2

特定のプロパティの管理プロパティのリストを単純にチェックしようとしています。理論的には、難しくありません。実際には、それは私に問題を引き起こすことが証明されています. 私が見つけた最初のアプローチは次のとおりです。

static void Main(string[] args)
    {
     try
      {
        string strURL = "http://<SiteName>";
        Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
        ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
        foreach (ManagedProperty property in properties)
         {
           if (property.Name.Equals("ContentType")
            {
              Console.WriteLine(property.Name);
            }
         }
       }
     catch(Exception ex)
        {
          Console.WriteLine(ex.ToString());
        }
    }

これはまさに私が望んでいたものを取り戻しました。ただし、これに関する問題は、Visual Studio 2012SearchContextが廃止され、非推奨であり、SearchServiceApplication代わりに使用する必要があることです。そこで、さらに検索を行ったところ、次のことがわかりました。

SPServiceContext context = SPServiceContext.GetContext(SPServiceApplicationProxyGroup.Default, SPSiteSubscriptionIdentifier.Default);// Get the search service application proxy
    var searchProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy;

    if (searchProxy != null)
    {
        SearchServiceApplicationInfo ssai = searchProxy.GetSearchServiceApplicationInfo();

        var application = SearchService.Service.SearchApplications.GetValue<SearchServiceApplication>(ssai.SearchServiceApplicationId);

        var schema = new Schema(application);
        ManagedPropertyCollection properties = schema.AllManagedProperties;
        foreach (ManagedProperty property in properties)
        {
         if (property.Name.Equals("ContentType")
         {
          Console.WriteLine(property.Name);
         }
        }
    }

これで私が遭遇する問題はEndpointNotFoundException. 最初の方法はすべてをうまく見つけることができるので、2番目のオプションを間違って設定しているだけだと思います。私が見逃している明らかに間違っていることに誰かが光を当てることができますか? ヒント/ヒントをいただければ幸いです。

4

1 に答える 1

2

このコードのチャンクは、あなたが望むものを得るはずです。

foreach (SPService service in SPFarm.Local.Services)
{
    if (service is SearchService)
    {
        SearchService searchService = (SearchService)service;

        foreach (SearchServiceApplication ssa in searchService.SearchApplications)
        {
            Schema schema = new Schema(ssa);

            foreach (ManagedProperty property in schema.AllManagedProperties)
            {
                if (property.Name == "ContentType")
                {
                    //Handle here
                }
            }
        }
    }
}
于 2012-10-17T21:42:57.047 に答える