次の方法で共有


プログラミングにより SharePoint 2010 サイト ナビゲーションをカスタマイズする (Wrox)

概要: ユーザーが Microsoft SharePoint 2010 サイトを操作する方法のカスタマイズについて説明します。この記事には、サイト上にトップ リンク バーサイド リンク バーを表示し変更する、実際に機能する例を示すコード サンプルが含まれます。

Wrox ロゴ

Wrox SharePoint Books

最終更新日: 2015年3月9日

適用対象: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

この記事の内容
SharePoint でのナビゲーションの概要
ナビゲーション階層を表示する
サイトのナビゲーションにリンクを追加する
サイトのナビゲーションからリンクを削除する
まとめ
著者について

著者: Bryan Phillips

編集者: WROX Tech Editors for SharePoint 2010 Articles

目次

  • SharePoint でのナビゲーションの概要

  • ナビゲーション階層を表示する

  • サイトのナビゲーションにリンクを追加する

  • サイトのナビゲーションからリンクを削除する

  • まとめ

  • 著者について

コードをダウンロードする (英語)

SharePoint でのナビゲーションの概要

ユーザーが求める最も一般的なカスタマイズの一つは、SharePoint 2010 サイトのナビゲーション構造を変更する機能です。SharePoint サイトのナビゲーション要素は、新しいリスト、ライブラリ、およびサブサイトが追加されたときに自動的に更新されますが、ユーザーは、リンクを変更または削除することを求めます。SharePoint ベースのイントラネットあるいはエクストラネット サイトで、ユーザーは、通常、サイトの奥深くに埋め込まれた内部および外部リソースへのリンクを追加します。たとえば、特定の部署やロールを中心とするサイトには、一般的には、複数の、広く分散するリソースへのリンクが含まれます。

図 1 に示すように、ユーザーは、主に、ページの上部にあるトップ リンク バーと、ページの左側にあるサイド リンク バーを使用して SharePoint サイトを操作します。

図 1. トップ リンク バーとサイド リンク バー

トップ リンク バーとサイド リンク バー

サイト タイトルの下の、タブのコレクションが、トップ リンク バーです。ページの左側にある、複数レベルのリンクのリストが、サイド リンク バーです。このセクションでは、ナビゲーション コントロールが表示するリンクを構成する方法と、外部リソースへのリンクを追加する方法について説明します。

SharePoint Foundation 2010 では、SharePoint Server 2010 とは異なるページを使用して、ナビゲーションを編集します。表 1 は、編集するページと、SharePoint 2010 のどのエディションがそれらを使用するかを示します。

表 1. エディションごとのナビゲーションの編集

ナビゲーション コントロール

SharePoint Foundation 2010

SharePoint Server 2010

サイド リンク バー

サイド リンク バー ページ

ナビゲーション設定ページ

トップ リンク バー

トップ リンク バー ページ

ナビゲーション設定ページ

SharePoint Foundation 2010 でナビゲーションを編集する

SharePoint Foundation 2010 で [サイトの設定] ページから、いくつかのその他のページにアクセスし、サイトのナビゲーションを編集できます。[サイトの設定] ページを開くには、[サイトの操作]、[サイトの設定] の順にクリックします。

最初のページは、サイド リンク バー ページです。サイド リンク バー ページにアクセスするには、[サイトの設定] ページの [外観] セクションでサイド リンク バーリンクをクリックします。見出しとリンクは、サイド リンク バーに表示されるとおりに表示されます。見出しあるいはリンクを編集するには、編集するアイテムの左にある編集アイコンをクリックします。[新しい見出し] リンクをクリックすると、最上位レベルに新しい見出しが追加されます。見出しの下に新しいリンクを追加するには、[新しいナビゲーション リンク] をクリックします。見出しとリンクの順序を変えるには、[順序の変更] をクリックします。

図 2. サイド リンク バー

サイド リンク バー

