ナビゲーションにカスタム データ ソースを使用する

最終更新日: 2010年11月1日

適用対象: SharePoint Foundation 2010

Microsoft SharePoint Foundation Web サイトの枠には、データ ソースのコントロールにバインドされているナビゲーション コントロールが複数含まれています。いずれの場合も、データ ソース コントロールは、ナビゲーション プロバイダーからサイト マップ ノードまたは他のナビゲーション データを取得し、そのデータをナビゲーション コントロールに渡して表示するという役割を果たします。

組み込みのナビゲーション コントロールの背後にあるデータ ソース コントロールの中には、独自のデザインのコントロールに置き換えられるものがあります。このカスタマイズでは、マスター ページを変更したり、カスタム コンテンツ ページを展開したりする必要がありません。置換のメカニズムはすべて、SharePoint Foundation フィーチャーで宣言された手順によって実行されます。フィーチャーの作成および展開については、「フィーチャーの使用」を参照してください。

カスタマイズできるデータ ソース

SharePoint Foundation と共にインストールされるマスター ページでは、3 つの重要なナビゲーション コントロールの背後にあるデータ ソース コントロールは委任コントロールとして宣言され、これによりデータ ソースが委任置換の対象となります。次のナビゲーション コントロールごとにカスタム データ ソースを置き換えることができます。

  • トップ リンク バー

  • サイド リンク バー

  • ツリー ビュー

このコントロールの既定のデータ ソースを置き換えるには、フィーチャーを作成し、それをファーム ソリューションに展開する必要があります。SharePoint Foundation または Microsoft .NET Framework が提供するデータ ソース コントロールのいずれか、または独自のデザインのカスタム データ ソース コントロールに置き換えることができます。独自のデータ ソース コントロールを記述する場合、コンパイルされたアセンブリは、委任置換を宣言するフィーチャーまたは他のプロセスのどちらかによってグローバル アセンブリ キャッシュにインストールする必要があります。また、カスタム コントロールについても、web.config ファイルに SafeControl エントリが必要です。詳細については、「[方法] 委任コントロールをカスタマイズする」を参照してください。

コントロール置換のしくみ

委任コントロールは、プレースホルダー コントロールと同様、マスター ページで他のコンテンツによって置き換えることができる領域を定義します。この場合、データ ソース コントロールは、実行時に代替コントロールによって置き換えることができる既定のコンテンツです。

たとえば、次の v4.master からの抜粋は、トップ リンク バーの AspMenu コントロールと DelegateControl をメニューのデータ ソースとして宣言します。委任の既定のコンテンツは SiteMapDataSource コントロールです。

<SharePoint:AspMenu
    ID="TopNavigationMenuV4"
    Runat="server"
    EnableViewState="false"
    DataSourceID="topSiteMap"
    AccessKey="1"
    UseSimpleRendering="true"
    UseSeparateCss="false"
    Orientation="Horizontal"
    StaticDisplayLevels="2"
    MaximumDynamicDisplayLevels="1"
    SkipLinkText=""
    CssClass="s4-tn"/>
<SharePoint:DelegateControl 
    runat="server" 
    ControlId="TopNavigationDataSource" 
    Id="topNavigationDelegate">
    <Template_Controls>
        <asp:SiteMapDataSource
            ShowStartingNode="False"
            SiteMapProvider="SPNavigationProvider"
            id="topSiteMap"
            runat="server"
            StartingNodeUrl="sid:1002"/>
    </Template_Controls>
</SharePoint:DelegateControl>

委任コントロールの既定のコンテンツは、プレースホルダー コントロールのコンテンツと同様に、カスタム コンテンツ (この場合は他のコントロール) で置き換えることができます。異なるのは、マークアップをコンテンツ ページに追加しても、プレースホルダーのように既定の設定が上書きされることがない点です。代わりに、置換を行うには、置換前のコントロールと置換後のコントロールを識別するフィーチャーが含まれるファーム ソリューションを展開します。

委任置換を行うフィーチャーを実装する手順の詳細については、「[方法] 委任コントロールをカスタマイズする」を参照してください。簡単に言うと、要素マニフェストをフィーチャーに追加し、そのマニフェストで、委任コントロールだけでなく、置換候補のアセンブリとクラスを識別する Control 要素を宣言します。

たとえば、次の XML は、トップ リンク バーのデータ ソースを Contoso.NavigationDataSource という名前のカスタム データ ソース コントロールに置き換えます。

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
  <Control Id="TopNavigationDataSource"Sequence="50"
    ControlClass="Contoso.NavigationDataSource"
    ControlAssembly="Contoso, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <Property Name="SiteMapProvider">SPNavigationProvider</Property>
    <Property Name="ID">topSiteMap</Property>
  </Control>
</Elements>

委任コントロールの ControlId 属性の値は TopNavigationDataSource です。したがって、Control 要素の Id 属性も TopNavigationDataSource である必要があります。これにより、ターゲット委任でカスタム コントロールにリンクします。

Control 要素の ControlClass 属性および ControlAssembly 属性は、SharePoint Foundation に候補コントロールの場所を通知します。コントロールのコードを含む署名されたアセンブリは、グローバル アセンブリ キャッシュにインストールされていなければなりません。

マークアップの例で重要なのは、候補コントロールの ID 属性を topSiteMap に設定する Property 要素です。これは、AspMenu コントロールが DataSourceID 属性に対して使用する値と同じです。実行時、メニュー コントロールは、その ID によってデータ ソース コントロールにバインドされます。このとき、既定のコントロールではなく、カスタム コントロールを検索するように計画されます。カスタム コントロールは、もちろん HierarchicalDataSourceControl クラスから派生する必要があります。AspMenu コントロールでは、データ ソースでこのように期待しているからです。

複数のフィーチャーが同じ委任コントロールをターゲットにする場合があります。この競合を解決するために、各フィーチャーは、置換候補にシーケンス番号を指定して各候補の優先順位を設定する必要があります。 実行時には、サーバー ファーム、Web アプリケーション、サイト コレクション、Web サイトの各レベルで宣言された一連のコントロール要素が委任コントロールに受け入れられます。シーケンス番号が最も小さいコントロールがコントロール ツリーに追加されます。最も小さいシーケンス番号が重複している場合、コントロールの順序はランダムに決定されます。

Contoso.NavigationDataSource コントロールのマークアップの例では、Sequence 属性の値は 50 です。既定のデータ ソース コントロールのシーケンス番号はマークアップでは示されていませんが、100 を超える値を想定しておくと安全です。Contoso コントロールが唯一の置換候補の場合は、これが既定のデータ ソースに取って代わります。

関連項目

タスク

[方法] 委任コントロールをカスタマイズする

[方法] サイド リンク バーの表示をカスタマイズする

概念

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

委任コントロール (コントロールのテンプレート化)

[方法] サイト間でトップ リンク バーを共有する