コードを使用して用語を 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 オブジェクトを作成し、それらの 1 つを指定した NavigationTermSet オブジェクトに固定します。
ナビゲーション用語セットに用語を固定するには
次のサンプルでは、ナビゲーション用語セットへの用語の固定をテストします。 これは、分類駆動型サイト ナビゲーション メニューの作成など、管理ナビゲーション シナリオで役立つメソッドとプロパティを含む NavigationTermSet オブジェクトを使用します。
このサンプルでは、最初に NavigationTermSet オブジェクトが存在するかどうかを確認します。 存在しない場合、コードによって NavigationTermSet が作成されます。 (既に存在する場合は、新しいコードを作成する前に古いものを削除します)。 次に、コードで選択する 用語 オブジェクトをいくつか作成した後、デモンストレーション用の発行ページ (.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");
}
}
}