次のページは、サイトのトップ リンク バーにあるタブを示すトップ リンク バー ページです。このページにアクセスするには、[サイトの設定] ページの [外観] セクションで、トップ リンク バーをクリックします。タブを編集するには、タブの左にある編集アイコンをクリックします。新しいタブを作成するには、[新しいナビゲーション リンク] をクリックします。[順序の変更] をクリックして、タブの順序を変えることができます。

注意

サイド リンク バートップ リンク バーページのリンクは、SharePoint Foundation 2010 にのみ表示されます。SharePoint Server 2010 は、次のセクションで説明する、ナビゲーション設定ページを使用します。

図 3. トップ リンク バー

トップ リンク バー

SharePoint Server 2010 でナビゲーションを編集する

SharePoint Server 2010 のナビゲーション設定ページは、単一のページに、サイド リンク バーおよびトップ リンク バーのページの機能を結合しています。ナビゲーション設定ページにアクセスするには、[サイトの設定] ページの [外観] セクションで [ナビゲーション] をクリックします。[トップ リンク バーが] 自動的に更新する方法を構成するには、[グローバル ナビゲーション] セクションを使用します。ラジオ ボタンにより、サイトが、その親サイトからトップ リンク バーを継承するか、それ自体のトップ リンク バーを使用するかを構成できます。サイトで、新しいサブサイトとページを作成したとき、SharePoint Server 2010 で自動的にそれらを表示させる場合は、チェック ボックスを選択します。

図 4. ナビゲーション設定

ナビゲーションの設定

[現在のナビゲーション] セクションは、サイド リンク バーに適用されます。[並べ替え] セクションでは、トップ リンク バーサイド リンク バーのアイテムを自動的に並べ替えるように構成できます。[ナビゲーションの編集と並べ替え] セクションでは、トップ リンク バー([グローバル ナビゲーション]) とサイド リンク バー ([現在のナビゲーション]) にリンクを追加できます。[並べ替え] セクションで [手動で並び替える] をクリックすると、ツリーとその上のボタンを使用して、見出しとリンクを上下に移動して並べ替えることができます。その他のボタンは、新しい見出しおよびリンクの編集、削除、追加に使います。リボンの表示と非表示を切り替えるコントロールの表示と非表示を切り替えるには、[リボンの表示/非表示] を使用します。SharePoint Foundation 2010 を使用している場合、ナビゲーション設定ページは使用できません。しかし、次のセクションに示すように、同じような機能を構築できます。

ナビゲーション階層を表示する

サイトのナビゲーションに見出しとリンクを追加するには、カスタマイズするサイトの SPWeb オブジェクトの Navigation プロパティを使用します。Navigation プロパティは、サイトのトップ リンク バーサイド リンク バーを表す SPNavigation オブジェクトを戻します。SPNavigation クラスには、TopNavigation プロパティと QuickLaunch プロパティが含まれます。これらは、トップ リンク バーあるいはサイド リンク バーからのアイテムへのアクセス、変更、削除に使用します。

using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

SPWeb site = SPContext.Current.Web;
SPNavigationNodeCollection topLinkBar = 
    site.Navigation.TopNavigationBar;
SPNavigationNodeCollection topLinkBar = 
    site.Navigation.QuickLaunch;

前記のコード例で、SPContext クラスの Current プロパティは、現在のサイトを表す SPWeb クラスのインスタンスを取得する目的で使用されます。次に、SPWeb クラスの Navigation プロパティは、トップ リンク バーサイド リンク バー リンクを含む SPNavigationNodeCollection オブジェクトを取得する目的で使用されます。これらは、それぞれ SPNavigationNode オブジェクトによって表されます。各 SPNavigationNode オブジェクトは、階層を構成しているゼロ以上の SPNavigationNode オブジェクトを含む Children プロパティを持っています。図 5 に示すように、ASP.Net TreeView コントロールを使用して階層を表示できます。サイト ページあるいはアプリケーション ページに、TreeView コントロールを追加するだけです。しかし、これらのページはサイトのマスター ページを参照することから、Visual Studio でビジュアル デザイナーを使用することはできません。

