使用代码将术语固定到 SharePoint 中的导航术语集

了解如何使用代码将术语固定到导航术语集。

在分类创建过程中,固定功能是将术语附加到目标。 SharePoint 引入了术语固定。 固定的术语就像是可重用的术语,不同之处在于前者是只读的,不能在术语使用位置上进行更改。

在 SharePoint 托管导航中,API 允许您将新的或现有的术语固定到 NavigationTermSet 对象。 在 Microsoft SharePoint Server 2010 中,用户可以在术语层次结构的其他位置中再用术语(并且所有术语嵌套在再用的术语下)。 再用这些术语后,可以在其他位置中对其进行修改,并且在再用这些术语的任何位置应该能够见到更改。

术语固定要领

若要理解在 SharePoint 中固定,可能想要了解托管元数据、术语、术语集、托管导航、术语库以及其他相关概念和 API。 表 1 描述提供有关固定详细信息的文章。

表 1. 用于固定的核心概念

文章标题 说明
针对 Microsoft SharePoint Server 2010 开发人员的企业元数据管理简介
在对 SharePoint Server 2010 进行编写后,本文章提供有关企业托管编程模型和核心概念(例如术语和术语集)的基本概述。
SharePoint 中的托管导航
SharePoint 中的分类法驱动的托管导航功能的简介。

将代码用于完成固定任务

您可以使用 .NET 服务器, .NET 客户端 (CSOM)、Silverlight 或 JavaScript 编程模型中的自定义代码来完成术语与术语集的固定操作。 以下 .NET 服务器代码示例包括将术语固定到导航术语集的测试,以及可用于测试 Term 对象是否固定到指定的 TermSet 对象的方法。 然后,该测试创建 Term 对象,并将其中一个对象固定到指定的 NavigationTermSet 对象。

将术语固定到导航术语集

  • 以下示例测试如何将术语固定到导航术语集。 它使用 NavigationTermSet 对象,该对象包含用于托管导航方案的方法和属性,例如创建分类驱动的网站导航菜单。

    该示例首先检查 NavigationTermSet 对象是否存在。 如果不存在,则代码将创建 NavigationTermSet。 (如果已存在,则代码会先删除旧代码,然后再创建一个新) 。 然后,在代码创建一些要从中选取的 Term 对象后,它将创建一个发布页面 (.aspx) 文件以供演示,将其设置为固定术语的自定义目标页,然后将某些导航属性固定到该页面。

  
public void TermPinningTest()
        {
using (SPSite site = new SPSite(TestConfig.ServerUrl))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true);

                    // Create the navigation term set.
                    NavigationTermSet menuNavTermSet = DemoUtilities.SetUpSampleNavTermSet(
                        this.TestContext, taxonomySession, web);
                    TermSet menuTaxTermSet = menuNavTermSet.GetTaxonomyTermSet();

                    TermStore termStore = menuTaxTermSet.TermStore;
                    Group group = menuTaxTermSet.Group;

                    // Does the tagging Taxonomy term set already exist?
                    TermSet taggingTaxTermSet = group.TermSets.FirstOrDefault(
                        ts => ts.Id == TestConfig.TaggingTermSetId);

                    if (taggingTaxTermSet != null)
                    {
                        Log("Deleting old tagging term set");

                        // If the tagging Taxonomy term set already exists, delete the old one.
                        taggingTaxTermSet.Delete();
                        termStore.CommitAll();
                    }

                    Log("Creating the tagging term set");

                    taggingTaxTermSet = group.CreateTermSet("Demo Tagging TermSet", TestConfig.TaggingTermSetId);

                    int lcid = termStore.WorkingLanguage;

                    // Create some terms.
                    Term taggingProductsTaxTerm = taggingTaxTermSet.CreateTerm("Products", lcid);
                    taggingProductsTaxTerm.CreateTerm("Electronics", lcid);
                    taggingProductsTaxTerm.CreateTerm("Footwear", lcid);
                    taggingProductsTaxTerm.CreateTerm("Sports", lcid);

                    termStore.CommitAll();

                    /// Pinning the products subtree. Pins the "Products" Term object to the NavigationTermSet object.
                    Term menuProductsTaxTerm = menuTaxTermSet.ReuseTermWithPinning(taggingProductsTaxTerm);
                    termStore.CommitAll();

                    /// Creating the publishing page template DemoTargetPage.aspx");
                    PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);

                    SPListItem pageListItem = null;
                    PublishingPage publishingPage;
                    try
                    {
                        pageListItem = web.GetListItem(web.Url + "/Pages/DemoTargetPage.aspx");
                        publishingPage = PublishingPage.GetPublishingPage(pageListItem);
   
                    }
                    catch (FileNotFoundException)
                    {
                        Log("Creating new target page");
                        publishingPage = publishingWeb.AddPublishingPage("DemoTargetPage.aspx", publishingWeb.DefaultPageLayout);
                        Log("Checking in target page draft");
                        publishingPage.CheckIn("TermPinningTest");
                    }

                    // Set a custom target page for the pinned terms and then set some navigation properties.

                    // Normally the navigation objects are obtained by way of an optimized function such as
                    // TaxonomyNavigation.GetTermSetForWeb() or TaxonomyNavigationContext.Current.NavigationTerm.
                    // The function guarantees that URLs will be resolved using a valid NavigationTerm.View.
                    // But because we are populating totally new data, the cache will probably not be updated
                    // yet, so instead we manually construct a view using GetAsResolvedByWeb().
                    NavigationTerm menuProductsNavTerm = NavigationTerm.GetAsResolvedByWeb(menuProductsTaxTerm,
                        web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider);

                    menuProductsNavTerm.TargetUrl.Value = publishingPage.Uri.AbsolutePath;
                    menuProductsNavTerm.TargetUrlForChildTerms.Value = publishingPage.Uri.AbsolutePath;

                    termStore.CommitAll();

                    Log("TermPinningTest completed successfully");
                }
            }

}

另请参阅