private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, PnPMonitoredScope scope, string parentNodeTitle = null) { foreach (var node in nodes) { var navNode = web.AddNavigationNode( parser.ParseString(node.Title), new Uri(parser.ParseString(node.Url), UriKind.RelativeOrAbsolute), parser.ParseString(parentNodeTitle), navigationType, node.IsExternal); ProvisionStructuralNavigationNodes( web, parser, navigationType, node.NavigationNodes, scope, parser.ParseString(node.Title)); #if !SP2013 if (node.Title.ContainsResourceToken()) { navNode.LocalizeNavigationNode(web, node.Title, parser, scope); } #endif } }
private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, String parentNodeTitle = null) { foreach (var node in nodes) { web.AddNavigationNode( node.Title, new Uri(parser.ParseString(node.Url), UriKind.RelativeOrAbsolute), parentNodeTitle, navigationType, node.IsExternal); ProvisionStructuralNavigationNodes( web, parser, navigationType, node.NavigationNodes, node.Title); } }
private void ProvisionStructuralNavigationNodes(Web web, TokenParser parser, Enums.NavigationType navigationType, Model.NavigationNodeCollection nodes, PnPMonitoredScope scope, string parentNodeTitle = null, string l1ParentNodeTitle = null) { foreach (var node in nodes) { try { string fileUrl = ReplaceFileUniqueToken(web, parser.ParseString(node.Url)); var navNode = web.AddNavigationNode( parser.ParseString(node.Title), new Uri(fileUrl, UriKind.RelativeOrAbsolute), parser.ParseString(parentNodeTitle), navigationType, node.IsExternal, l1ParentNodeTitle: l1ParentNodeTitle ); #if !SP2013 if (node.Title.ContainsResourceToken()) { navNode.LocalizeNavigationNode(web, node.Title, parser, scope); } #endif } catch (ServerException ex) { // If the SharePoint link doesn't exist, provision it as external link // when we provision as external link, the server side URL validation won't kick-in // This handles the "no such file or url found" error WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed_Retry, node.Title), ProvisioningMessageType.Warning); if (ex.ServerErrorCode == -2130247147) { try { string fileUrl = ReplaceFileUniqueToken(web, parser.ParseString(node.Url)); var navNode = web.AddNavigationNode( parser.ParseString(node.Title), new Uri(fileUrl, UriKind.RelativeOrAbsolute), parser.ParseString(parentNodeTitle), navigationType, true, l1ParentNodeTitle: l1ParentNodeTitle ); } catch (Exception innerEx) { WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed, innerEx.Message), ProvisioningMessageType.Warning); } } else { WriteMessage(String.Format(CoreResources.Provisioning_ObjectHandlers_Navigation_Link_Provisioning_Failed, ex.Message), ProvisioningMessageType.Warning); } } ProvisionStructuralNavigationNodes( web, parser, navigationType, node.NavigationNodes, scope, parser.ParseString(node.Title), parentNodeTitle ); } }
private StructuralNavigation GetStructuralNavigation(Web web, WebNavigationSettings navigationSettings, Enums.NavigationType navigationType, ProvisioningTemplate template, ProvisioningTemplateCreationInformation creationInfo) { // By default avoid removing existing nodes var result = new StructuralNavigation { RemoveExistingNodes = false }; Microsoft.SharePoint.Client.NavigationNodeCollection sourceNodes = navigationType == Enums.NavigationType.QuickLaunch ? web.Navigation.QuickLaunch : navigationType == Enums.NavigationType.TopNavigationBar ? web.Navigation.TopNavigationBar : web.LoadSearchNavigation(); if (sourceNodes == null) { return(result); } var clientContext = web.Context; clientContext.Load(web, w => w.ServerRelativeUrl, w => w.Language); clientContext.Load(sourceNodes); clientContext.ExecuteQueryRetry(); var defaultCulture = new CultureInfo((int)web.Language); if (!sourceNodes.ServerObjectIsNull.Value) { result.NavigationNodes.AddRange(from n in sourceNodes.AsEnumerable() select n.ToDomainModelNavigationNode(web, creationInfo.PersistMultiLanguageResources, defaultCulture)); if (creationInfo.PersistMultiLanguageResources) { //need to get nodes and children for any other then default language foreach (var language in template.SupportedUILanguages.Where(c => c.LCID != defaultCulture.LCID)) { var currentCulture = new CultureInfo(language.LCID); clientContext.Load(web, w => w.ServerRelativeUrl); clientContext.Load(sourceNodes); var acceptLanguage = clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"]; clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = currentCulture.Name; clientContext.ExecuteQueryRetry(); if (!sourceNodes.ServerObjectIsNull.Value) { //we dont need to add to result - just extract Titles - to List as we need to var alternateLang = (from n in sourceNodes.AsEnumerable() select n.ToDomainModelNavigationNode(web, creationInfo.PersistMultiLanguageResources, currentCulture)).ToList(); } clientContext.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = acceptLanguage; } } } return(result); }
private void ProvisionStructuralNavigation(Web web, StructuralNavigation structuralNavigation, TokenParser parser, Enums.NavigationType navigationType, bool clearNavigation, PnPMonitoredScope scope) { // Determine the target structural navigation //var navigationType = currentNavigation ? // Enums.NavigationType.QuickLaunch : // Enums.NavigationType.TopNavigationBar; if (structuralNavigation != null) { // Remove existing nodes, if requested if (structuralNavigation.RemoveExistingNodes || clearNavigation) { if (!structuralNavigation.RemoveExistingNodes && !ClearWarningShown) { WriteMessage("You chose to override the template value RemoveExistingNodes=\"false\" by specifying ClearNavigation", ProvisioningMessageType.Warning); ClearWarningShown = true; } web.DeleteAllNavigationNodes(navigationType); } // Provision root level nodes, and children recursively if (structuralNavigation.NavigationNodes.Any()) { ProvisionStructuralNavigationNodes( web, parser, navigationType, structuralNavigation.NavigationNodes, scope ); } } }