図 5. TreeView コントロールで表示されるトップ リンク バーとサイド リンク バー

表示されたトップ リンク バーとサイド リンク バー

以下のコードは、図 5 で TreeView コントロールを作成する目的で使用されます。

topNavTreeView.Nodes.Add(new TreeNode("Top Link Bar Links"));
quickLaunchTreeView.Nodes.Add(new TreeNode("Quick Launch Links"));
                
RecurseNodes(site.Navigation.TopNavigationBar, 
    topNavTreeView.Nodes[0].ChildNodes);
RecurseNodes(site.Navigation.QuickLaunch, 
    quickLaunchTreeView.Nodes[0].ChildNodes);

topNavTreeView.ExpandAll();
quickLaunchTreeView.ExpandAll();

両方の TreeView コントロールが、当初はルート ノードとともに作成されます。このルート ノードは、トップ リンク バーサイド リンク バーのノードの親です。次に、現在のサイトの SPWeb オブジェクトがトップ リンク バーサイド リンク バーを表す SPNavigationNodeCollection オブジェクトへの参照を取得します。SPNavigationNodeCollection オブジェクトは、関連する TreeView コントロールのルート ノードの ChildNodes プロパティとともに、TreeView コントロールを作成する目的で RecurseNodes 関数に渡されます。RecurseNodes 関数は、トップ リンク バーサイド リンク バーの階層に従って、TreeView コントロールを作成します。

private void RecurseNodes(SPNavigationNodeCollection nodes, 
    TreeNodeCollection treeNodes) {

    foreach (SPNavigationNode node in nodes) {
        TreeNode treeNode = new TreeNode();
        treeNode.Text = node.Title;
        treeNode.ToolTip = node.Url;
        treeNode.ShowCheckBox = true;
        treeNode.Checked = node.IsExternal;
        treeNode.Value = node.Id.ToString();

        treeNodes.Add(treeNode);
        RecurseNodes(node.Children, treeNode.ChildNodes);
    }
}

RecurseNodes 関数で、新しい TreeNode オブジェクトがトップ リンク バーサイド リンク バーの各ノードで作成され、TreeView コントロールで適切な親に追加されます。表 2 で示すように、TreeNode オブジェクトは、SPNavigationNode クラスのさまざまなプロパティを使用して構成されます。最後に、RecurseNodes 関数が、現在のノードの子孫を作成する目的で、再度、それ自体を呼び出します。

表 2. SPNavigationNode プロパティ

プロパティ名

説明

Id

SPNavigationNode オブジェクトの一意識別子。

Title

結果リンクの表示テキスト。

Url

結果リンクの URL。

IsExternal

Url の値が、SharePoint 外のリソースを指すかを示します。

注意

トップ リンク バーサイド リンク バーで、階層の最初の 2 つのレベルのみが使用されます。第 1 レベルは、トップ リンク バーでタブとして表示されます。タブが子を持っている場合、第 2 レベルは、タブの下のドロップダウン メニューで表示されます。サイド リンク バーで、第 1 レベルは、見出しとして表示され、第 2 レベルは、適切な第 1 レベルのリンクの下に表示されます。

サイトのナビゲーションにリンクを追加する

トップ リンク バーまたはサイド リンク バーにリンクを追加するには、以下のコードを使用します。

using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

SPWeb site = SPContext.Current.Web;

SPNavigationNode node = new SPNavigationNode(
    topNavTitleTextBox.Text, topNavUrlTextBox.Text, 
    topNavIsExternalCheckBox.Checked);

if (topNavTreeView.SelectedNode == topNavTreeView.Nodes[0]) {
    site.Navigation.TopNavigationBar.AddAsLast(node);
} else {
    int parentId = int.Parse(topNavTreeView.SelectedNode.Value);
    site.Navigation.GetNodeById(parentId).Children.AddAsLast(node);
}

if (topNavOpenInNewWindowCheckBox.Checked) {
    node.Properties["Target"] = "_blank";
    node.Update();
}

