/// <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> /// Get all query rules for a search level. /// </summary> /// <param name="ssa">The search service.</param> /// <param name="level">The search object level.</param> /// <param name="contextWeb">The SPWeb context.</param> /// <returns>A query rule collection.</returns> private static QueryRuleCollection GetQueryRules(SearchServiceApplication ssa, SearchObjectLevel level, SPWeb contextWeb) { var queryRuleManager = new QueryRuleManager(ssa); var searchOwner = new SearchObjectOwner(level, contextWeb); return(queryRuleManager.GetQueryRules(new SearchObjectFilter(searchOwner))); }
/// <summary> /// Get all query rules for a search level. /// </summary> /// <param name="ssa">The search service.</param> /// <param name="level">The search object level.</param> /// <param name="contextWeb">The SPWeb context.</param> /// <returns>A query rule collection.</returns> private static QueryRuleCollection GetQueryRules(SearchServiceApplication ssa, SearchObjectLevel level, SPWeb contextWeb) { var queryRuleManager = new QueryRuleManager(ssa); var searchOwner = new SearchObjectOwner(level, contextWeb); return queryRuleManager.GetQueryRules(new SearchObjectFilter(searchOwner)); }