/// <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> /// Returns the current search configuration for the specified object level /// </summary> /// <param name="context"></param> /// <param name="searchSettingsObjectLevel"></param> /// <returns></returns> private static string GetSearchConfigurationImplementation(ClientRuntimeContext context, SearchObjectLevel searchSettingsObjectLevel) { SearchConfigurationPortability sconfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsObjectLevel); ClientResult<string> configresults = sconfig.ExportSearchConfiguration(owner); context.ExecuteQueryRetry(); return configresults.Value; }
/// <summary> /// Imports search settings from file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="searchSchemaImportFilePath">Search schema xml file path</param> /// <param name="searchSettingsImportLevel">Search settings import level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ImportSearchSettings(this ClientContext context, string searchSchemaImportFilePath, SearchObjectLevel searchSettingsImportLevel) { if (string.IsNullOrEmpty(searchSchemaImportFilePath)) { throw new ArgumentNullException("searchSchemaImportFilePath"); } SetSearchConfigurationImplementation(context, searchSettingsImportLevel, System.IO.File.ReadAllText(searchSchemaImportFilePath)); }
/// <summary> /// Get all query rules matching the display name in the search level /// </summary> /// <param name="contextSite">The current site collection.</param> /// <param name="displayName">The query rule display name.</param> /// <param name="level">The search level.</param> /// <returns>A list of query rules</returns> public ICollection<QueryRule> GetQueryRulesByName(SPSite contextSite, string displayName, SearchObjectLevel level) { var queryRules = new List<QueryRule>(); // Get all query rules for this level var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(contextSite); var rules = GetQueryRules(searchApp, level, contextSite.RootWeb); if (rules.Contains(displayName)) { queryRules = rules[displayName].ToList(); } return queryRules; }
/// <summary> /// Exports the search settings to file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="exportFilePath">Path where to export the search settings</param> /// <param name="searchSettingsExportLevel">Search settings export level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ExportSearchSettings(this ClientContext context, string exportFilePath, SearchObjectLevel searchSettingsExportLevel) { if (string.IsNullOrEmpty(exportFilePath)) { throw new ArgumentNullException("exportFilePath"); } var searchConfig = GetSearchConfigurationImplementation(context, searchSettingsExportLevel); if (searchConfig != null) { System.IO.File.WriteAllText(exportFilePath, searchConfig, Encoding.ASCII); } else { throw new Exception("No search settings to export."); } }
/// <summary> /// Imports search settings from file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="searchSchemaImportFilePath">Search schema xml file path</param> /// <param name="searchSettingsImportLevel">Search settings import level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ImportSearchSettings(this ClientContext context, string searchSchemaImportFilePath, SearchObjectLevel searchSettingsImportLevel) { if (string.IsNullOrEmpty(searchSchemaImportFilePath)) { throw new ArgumentNullException("searchSchemaImportFilePath"); } #if CLIENTSDKV15 if (searchSettingsImportLevel == SearchObjectLevel.Ssa) { // Reference: https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.portability.searchconfigurationportability_members.aspx throw new Exception("You cannot import customized search configuration settings to a Search service application (SSA)."); } #endif SearchConfigurationPortability searchConfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsImportLevel); // Import search configuration searchConfig.ImportSearchConfiguration(owner, System.IO.File.ReadAllText(searchSchemaImportFilePath)); context.Load(searchConfig); context.ExecuteQuery(); }
/// <summary> /// Exports the search settings to file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="exportFilePath">Path where to export the search settings</param> /// <param name="searchSettingsExportLevel">Search settings export level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ExportSearchSettings(this ClientContext context, string exportFilePath, SearchObjectLevel searchSettingsExportLevel) { if (string.IsNullOrEmpty(exportFilePath)) { throw new ArgumentNullException("exportFilePath"); } SearchConfigurationPortability sconfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsExportLevel); ClientResult<string> configresults = sconfig.ExportSearchConfiguration(owner); context.ExecuteQuery(); if (configresults.Value != null) { string results = configresults.Value; System.IO.File.WriteAllText(exportFilePath, results, Encoding.ASCII); } else { throw new Exception("No search settings to export."); } }
public void ApplySearchSchema(string templatePath, string SPUrl, string tenantAdminUser, string tenantAdminPassword, SearchObjectLevel level) { try { using (ClientContext ctx = new ClientContext(SPUrl)) { ctx.Credentials = new SharePointOnlineCredentials( tenantAdminUser, tenantAdminPassword.GetSecureString()); SearchConfigurationPortability conf = new SearchConfigurationPortability(ctx); SearchObjectOwner owner = new SearchObjectOwner(ctx, level); conf.ImportSearchConfiguration(owner, System.IO.File.ReadAllText(templatePath)); ctx.ExecuteQuery(); } } catch (System.Exception e) { Console.Error.WriteLine($"##vso[task.logissue type=error] Failed to apply search settings with error {e.Message}"); } }
/// <summary> /// Ensure a search result source /// </summary> /// <param name="ssa">The search service application.</param> /// <param name="resultSourceName">The result source name</param> /// <param name="level">The search object level.</param> /// <param name="searchProvider">The search provider for the result source.</param> /// <param name="contextWeb">The SPWeb to retrieve the search context.</param> /// <param name="query">The search query in KQL format.</param> /// <param name="properties">Query properties.</param> /// <param name="overwrite">if set to <c>true</c> [overwrite].</param> /// <param name="isDefaultResultSourceForOwner">Whether this result source will be flagged as the default for the current search owner</param> /// <returns> /// The result source. /// </returns> private static Source InnerEnsureResultSource(SearchServiceApplication ssa, string resultSourceName, SearchObjectLevel level, string searchProvider, SPWeb contextWeb, string query, QueryTransformProperties properties, bool overwrite, bool isDefaultResultSourceForOwner) { var federationManager = new FederationManager(ssa); var searchOwner = new SearchObjectOwner(level, contextWeb); var resultSource = federationManager.GetSourceByName(resultSourceName, searchOwner); if (resultSource != null && overwrite) { federationManager.RemoveSource(resultSource); } if (resultSource == null || overwrite) { resultSource = federationManager.CreateSource(searchOwner); resultSource.Name = resultSourceName; resultSource.ProviderId = federationManager.ListProviders()[searchProvider].Id; resultSource.CreateQueryTransform(properties, query); resultSource.Commit(); if (isDefaultResultSourceForOwner) { federationManager.UpdateDefaultSource(resultSource.Id, searchOwner); } } return resultSource; }
public void ProvisionSearchSchema(string SPUrl, string tenantAdminUser, string tenantAdminPassword, string templatePath, SearchObjectLevel level) { context.ApplySearchSchema(templatePath, SPUrl, tenantAdminUser, tenantAdminPassword, level); }
/// <summary> /// Gets the result source by name using the default search service application /// </summary> /// <param name="site">The site collection.</param> /// <param name="resultSourceName">Name of the result source.</param> /// <param name="scopeOwnerLevel">The level of the scope's owner.</param> /// <returns> /// The corresponding result source. /// </returns> public ISource GetResultSourceByName(SPSite site, string resultSourceName, SearchObjectLevel scopeOwnerLevel) { var serviceApplicationOwner = new SearchObjectOwner(scopeOwnerLevel, site.RootWeb); var context = SPServiceContext.GetContext(site); var searchProxy = context.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy; return searchProxy.GetResultSourceByName(resultSourceName, serviceApplicationOwner); }
/// <summary> /// Deletes the result source. /// </summary> /// <param name="contextSite">Current site collection</param> /// <param name="resultSourceName">Name of the result source.</param> /// <param name="level">The level.</param> public void DeleteResultSource(SPSite contextSite, string resultSourceName, SearchObjectLevel level) { var searchApp = this.GetDefaultSearchServiceApplication(contextSite); var federationManager = new FederationManager(searchApp); var searchOwner = new SearchObjectOwner(level, contextSite.RootWeb); var resultSource = federationManager.GetSourceByName(resultSourceName, searchOwner); if (resultSource != null) { federationManager.RemoveSource(resultSource); } }
/// <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> /// Delete all query rules corresponding to the display name /// </summary> /// <param name="site">The current site collection.</param> /// <param name="displayName">The query rule name.</param> /// <param name="level">The search level.</param> public void DeleteQueryRule(SPSite site, string displayName, SearchObjectLevel level) { // Get all query rules for this level var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(site); var rules = GetQueryRules(searchApp, level, site.RootWeb); var queryRuleCollection = new List<QueryRule>(); if (rules.Contains(displayName)) { queryRuleCollection = rules[displayName].ToList(); } if (queryRuleCollection.Count > 0) { foreach (var queryRule in queryRuleCollection) { rules.RemoveQueryRule(queryRule); } } }
/// <summary> /// Imports search settings from file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="searchSchemaImportFilePath">Search schema xml file path</param> /// <param name="searchSettingsImportLevel">Search settings import level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ImportSearchSettings(this ClientContext context, string searchSchemaImportFilePath, SearchObjectLevel searchSettingsImportLevel) { if (string.IsNullOrEmpty(searchSchemaImportFilePath)) { throw new ArgumentNullException("searchSchemaImportFilePath"); } #if CLIENTSDKV15 if (searchSettingsImportLevel == SearchObjectLevel.Ssa) { // Reference: https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.portability.searchconfigurationportability_members.aspx throw new Exception("You cannot import customized search configuration settings to a Search service application (SSA)."); } #endif SearchConfigurationPortability searchConfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsImportLevel); // Import search configuration searchConfig.ImportSearchConfiguration(owner, System.IO.File.ReadAllText(searchSchemaImportFilePath)); context.Load(searchConfig); context.ExecuteQueryRetry(); }
/// <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> /// Exports the search settings to file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="exportFilePath">Path where to export the search settings</param> /// <param name="searchSettingsExportLevel">Search settings export level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ExportSearchSettings(this ClientContext context, string exportFilePath, SearchObjectLevel searchSettingsExportLevel) { if (string.IsNullOrEmpty(exportFilePath)) { throw new ArgumentNullException(nameof(exportFilePath)); } var searchConfig = GetSearchConfigurationImplementation(context, searchSettingsExportLevel); if (searchConfig != null) { System.IO.File.WriteAllText(exportFilePath, searchConfig, Encoding.ASCII); } else { throw new Exception("No search settings to export."); } }
/// <summary> /// Imports search settings from file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="searchSchemaImportFilePath">Search schema xml file path</param> /// <param name="searchSettingsImportLevel">Search settings import level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ImportSearchSettings(this ClientContext context, string searchSchemaImportFilePath, SearchObjectLevel searchSettingsImportLevel) { if (string.IsNullOrEmpty(searchSchemaImportFilePath)) { throw new ArgumentNullException(nameof(searchSchemaImportFilePath)); } SetSearchConfigurationImplementation(context, searchSettingsImportLevel, System.IO.File.ReadAllText(searchSchemaImportFilePath)); }
/// <summary> /// Delete the search configuration at the specified object level - does not apply to managed properties. /// </summary> /// <param name="context"></param> /// <param name="searchObjectLevel"></param> /// <param name="searchConfiguration"></param> private static void DeleteSearchConfigurationImplementation(ClientRuntimeContext context, SearchObjectLevel searchObjectLevel, string searchConfiguration) { SearchConfigurationPortability searchConfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchObjectLevel); // Delete search configuration searchConfig.DeleteSearchConfiguration(owner, searchConfiguration); context.Load(searchConfig); context.ExecuteQueryRetry(); }
/// <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 matching the display name in the search level /// </summary> /// <param name="contextSite">The current site collection.</param> /// <param name="displayName">The query rule display name.</param> /// <param name="level">The search level.</param> /// <returns>A list of query rules</returns> public ICollection <QueryRule> GetQueryRulesByName(SPSite contextSite, string displayName, SearchObjectLevel level) { var queryRules = new List <QueryRule>(); // Get all query rules for this level var searchApp = this.searchHelper.GetDefaultSearchServiceApplication(contextSite); var rules = GetQueryRules(searchApp, level, contextSite.RootWeb); if (rules.Contains(displayName)) { queryRules = rules[displayName].ToList(); } return(queryRules); }
/// <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> /// 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> /// Sets the search configuration at the specified object level /// </summary> /// <param name="context"></param> /// <param name="searchObjectLevel"></param> /// <param name="searchConfiguration"></param> private static void SetSearchConfigurationImplementation(ClientRuntimeContext context, SearchObjectLevel searchObjectLevel, string searchConfiguration) { #if ONPREMISES if (searchObjectLevel == SearchObjectLevel.Ssa) { // Reference: https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.portability.searchconfigurationportability_members.aspx throw new Exception("You cannot import customized search configuration settings to a Search service application (SSA)."); } #endif SearchConfigurationPortability searchConfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchObjectLevel); // Import search configuration searchConfig.ImportSearchConfiguration(owner, searchConfiguration); context.Load(searchConfig); context.ExecuteQueryRetry(); }
/// <summary> /// Ensure a search result source /// </summary> /// <param name="ssa">The search service application.</param> /// <param name="resultSourceName">The result source name</param> /// <param name="level">The search object level.</param> /// <param name="searchProvider">The search provider for the result source.</param> /// <param name="contextWeb">The SPWeb to retrieve the search context.</param> /// <param name="query">The search query in KQL format.</param> /// <param name="properties">Query properties.</param> /// <param name="overwrite">if set to <c>true</c> [overwrite].</param> /// <param name="isDefaultResultSourceForOwner">Whether this result source will be flagged as the default for the current search owner</param> /// <returns> /// The result source. /// </returns> private static Source InnerEnsureResultSource(SearchServiceApplication ssa, string resultSourceName, SearchObjectLevel level, string searchProvider, SPWeb contextWeb, string query, QueryTransformProperties properties, bool overwrite, bool isDefaultResultSourceForOwner) { var federationManager = new FederationManager(ssa); var searchOwner = new SearchObjectOwner(level, contextWeb); var resultSource = federationManager.GetSourceByName(resultSourceName, searchOwner); if (resultSource != null && overwrite) { federationManager.RemoveSource(resultSource); } if (resultSource == null || overwrite) { resultSource = federationManager.CreateSource(searchOwner); resultSource.Name = resultSourceName; resultSource.ProviderId = federationManager.ListProviders()[searchProvider].Id; resultSource.CreateQueryTransform(properties, query); resultSource.Commit(); if (isDefaultResultSourceForOwner) { federationManager.UpdateDefaultSource(resultSource.Id, searchOwner); } } return(resultSource); }
/// <summary> /// Returns the current search configuration for the specified object level /// </summary> /// <param name="context"></param> /// <param name="searchSettingsObjectLevel"></param> /// <returns></returns> private static string GetSearchConfigurationImplementation(ClientRuntimeContext context, SearchObjectLevel searchSettingsObjectLevel) { SearchConfigurationPortability sconfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsObjectLevel); ClientResult <string> configresults = sconfig.ExportSearchConfiguration(owner); context.ExecuteQueryRetry(); return(configresults.Value); }
/// <summary> /// Sets the search configuration at the specified object level /// </summary> /// <param name="context"></param> /// <param name="searchObjectLevel"></param> /// <param name="searchConfiguration"></param> private static void SetSearchConfigurationImplementation(ClientRuntimeContext context, SearchObjectLevel searchObjectLevel, string searchConfiguration) { #if CLIENTSDKV15 if (searchObjectLevel == SearchObjectLevel.Ssa) { // Reference: https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.portability.searchconfigurationportability_members.aspx throw new Exception("You cannot import customized search configuration settings to a Search service application (SSA)."); } #endif SearchConfigurationPortability searchConfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchObjectLevel); // Import search configuration searchConfig.ImportSearchConfiguration(owner, searchConfiguration); context.Load(searchConfig); context.ExecuteQueryRetry(); }
/// <summary> /// Imports search settings from configuration xml. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="searchConfiguration">Search schema xml file path</param> /// <param name="searchSettingsImportLevel">Search settings import level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ImportSearchSettingsConfiguration(this ClientContext context, string searchConfiguration, SearchObjectLevel searchSettingsImportLevel) { if (string.IsNullOrEmpty(searchConfiguration)) { throw new ArgumentNullException(nameof(searchConfiguration)); } SetSearchConfigurationImplementation(context, searchSettingsImportLevel, searchConfiguration); }
/// <summary> /// Exports the search settings to file. /// </summary> /// <param name="context">Context for SharePoint objects and operations</param> /// <param name="exportFilePath">Path where to export the search settings</param> /// <param name="searchSettingsExportLevel">Search settings export level /// Reference: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.search.administration.searchobjectlevel(v=office.15).aspx /// </param> public static void ExportSearchSettings(this ClientContext context, string exportFilePath, SearchObjectLevel searchSettingsExportLevel) { if (string.IsNullOrEmpty(exportFilePath)) { throw new ArgumentNullException("exportFilePath"); } SearchConfigurationPortability sconfig = new SearchConfigurationPortability(context); SearchObjectOwner owner = new SearchObjectOwner(context, searchSettingsExportLevel); ClientResult <string> configresults = sconfig.ExportSearchConfiguration(owner); context.ExecuteQuery(); if (configresults.Value != null) { string results = configresults.Value; System.IO.File.WriteAllText(exportFilePath, results, Encoding.ASCII); } else { throw new Exception("No search settings to export."); } }