/// <summary> /// Delete a result type in the site collection /// </summary> /// <param name="site">The site</param> /// <param name="resultType">The result type object</param> public void DeleteResultType(SPSite site, ResultTypeInfo resultType) { ResultItemType resType = null; var searchOwner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb); var resultTypeManager = new ResultItemTypeManager(this.GetDefaultSearchServiceApplication(site)); var existingResultTypes = resultTypeManager.GetResultItemTypes(searchOwner, true); // Get the existing result type resType = existingResultTypes.FirstOrDefault(r => r.Name.Equals(resultType.Name)); if (resType != null) { resultTypeManager.DeleteResultItemType(resType); } }
/// <summary> /// Ensure a Result Type in a site collection /// </summary> /// <param name="site">The site collection</param> /// <param name="resultType">The result type info object</param> /// <returns>The result type item</returns> public ResultItemType EnsureResultType(SPSite site, ResultTypeInfo resultType) { var searchOwner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb); var resultSource = this.GetResultSourceByName(site, resultType.ResultSource.Name, resultType.ResultSource.Level); var resultTypeManager = new ResultItemTypeManager(this.GetDefaultSearchServiceApplication(site)); var existingResultTypes = resultTypeManager.GetResultItemTypes(searchOwner, true); // Get the existing result type var resType = existingResultTypes.FirstOrDefault(r => r.Name.Equals(resultType.Name)); if (resType == null) { resType = new ResultItemType(searchOwner); resType.Name = resultType.Name; resType.SourceID = resultSource.Id; resType.DisplayTemplateUrl = resultType.DisplayTemplate.ItemTemplateTokenizedPath; var properties = resultType.DisplayProperties.Select(t => t.Name).ToArray(); resType.DisplayProperties = string.Join(",", properties); resType.RulePriority = resultType.Priority; // Create rules var rules = resultType.Rules.Select( this.CreateCustomPropertyRule) .ToList(); resType.Rules = new PropertyRuleCollection(rules); typeof(ResultItemType).GetProperty("OptimizeForFrequentUse") .SetValue(resType, resultType.OptimizeForFrequenUse); // Add the result type resultTypeManager.AddResultItemType(resType); } return(resType); }
/// <summary> /// Delete a result type in the site collection /// </summary> /// <param name="site">The site</param> /// <param name="resultType">The result type object</param> public void DeleteResultType(SPSite site, ResultTypeInfo resultType) { ResultItemType resType = null; var searchOwner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb); var resultTypeManager = new ResultItemTypeManager(this.GetDefaultSearchServiceApplication(site)); var existingResultTypes = resultTypeManager.GetResultItemTypes(searchOwner, true); // Get the existing result type resType = existingResultTypes.FirstOrDefault(r => r.Name.Equals(resultType.Name)); if (resType != null) { resultTypeManager.DeleteResultItemType(resType); } }
/// <summary> /// Ensure a Result Type in a site collection /// </summary> /// <param name="site">The site collection</param> /// <param name="resultType">The result type info object</param> /// <returns>The result type item</returns> public ResultItemType EnsureResultType(SPSite site, ResultTypeInfo resultType) { var searchOwner = new SearchObjectOwner(SearchObjectLevel.SPSite, site.RootWeb); var resultSource = this.GetResultSourceByName(site, resultType.ResultSource.Name, resultType.ResultSource.Level); var resultTypeManager = new ResultItemTypeManager(this.GetDefaultSearchServiceApplication(site)); var existingResultTypes = resultTypeManager.GetResultItemTypes(searchOwner, true); // Get the existing result type var resType = existingResultTypes.FirstOrDefault(r => r.Name.Equals(resultType.Name)); if (resType == null) { resType = new ResultItemType(searchOwner); resType.Name = resultType.Name; resType.SourceID = resultSource.Id; resType.DisplayTemplateUrl = resultType.DisplayTemplate.ItemTemplateTokenizedPath; var properties = resultType.DisplayProperties.Select(t => t.Name).ToArray(); resType.DisplayProperties = string.Join(",", properties); resType.RulePriority = resultType.Priority; // Create rules var rules = resultType.Rules.Select( this.CreateCustomPropertyRule) .ToList(); resType.Rules = new PropertyRuleCollection(rules); typeof(ResultItemType).GetProperty("OptimizeForFrequentUse") .SetValue(resType, resultType.OptimizeForFrequenUse); // Add the result type resultTypeManager.AddResultItemType(resType); } return resType; }