/// <summary> /// Creates a query rule object for the search level. /// If the rule already exists, if may be overwritten, depending on /// the QueryRuleInfo upgrade behavior definition (the OverwriteIfAlreadyExists /// flag is false by default). /// </summary> /// <param name="site">The current site collection.</param> /// <param name="queryRuleMetadata">The query rule definition.</param> /// <param name="level">The search level object.</param> /// <returns>The new query rule object.</returns> public QueryRule EnsureQueryRule(SPSite site, QueryRuleInfo queryRuleMetadata, SearchObjectLevel level) { var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(site); var queryRuleManager = new QueryRuleManager(searchApp); var searchOwner = new SearchObjectOwner(level, site.RootWeb); // Build the SearchObjectFilter var searchObjectFilter = new SearchObjectFilter(searchOwner); QueryRuleCollection rules = queryRuleManager.GetQueryRules(searchObjectFilter); QueryRule returnedRule = null; var existingRule = rules.FirstOrDefault(r => r.DisplayName == queryRuleMetadata.DisplayName); if (existingRule != null) { // Deal with upgrade behavior (delete and re-create or return existing) if (queryRuleMetadata.OverwriteIfAlreadyExists) { rules.RemoveQueryRule(existingRule); returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive); } else { returnedRule = existingRule; } } else { // None exist already with that display name, create it returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive); } return(returnedRule); }
/// <summary> /// Creates a query rule object for the search level. /// If the rule already exists, if may be overwritten, depending on /// the QueryRuleInfo upgrade behavior definition (the OverwriteIfAlreadyExists /// flag is false by default). /// </summary> /// <param name="site">The current site collection.</param> /// <param name="queryRuleMetadata">The query rule definition.</param> /// <param name="level">The search level object.</param> /// <returns>The new query rule object.</returns> public QueryRule EnsureQueryRule(SPSite site, QueryRuleInfo queryRuleMetadata, SearchObjectLevel level) { var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(site); var queryRuleManager = new QueryRuleManager(searchApp); var searchOwner = new SearchObjectOwner(level, site.RootWeb); // Build the SearchObjectFilter var searchObjectFilter = new SearchObjectFilter(searchOwner); QueryRuleCollection rules = queryRuleManager.GetQueryRules(searchObjectFilter); QueryRule returnedRule = null; var existingRule = rules.FirstOrDefault(r => r.DisplayName == queryRuleMetadata.DisplayName); if (existingRule != null) { // Deal with upgrade behavior (delete and re-create or return existing) if (queryRuleMetadata.OverwriteIfAlreadyExists) { rules.RemoveQueryRule(existingRule); returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive); } else { returnedRule = existingRule; } } else { // None exist already with that display name, create it returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive); } return returnedRule; }
/// <summary> /// Ensure a search best bet /// </summary> /// <param name="site">The current site collection</param> /// <param name="bestBetDefinition">The best best metadata</param> /// <param name="level">The search object level.</param> /// <returns>The best bet object.</returns> public Microsoft.Office.Server.Search.Query.Rules.BestBet EnsureBestBet(SPSite site, BestBetInfo bestBetDefinition, SearchObjectLevel level) { var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(site); Microsoft.Office.Server.Search.Query.Rules.BestBet bestBet = null; var queryRuleManager = new QueryRuleManager(searchApp); var searchOwner = new SearchObjectOwner(level, site.RootWeb); // Build the SearchObjectFilter var searchObjectFilter = new SearchObjectFilter(searchOwner); var bestBets = queryRuleManager.GetBestBets(searchObjectFilter); if (!bestBets.Contains(bestBetDefinition.Url)) { bestBet = bestBets.CreateBestBet( bestBetDefinition.Title, bestBetDefinition.Url, bestBetDefinition.Description, bestBetDefinition.IsVisualBestBet, bestBetDefinition.DeleteIfUnused); } else { bestBet = bestBets[bestBetDefinition.Url]; } return(bestBet); }
/// <summary> /// Ensure a search best bet /// </summary> /// <param name="site">The current site collection</param> /// <param name="bestBetDefinition">The best best metadata</param> /// <param name="level">The search object level.</param> /// <returns>The best bet object.</returns> public Microsoft.Office.Server.Search.Query.Rules.BestBet EnsureBestBet(SPSite site, BestBetInfo bestBetDefinition, SearchObjectLevel level) { var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(site); Microsoft.Office.Server.Search.Query.Rules.BestBet bestBet = null; var queryRuleManager = new QueryRuleManager(searchApp); var searchOwner = new SearchObjectOwner(level, site.RootWeb); // Build the SearchObjectFilter var searchObjectFilter = new SearchObjectFilter(searchOwner); var bestBets = queryRuleManager.GetBestBets(searchObjectFilter); if (!bestBets.Contains(bestBetDefinition.Url)) { bestBet = bestBets.CreateBestBet( bestBetDefinition.Title, bestBetDefinition.Url, bestBetDefinition.Description, bestBetDefinition.IsVisualBestBet, bestBetDefinition.DeleteIfUnused); } else { bestBet = bestBets[bestBetDefinition.Url]; } return bestBet; }