private static NavigationTermSet GetEditableNavigationTermSetByProviderName( Web web, ClientRuntimeContext context, String providerName) { // Get the current taxonomy session and update cache, just in case TaxonomySession taxonomySession = TaxonomySession.GetTaxonomySession(web.Context); taxonomySession.UpdateCache(); context.ExecuteQueryRetry(); // Retrieve the Navigation TermSet for the current web NavigationTermSet navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(web.Context, web, providerName, true); context.Load(navigationTermSet); context.ExecuteQueryRetry(); // Retrieve an editable TermSet for the current target navigation NavigationTermSet editableNavigationTermSet = navigationTermSet.GetAsEditable(taxonomySession); context.Load(editableNavigationTermSet); context.ExecuteQueryRetry(); return(editableNavigationTermSet); }
public void ConfigureTaxonomyNavigation() { using (SPSite site = new SPSite(TestConfig.ServerUrl)) { using (SPWeb web = site.OpenWeb()) { TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true); NavigationTermSet termSet = DemoUtilities.RecreateSampleNavTermSet( this.TestContext, taxonomySession, web); // Clear any old settings. WebNavigationSettings webNavigationSettings = new WebNavigationSettings(web); webNavigationSettings.ResetToDefaults(); webNavigationSettings.Update(taxonomySession); TaxonomyNavigation.FlushSiteFromCache(site); this.WaitForSync(); // Verify the TermSet object is not running. NavigationTermSet actualTermSet; actualTermSet = TaxonomyNavigation.GetTermSetForWeb(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, includeInheritedSettings: true); Assert.IsTrue(actualTermSet == null); // Assign the new settings. webNavigationSettings = new WebNavigationSettings(web); // GlobalNavigation = top menu (aka "top nav") // CurrentNavigation = left menu (aka "quick launch") webNavigationSettings.GlobalNavigation.Source = StandardNavigationSource.TaxonomyProvider; webNavigationSettings.GlobalNavigation.TermStoreId = termSet.TermStoreId; webNavigationSettings.GlobalNavigation.TermSetId = termSet.Id; webNavigationSettings.Update(taxonomySession); TaxonomyNavigation.FlushSiteFromCache(site); this.WaitForSync(); actualTermSet = TaxonomyNavigation.GetTermSetForWeb(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, includeInheritedSettings: true); Assert.AreEqual(termSet.Id, actualTermSet.Id); } } }
private IEnumerable <NavigationNode> GetGlobalNavigationTaxonomyNodes(SPWeb web, NavigationQueryParameters queryParameters, IEnumerable <NavigationTerm> navigationTerms = null) { // If navigation terms is null, fetch this initial terms from the taxonomy navigation term set if (navigationTerms == null) { var nodeMatchingSettings = queryParameters.NodeMatchingSettings; if ((nodeMatchingSettings != null) && nodeMatchingSettings.RestrictToCurrentNavigationLevel) { navigationTerms = TaxonomyNavigationContext.Current.NavigationTerm.Parent.Terms; } else { // Create view to return all navigation terms var view = new NavigationTermSetView(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true); // Navigation termset might be null when crawling if (navigationTermSet == null) { return(new NavigationNode[] { }); } navigationTerms = navigationTermSet.GetWithNewView(view).Terms; } } // Gets terms which are not excluded from global navigation // Note: Navigation terms needs to be editable to get the taxonomy term var session = new TaxonomySession(web.Site); var terms = navigationTerms.Where(x => !x.ExcludeFromGlobalNavigation).Select(x => x.GetAsEditable(session)).ToArray(); var nodes = terms.Select(x => new NavigationNode(x)).ToArray(); for (var i = 0; i < terms.Length; i++) { var term = terms[i]; var node = nodes[i]; // If term contains children, recurvise call if (term.Terms.Count > 0) { node.ChildNodes = this.GetGlobalNavigationTaxonomyNodes(web, queryParameters, term.Terms); } } return(nodes); }
/// <summary> /// Get the peer url for a taxonomy navigation page (generated by a term set) /// </summary> /// <param name="currentUrl">The current page url</param> /// <param name="label">The target label to resolve</param> /// <returns>The url of the peer page</returns> public Uri GetPeerCatalogCategoryUrl(Uri currentUrl, VariationLabelInfo label) { // Get current navigation term ID var termId = TaxonomyNavigationContext.Current.NavigationTerm.Id; var labelSiteRelativeUrl = label.TopWebUrl.AbsolutePath; using (var labelWeb = SPContext.Current.Site.OpenWeb(labelSiteRelativeUrl)) { // Create view to return all navigation terms var view = new NavigationTermSetView(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider) { ExcludeTermsByProvider = false }; var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(labelWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true).GetWithNewView(view); // Get the matching label navigation term and return it's friendly URL var navigationTerm = this.navigationHelper.FindNavigationTermById(navigationTermSet.Terms, termId); if (navigationTerm != null) { this.logger.Info( "GetPeerCatalogCategoryUrl: Navigation term found for term id '{0}': '{1}'", termId, navigationTerm.Title); var queryString = string.Empty; // Check if some search keywords are present var searchKeywords = HttpUtility.ParseQueryString(currentUrl.Query).Get("k"); if (!string.IsNullOrEmpty(searchKeywords)) { queryString = "?k=" + HttpUtility.UrlEncode(searchKeywords); } return(new Uri(navigationTerm.GetResolvedDisplayUrl(queryString), UriKind.Relative)); } else { this.logger.Error("GetPeerCatalogCategoryUrl: Navigation term not found for term id '{0}'", termId); return(new Uri( Variations.GetPeerUrl(SPContext.Current.Web, currentUrl.AbsoluteUri, label.Title), UriKind.Relative)); } } }
/// <summary> /// Determines whether the current HTTP request can be resolved to a <see cref="NavigationTermSet"/> object. /// When client is visiting the welcome page of the site where it is set to have a unique managed navigation, /// <see cref="TaxonomyNavigationContext.HasNavigationContext"/> returns *false* even though this page can be referred by the friendly URL resolved by the <see cref="NavigationTermSet"/> object. /// </summary> /// <param name="navigationTermSet">The resolved <see cref="NavigationTermSet"/> object; otherwise *null*.</param> /// <returns>*true* if the current HTTP request can be resolved to a <see cref="NavigationTermSet"/> object.</returns> public static bool IsRequestingNavigationTermSet(out NavigationTermSet navigationTermSet) { if (SPContext.Current != null) { SPWeb currentWeb = SPContext.Current.Web; navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(currentWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true); using (new SPSecurity.GrantAdditionalPermissionsInScope(SPBasePermissions.FullMask)) { if (navigationTermSet != null && navigationTermSet.GetResolvedDisplayUrl(null) == currentWeb.ServerRelativeUrl && SPUrlUtility.CombineUrl(currentWeb.ServerRelativeUrl, currentWeb.RootFolder.WelcomePage) == SPUtility.OriginalServerRelativeRequestPath) { return(true); } } } navigationTermSet = null; return(false); }
/// <summary> /// Gets a <see cref="NavigationTerm"/> object by the specified unique ID. /// </summary> /// <param name="termId">Term unique identifier.</param> /// <returns>A <see cref="NavigationTerm"/> object.</returns> public static NavigationTerm GetNavigationTerm(Guid termId) { if (SPContext.Current != null && termId != Guid.Empty) { SPWeb currentWeb = SPContext.Current.Web; NavigationTermSet navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(currentWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider, true); if (navigationTermSet != null) { TaxonomySession session = new TaxonomySession(currentWeb, false); Term term = navigationTermSet.GetTaxonomyTermSet(session).GetTerm(termId); if (term != null) { using (SPWeb navigationRootWeb = currentWeb.Site.OpenWeb(navigationTermSet.GetResolvedDisplayUrl(null))) { return(NavigationTerm.GetAsResolvedByWeb(term, navigationRootWeb, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider)); } } } } return(null); }
public void ConfigureTaxonomyNavigation() { ClientContext clientContext = new ClientContext(TestConfig.ServerUrl); TaxonomySession taxonomySession = TaxonomySession.GetTaxonomySession(clientContext); taxonomySession.UpdateCache(); NavigationTermSet termSet = DemoUtilities.RecreateSampleNavTermSet( this.TestContext, clientContext, taxonomySession, clientContext.Web); // Clear out any old settings WebNavigationSettings webNavigationSettings = new WebNavigationSettings(clientContext, clientContext.Web); webNavigationSettings.ResetToDefaults(); webNavigationSettings.Update(taxonomySession); TaxonomyNavigation.FlushSiteFromCache(clientContext, clientContext.Site); clientContext.ExecuteQuery(); this.WaitForSync(); // Verify the TermSet is not running NavigationTermSet actualTermSet; ExceptionHandlingScope scope = new ExceptionHandlingScope(clientContext); using (scope.StartScope()) { using (scope.StartTry()) { actualTermSet = TaxonomyNavigation.GetTermSetForWeb(clientContext, clientContext.Web, "GlobalNavigationTaxonomyProvider", includeInheritedSettings: true); } using (scope.StartCatch()) { } } clientContext.ExecuteQuery(); Assert.IsTrue(actualTermSet.ServerObjectIsNull.Value); // Assign the new settings webNavigationSettings = new WebNavigationSettings(clientContext, clientContext.Web); clientContext.Load(webNavigationSettings, w => w.GlobalNavigation, w => w.CurrentNavigation ); clientContext.Load(termSet, ts => ts.TermStoreId, ts => ts.Id ); clientContext.ExecuteQuery(); // GlobalNavigation = top menu (aka "top nav") // CurrentNavigation = left menu (aka "quick launch") webNavigationSettings.GlobalNavigation.Source = StandardNavigationSource.TaxonomyProvider; webNavigationSettings.GlobalNavigation.TermStoreId = termSet.TermStoreId; webNavigationSettings.GlobalNavigation.TermSetId = termSet.Id; webNavigationSettings.Update(taxonomySession); TaxonomyNavigation.FlushSiteFromCache(clientContext, clientContext.Site); clientContext.ExecuteQuery(); this.WaitForSync(); actualTermSet = TaxonomyNavigation.GetTermSetForWeb(clientContext, clientContext.Web, "GlobalNavigationTaxonomyProvider", includeInheritedSettings: true); clientContext.Load(actualTermSet, ts => ts.Id); clientContext.ExecuteQuery(); Assert.AreEqual(termSet.Id, actualTermSet.Id); }
private static void GetFriendlyUrl(string siteUrl, string userName, string password) { //list for saving the urls List <string> retVal = new List <string>(); // get client context ClientContext context = GetUserContext(siteUrl, userName, password); // get web Web web = context.Web; context.Load(web, w => w.Url); context.ExecuteQuery(); //check if the current web is a publishing web PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(context, web); context.Load(pubWeb); context.ExecuteQuery(); if (pubWeb != null) { //retrieve the pages list List pagesList = pubWeb.Web.Lists.GetByTitle("Pages"); context.Load(pubWeb); context.ExecuteQuery(); // build CAML query to get all items in the Pages library CamlQuery camlQuery = new CamlQuery(); camlQuery.ViewXml = "<View Scope='RecursiveAll'></View>"; //get all documents in the list ListItemCollection collListItem = pagesList.GetItems(camlQuery); context.Load(collListItem, items => items.Include( item => item.Id, item => item["Title"], item => item["FileRef"])); //FileRef is the relative Url of the page context.ExecuteQuery(); // get navigation terms var navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(context, web, "GlobalNavigationTaxonomyProvider", true); var allNavigationTerms = navigationTermSet.GetAllTerms(); context.Load(allNavigationTerms, t => t.Include( i => i.TargetUrl, i => i.LinkType, i => i.TaxonomyName, i => i.Parent)); context.ExecuteQuery(); // loop thru' all items in the 'Pages' library if (collListItem.Count > 0) { foreach (ListItem oListItem in collListItem) { //get list item context.Load(oListItem); context.ExecuteQuery(); var navigationTermsForPage = allNavigationTerms.Where( t => t.LinkType == NavigationLinkType.FriendlyUrl && t.TargetUrl.Value.Contains(oListItem["FileRef"].ToString())); //context.Web.EnsureProperty(w => w.Url); foreach (var navTerm in navigationTermsForPage) { var pageUrl = ""; context.Load(navTerm); pageUrl = InsertUrlRecursive(navTerm, pageUrl); Console.WriteLine($"{web.Url}{pageUrl}"); } } } } }