前記のコード例で、リンクの表示テキスト、URL、そして、リンクが SharePoint 内部または外部のリソースを指すかを、SPNavigationNode クラスのコンストラクターに渡します。

注意

SPNavigationNode コンストラクターの isExternal パラメーターに False を渡し、URL が SharePoint 内部のリソースを指さない場合、SharePoint は例外をスローします。

タブとして表示されるように、第 1 レベル ノードとしてリンクを追加する場合は、site.Navigation.TopNavigationBar.AddAsLast メソッドを呼び出し、新しい SPNavigationNode オブジェクトに渡します。それ以外の場合は、トップ リンク バーで親ノードへの参照を入手して、代わりにその Children プロパティを使用する目的で、SPNavigation クラスの GetNodeById メソッドを使用します。その場合、リンクは、親タブの下のドロップダウン メニューに表示されます。

この時点で、SPNavigationNode オブジェクトはトップ リンク バーに追加されており、ページが再読み込みされたときに表示されます。しかし、リンクを新しいウィンドウで開く場合、リンクの Target 属性の値を保存する目的で、SPNavigationNode クラスの Properties プロパティを使用する必要があります。リンクがクリックされるとき、新しいブラウザー ウィンドウを開くようにする場合は、_blank を使用します。最後に、SPNavigationNode で Update メソッドを呼び出し、変更を保存します。

注意

前述のコード例は、トップ リンク バーに適用されます。サイド リンク バーには、適切なコントロールを置き換えた後で、同じコードを使用します。

サイトのナビゲーションからリンクを削除する

トップ リンク バーまたはサイド リンク バーからリンクを削除するには、以下のコードを使用します。

using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

SPWeb site = SPContext.Current.Web;
int id = int.Parse(topNavTreeView.SelectedNode.Value);
SPNavigationNode node = site.Navigation.GetNodeById(id);
node.Delete();

前記のコード例で、リンクの SPNavigationNode への参照を取得する目的で、SPNavigation クラスの GetNodeById メソッドを使用します。最初のコード例が、TreeNode オブジェクトの Value プロパティに、SPNavigationNode オブジェクトの Id プロパティを割り当てたことにより、TreeView コントロール内のノードが選択された後で、SPNavigationNode オブジェクトの Id の値を判定できます。SPNavigationNode オブジェクトへの参照を取得した後、その Delete メソッドを呼び出すと、それがトップ リンク バーまたはサイド リンク バーに以前に追加されたかにかかわらず、サイトのナビゲーションからそれを削除します。

注意に関するメモ注意

SPNavigationNode オブジェクトを削除すると、その子もまた削除されます。

まとめ

SharePoint Foundation 2010 サイトと SharePoint Server 2010 サイトの間では、ナビゲーションの編集に多くの違いがあります。サイド リンク バーおよびトップ リンク バー ページでは、サイトのナビゲーションの基本的な編集ができます。ナビゲーション設定ページは、これらを単一のページに組み合わせたものです。ナビゲーション設定ページでは、リンクがサイトのナビゲーションに自動的に追加されたとき、より柔軟にコントロールできます。この記事のコードを使用して、SharePoint Foundation 2010 で、SharePoint Server 2010 と同様の編集エクスペリエンスが得られ、また、サイトのナビゲーションに基幹業務システムへのリンクを自動的に作成することにより、それらのシステムを統合できます。

この記事に含まれるコードをダウンロードするには、「Programmatically Customizing Site Navigation (英語)」を参照してください。

著者について

Bryan Phillips 氏は、Composable Systems, LLC の代表社員で、SharePoint Server 分野における Microsoft Most Valuable Professional の 1 人です。『Professional Microsoft Office SharePoint Designer 2007』と『Beginning SharePoint Designer 2010』の共同著者であり、SharePoint 関連のブログを運営しています。Phillips 氏は、1997 年から Microsoft テクノロジに携わっており、Microsoft Certified Trainer (MCT)、Microsoft Certified Solution Developer (MCSD)、Microsoft Certified Database Administrator (MCDBA)、および Microsoft Certified Systems Engineer (MCSE) 認定資格を所有しています。

