使用代码将术语固定到 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");
}
}
}