Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
        /// <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;
        }
Exemplo n.º 3
0
        /// <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));

        }
Exemplo n.º 4
0
        /// <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;
        }
Exemplo n.º 5
0
        /// <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.");
            }
        }
Exemplo n.º 6
0
        /// <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();
        }
Exemplo n.º 7
0
        /// <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.");
            }
        }
Exemplo n.º 8
0
        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}");
            }
        }
Exemplo n.º 9
0
        /// <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;
        }
Exemplo n.º 10
0
 public void ProvisionSearchSchema(string SPUrl, string tenantAdminUser, string tenantAdminPassword, string templatePath, SearchObjectLevel level)
 {
     context.ApplySearchSchema(templatePath, SPUrl, tenantAdminUser, tenantAdminPassword, level);
 }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
        /// <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);
            }
        }
Exemplo n.º 13
0
        /// <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;
        }
Exemplo n.º 14
0
        /// <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);
                }
            }
        }
Exemplo n.º 15
0
        /// <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();
        }
Exemplo n.º 16
0
        /// <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));
        }
Exemplo n.º 17
0
        /// <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.");
            }
        }
Exemplo n.º 18
0
        /// <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));
        }
Exemplo n.º 19
0
        /// <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();
        }
Exemplo n.º 20
0
        /// <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);
        }
Exemplo n.º 21
0
        /// <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);
        }
Exemplo n.º 22
0
        /// <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)));
        }
Exemplo n.º 23
0
        /// <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);
        }
Exemplo n.º 24
0
        /// <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();
        }
Exemplo n.º 25
0
        /// <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);
        }
Exemplo n.º 26
0
        /// <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);
        }
Exemplo n.º 27
0
        /// <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();
        }
Exemplo n.º 28
0
 /// <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);
 }
Exemplo n.º 29
0
        /// <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.");
            }
        }