以下は、Wrox の Microsoft SharePoint 2010 の記事のテクニカル エディターです。

  • Matt Ranlett 氏は、SQL Server MVP で、長年にわたりアトランタの .NET 開発者コミュニティの常連です。Ranlett 氏は Atlanta Dot Net Regular Guys の設立者の 1 人であり、複数の分野のユーザー グループ を設立し、主導しています。Ranlett 氏は仕事が終わった後多くの時間を SharePoint 1, 2, 3! series などの地域および全国規模のコミュニティ活動に費やしたり、3 つの Atlanta Code Camp を主催したり、INETA 理事会で技術担当副理事長を務めたり, .Net Rocks、ASP.NET Podcast など複数のポッドキャストに登場しています。そんな中、最近 Kim というすばらしい女性と結婚し、彼女は、3 匹の巨大な犬と一緒に彼と暮らしています。Ranlett 氏は最近 Intellinet のシニア コンサルタントを務めており、ビジネスの価値を生み出す革新的なソリューションを提供することで人々を成功に導くことに取り組んでいるチームのメンバーです。

  • Jake Dan Attis 氏は、SharePoint 開発に関する型、実践、および統制に関する第一人者です。カナダのモンクトンからアトランタに移住した Attis 氏は、応用数学の学位を持っていますが、100% 筋金入りの SharePoint 開発者です。同氏は、コード キャンプ、SharePoint Saturday、Atlanta SharePoint User Group など、アトランタ地域のコミュニティ イベントに参加したり、講師や主催者を務めています。Visual Studio で作業していない時間は、娘の Lily とアイス ホッケーやフットボールを観戦したり、世界のビールを試飲して過ごしています。

  • Kevin Dostalek 氏は、IT 業界で 15 年以上の経験があり、10 年以上にわたり大規模な IT プロジェクトと IT 担当者を管理しています。同氏は、あらゆる規模の企業のプロジェクトを指揮したり、開発者、アーキテクト、ビジネス アナリスト、技術リーダー、開発マネージャー、プロジェクト マネージャー、プログラム マネージャー、助言者/指導者など、さまざまな任務を果たしてきました。このような任務に加えて、Dostalek 氏は、2005 年から 2008 年の間中堅の MS Gold Partner の副社長としてソリューション デリバリ部門を管理し、イノベーションと教育担当副社長も務めました。2010 年の初め、Dostalek 氏は、SharePoint とソーシャル コンピューティングの専門分野でコンサルティング、開発、およびトレーニング サービスを提供する会社 Kick Studios を設立しました。設立後、同氏は全国の多数のユーザー グループ、サミット、会議形式のイベントで講師として登場しています。Dostalek 氏のブログは The Kickboard です。

  • Larry Riemann 氏は、世界最大規模の企業数社で 17 年以上ビジネス アプリケーションの設計と構築に携わってきました。Riemann 氏はフリーランスのコンサルタントで、Indigo Integrations を所有し、SharePoint911 でのみ SharePoint に関するコンサルティングを行っています。同氏は、出版物の記事を書いたり、会議で講師を務めることもあります。ここ数年間は、SharePoint に重点を置き、SharePoint が停止する機能を作成および構築しています。SharePoint に加えて、Riemann 氏は熟達した .Net アーキテクトであり、システム統合、エンタープライズ アーキテクチャ、および高可用性ソリューションに関して幅広い専門知識を持っています。同氏のブログはこちらです。

  • Sundararajan Narasiman 氏は、チェンナイにある Content Management & Portals Group of Cognizant Technology Solutions のテクニカル アーキテクトで、10 年以上にわたる業界の経験があります。Narasiman 氏は主に、SharePoint 2010 Server スタックと主流の .NET 3.5 の開発に関するアーキテクチャと技術コンサルティングに携わっています。同氏はプログラミングに情熱を持って取り組んでおり、エクストリーム プログラミングと TDD にも関心を持っています。