Visual Studio .NET 2003 のスタート ページをカスタマイズする

ビューの切り替え:
スクリプトなし
Visual Studio .NET 2003 のスタート ページをカスタマイズする

EElizabeth Murray and Jonathan Gordon
Visual Studio Team
Microsoft Corporation

March 2003
日本語版最終更新日 2003 年 9 月 30 日

要約: この記事では、MicrosoftR Visual StudioR .NET 2003 のスタート ページの構造の詳細を調べ、新しいコンテンツを追加してスタート ページをカスタマイズする方法について説明します。カスタム コンテンツの例をいくつか挙げ、そのコンテンツの定義に使用する XML を示します。また、情報を取得し、スタート ページに表示する方法についても説明します。この記事を読むと、Visual Studio のスタート ページに新しいタブを作成し、複数のマシンに配置して、カスタム コンテンツを表示し、ローカル アドインやリモート Web サービスとの対話が行えるようになります。

目次

はじめに
スタート ページの動作
カスタマイズしたコンテンツをスタート ページに追加する
スタート ページのコンテンツのテストとトラブルシューティングを行う
スタート ページのカスタム コンテンツを配置する
高度な要素
まとめ
カスタム コンテンツの例

はじめに

Visual Studio .NET のスタート ページは、統合開発環境 (IDE) を起動するたびに表示されます。既定のコンテンツでは、開発者向けの最新情報が表示され、オンライン開発者コミュニティへのアクセスなどが提供されます。

Visual Studio .NET 2003 ではスタート ページに含まれるペインが変更され、[プロジェクト]、[オンライン リソース]、および [マイ プロフィール] の 3 つのペインで構成されています。[プロジェクト] のコンテンツはツール ウィンドウに表示されます。[オンライン リソース] と [マイ プロフィール] は引き続き Visual Studio .NET 2002 のスタート ページと同じモデルを使用して、Web ブラウザ ウィンドウに表示されます。[プロジェクト] ペインの表示に使用するウィンドウの種類が変更されて、IDE がより速く開くようになりました。

既定のコンテンツを補足するには、[オンライン リソース] ペインに新しいコンテンツをカスタム タブとして追加して、スタート ページをカスタマイズします。カスタム タブは、[オンライン リソース] ペイン内に表示されるコンテンツ ページです。[オンライン リソース] には、[オンライン検索] や [プロジェクト] などの既定のタブがあります。スタート ページに新しいペインを追加することはできません。スタート ページの既定のコンテンツはそのまま維持されます。新しいコンテンツの追加は可能ですが、現在の既定のコンテンツはカスタマイズできません。[オンライン リソース] ペインの既定のコンテンツは、サーバーから提供されます。スタティック コンテンツはローカル マシンに保存されなくなりました。したがって、[オンライン リソース] の既定のコンテンツを表示するには、インターネットまたはネットワークに接続する必要があります。

この記事では、スタート ページの新しいコンテンツを作成し、既存の [オンライン リソース] ペインに追加する方法の例を示します。スタート ページの新しいコンテンツを作成するには、XML に関するある程度の知識に加えて、Visual Studio コード エディタまたはメモ帳などのテキスト エディタの操作に慣れている必要があります。

スタート ページの動作

[オンライン リソース] ペインは、クライアント側の .htm ページ (この場合はタブの一覧を表示する default.htm) で構成されます。これらのタブは、XML を使用して作成されたタブ定義ファイルに基づいています。既定のタブ定義ファイルはサーバー上に格納され、カスタム タブ定義ファイルはローカルに格納されます。タブを選択すると、Visual Studio によってそのタブに関連するタブ定義ファイルが読み取られます。タブ定義ファイルにフィードが含まれる場合、タブ定義ファイルで指定されたとおりに、タブのコンテンツがサーバーからダウンロードされます。フィードが含まれない場合は、タブ定義ファイルで指定されたスタティック コンテンツが表示されます。図 1 を参照してください。

Aa290348.vsstartpgflowchart(ja-jp,VS.71).gif
図 1

すべてのコンテンツは、変換されてスタート ページに描画される前に、クライアント側のスキーマ検証ファイル (リソース .dll にある vstab.xdr) によって検証されます。検証済みのコンテンツは、リソース .dll にある vshome.xsl というクライアント側の変換を使用して HTML として描画されます。コンテンツが検証に失敗した場合、タブはスタート ページに表示されません。タブが描画されるたびに、タブのコンテンツがローカル コンピュータにキャッシュされます。たとえば、インターネットに接続していないなどの理由でコンテンツのフィードが使用できない場合でも、タブについて取得した最新のコンテンツを表示することが可能です。

タブ定義ファイルの形式

スタート ページのカスタム コンテンツは、XML を使用して記述されるタブ定義ファイルで定義されます。タブ定義ファイルには、1 つ以上のタブを含めることができます。カスタム コンテンツをスタート ページに表示するには、コンテンツの定義に使用する XML が、vstab.xdr 内のスタート ページの XML スキーマと一致している必要があります。

注: このソフトウェアおよび関連するドキュメントで使用している会社、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、出来事などの名称は架空のものです。実在する名称とは一切関係ありません。

次のリストは、スタート ページのカスタム タブに使用するタブ定義ファイルの基本的な XML 要素と属性を示しています。


<TabDefinition>
   <Tab ID="一意の名前" Name="表示名">
      <Application ID="一意の名前">
      <PaneSet ID="一意の名前">
      <Pane ID="一意の名前" Title="表示名">
         <LinkGroupSet ID="一意の名前">
            <LinkGroup ID="一意の名前" Title="表示名">
         </LinkGroupSet>
      </Pane>
   </PaneSet>
      <Data>
         <Context>
         <Links>
            <LItemEx>
               <LItem ID="一意の名前" LinkGroup="リンク グループ ID"
                URL="URL パス"> displaytext </LItem>
               </LItemEx>
            </Links>
         </Context>
      </Data>
      </Application>
      <Feeds>
      <Feed>
         <Source LCID="ロケール" URL="URL パス">
            <Arg Name="名前"></Arg>
         </Source>
      </Feed>
      </Feeds>
   </Tab>
</TabDefinition>

カスタマイズしたコンテンツをスタート ページに追加する

スタティック コンテンツまたはダイナミック コンテンツを含むカスタム タブを [オンライン リソース] ペインに追加して、スタート ページをカスタマイズします。スタート ページにその他の変更を行うこともできますが、Microsoft によるサポートの対象とはなりません。カスタム コンテンツを作成する際のその他の注意事項は、次のとおりです。

  • すべてのコンテンツが、スタート ページのスキーマ vstab.xdr と一致している必要があります。一致していない場合は、スタート ページにコンテンツが描画されません。
  • クライアント側のスクリプトは、スタート ページのコンテンツで使用できません。
  • スタート ページの [オンライン リソース] ペインに表示される既定のタブの順序を変更することはできません。最初に既定のタブが表示され、次にカスタム タブが表示されます。
  • Visual Studio で提供される既定のタブのコンテンツや形式を変更することはできません。

カスタム コンテンツとセキュリティ

クライアントに格納されているコンテンツも、サーバーから送信されるコンテンツも、スタート ページに描画される前に、スタート ページのスキーマと一致しているかどうかが検証されます。クライアント側のコンテンツは、ローカル コンピュータに格納されたファイルと同様に安全です。

サーバーのコンテンツは HTTP で配信されるので、安全でないコンテンツがクライアントに返されないようにサーバー上のコンテンツを検証し、その後でクライアントに配信することをお勧めします。例 4 の serverFeed.asp には、serverFeed.xml によって返される XML を検証する JavaScript コードが含まれています。


// 次の関数は、xml ドキュメントを受け取り、指定された xpath クエリに基づいてコンテンツを選択します。
      結果の xml には http:、https:、news:、ms-help:、または vs: で始まる URL が含まれていることを確認できます。

function replaceBadURLs(xpath, xmlDocument)
{
   var i = 0;
   var regex = "^http:|^https:|^news:|^ms-help:|^vs:"; // 適切な形式の URL を検索します。
   var nodes = xmlDocument.selectNodes(xpath); // xpath クエリを使用して xml を選択します。
   for(i = 0 ; i < nodes.length ; i++) // 各アイテムが適切な URL 形式に適合しているかどうかを確認します。
   {
      if(!nodes.item(i).text.match(regex)) // アイテムが適合していない場合は、ゼロ設定します。
      {
         nodes.item(i).text = "";
      }
   }
}

パフォーマンスの考慮事項

スタート ページでのタブのコンテンツの描画に要する時間が適切であることを確認してください。タブの読み込みに時間がかかり過ぎると、ユーザーがタブまたはスタート ページの使用を中止する原因となることがあります。

タブ定義ファイルでリモート サーバーのイメージを参照している場合、タブ定義ファイルに大量のコンテンツが含まれている場合、およびサーバーのパフォーマンスが十分でない場合は、これらすべてが描画の処理速度が低下する原因となります。ローカルに格納されたタブ定義ファイルがネットワークまたは Web のコンテンツを参照する場合に、これによってスタート ページの [オンライン リソース] ペインのコンテンツが取得されるときは、コンテンツの読み込みに時間がかかることがあります。[オンライン リソース] ペインの読み込み時間を短縮するには、<Feed> 要素を使用してネットワークまたは Web サイトのコンテンツを取得します。運用環境にカスタム タブを配置する前に、必ずタブのパフォーマンスをテストしてください。

要素と属性

基本の要素と属性

次の要素と属性は、タブ定義ファイルの基本フレームワークを構成します。

<TabDefinition></TabDefinition>
必須。ファイルのすべての子要素を含むルート要素です。
<Tab></Tab>
必須。<TabDefinition> の子要素です。タブ定義ファイルには、少なくとも 1 つの <Tab> 要素が必要です。この要素は ID、Name、および Filterable 属性を伴います。
<Application></Application>
必須。<Tab> 要素の子要素で、タブのユーザー インターフェイスを定義します。この要素は ID 属性を伴います。
ID 属性
必須。要素の一意の ID です。
Name 属性
必須。要素の表示名です。
Filterable 属性
省略可能。True または False を受け取ります。True の場合は、[フィルタ] ドロップダウン リストが表示され、選択したフィルタに基づいて該当するタブのコンテンツがフィルタ処理されます。False の場合は、ドロップダウン リストが表示されず、コンテンツのフィルタは実行されません。コンテンツのフィルタの詳細については、この記事の「タブの Data 要素と Feeds 要素」を参照してください。

次のコードは、スタート ページの 2 つのカスタム タブ Tab1 と Tab2 の情報を含むシンプルなタブ定義ファイルの例です。Tab1 にはフィルタ処理可能なダイナミック コンテンツが表示され、Tab2 にはフィルタ処理されないスタティック コンテンツが表示されます。


<TabDefinition>
   <Tab ID="MyTab" Name="Tab1" Filterable="true">
      <Application ID="MyApp">
         <!--このセクションに UI 要素を入力します。-->
      </Application>
         <Data>
            <---このセクションにオフラインの Data 要素を入力します。-->
         </Data>
      <Feeds>
         <!--このセクションに Feed 要素を入力します。-->
      </Feeds>
   </Tab>
   <Tab ID="MyOtherTab" Name="Tab2" Filterable="false">
      <Application ID="MyOtherApp">
         <!--このセクションに UI 要素を入力します。-->
         <Data>
            <---このセクションにスタティック Data 要素を入力します。-->
         </Data>
         </Application>
   </Tab>
</TabDefinition>

ユーザー インターフェイス要素

カスタム コンテンツのユーザー インターフェイスは、タブ定義ファイルの <Application> 要素内で定義します。タブの各ユーザー インターフェイスは、<PaneSet> または <Pane> のいずれかの要素を使用して定義します。

次の表に、以下で説明する要素の一覧を示します。

<PaneSet> <Pane> <Image> <TextSpan> <LinkGroup>
<Break> <HRule> <Title> <Hyperlink> <LinkGroupSet>
<PaneSet></PaneSet>
省略可能。サブタブの複数のペインにコンテンツを表示することを定義します。この要素は ID 属性を伴います。ペイン セットを表示するには、例 2 を参照してください。

次の XML フラグメントは、サブタブ内に複数のペインを定義します。


   <Application ID="MyApp">
         <PaneSet ID="MyPaneSet">
            <Pane ID="MyPane1" Title="マイ ペイン 1">
               <!--このセクションに UI 要素を入力します。-->
            </Pane>
            <Pane ID="MyPane2" Title="マイ ペイン 2">
               <!--このセクションに UI 要素を入力します。-->
            </Pane>
         </PaneSet>
   </Application>

<Pane></Pane>
省略可能。1 つのペインにコンテンツを表示することを定義します。この要素は ID および Title 属性を伴います。ペインを表示するには、例 2 を参照してください。

次の XML フラグメントは、1 つのペインを定義します。


<Application ID="MyOtherApp">
   <Pane ID="MyPane1" Title="マイ ペイン 1">
      <!--このセクションに UI 要素を入力します。-->
   </Pane>
</Application>

<Pane> 要素内で、次の UI 要素をコンテンツの表示に使用できます。

<Image></Image>
省略可能。ペインにグラフィックを表示できます。この要素は ID、Source、Height、Width、および AltText 属性を伴います。

例:

<Image ID="MyImage" Source="http://www.test-1.msn.com/warning.gif"

Height="40" Width="40" AltText="マイ イメージ" />

<TextSpan></TextSpan>
省略可能。書式設定可能なスタティック テキストを表示します。<TextSpan> には、必要に応じて、<Break> および <Image> 要素を含めることができます。この要素は ID、FontFamily、および FontSize 属性を伴います。

次の XML フラグメントは、シンプルなテキスト スパンの例です。


		<TextSpan ID="TextSpanSimple">これはシンプルな TextSpan です</TextSpan>

次の XML フラグメントは、書式設定されたテキスト スパンの例です。


<TextSpan ID="TextSpanFormatted" FontFamily="Tahoma" FontSize="14">これは Tahoma、24pt の TextSpan です</TextSpan>

次の XML フラグメントには、<Image> および <Break> 要素が <TextSpan> 要素の一部として含まれています。

<TextSpan ID="TestTextSpan">
   <Image ID="TestSpanImage1" Source=
   "http://www.test-1.msn.com/warning.gif" 
Height="40" Width="40" AltText="スパン内のイメージ 1" />TextSpan 内のイメージ 1 のテキスト
   <Image ID="TestSpanImage2" Source=
"http://www.test-1.msn.com/warning.gif" 
Height="40" Width="40" AltText="スパン内のイメージ 2" />TextSpan 内のイメージ 2 のテキスト
   <Break/>
   <Image ID="TestSpanImage3" Source="http://www.test-1.msn.com/
warning.gif" 
Height="40" Width="40" AltText="スパン内のイメージ 3" />TextSpan 内のイメージ 3 のテキスト
</TextSpan>
<Break></Break>
省略可能。改行を挿入します。
<HRule></HRule>
省略可能。水平方向の規則を表示します。
<Title></Title>
省略可能。テキストを太字で表示します。

例:


		<Title>これはタイトルです。</Title>
<Hyperlink></Hyperlink>
省略可能。ハイパーリンクを表示します。この要素は ID、URL、および Relative 属性を伴います。

次の XML フラグメントは、Web サーバー www.test-1.msn.com のイメージにリンクします。


		<Hyperlink ID="TestHyperlink1" 
URL="http://www.test-1.msn.com/warning.gif">ハイパーリンク</Hyperlink>

次の XML フラグメントは、MSDN ヘルプのトピックにリンクします。Relative 属性は、トピックにナビゲートする前に、URL 属性で指定された値に対して、ローカル ヘルプ コレクションに問い合わせ、ms-help://<collection> を行うことを指定します。


<Hyperlink ID="TestHyperlink2" Relative="1" 
URL="/ms.msdnvs/vsintro7/HTML/vxoriWhatsNewInVisualStudio.htm">
ヘルプ トピックへのハイパーリンク</Hyperlink>
<LinkGroup></LinkGroup>
省略可能。<Pane> または <PaneSet> 要素内に LItem 要素セットを配置することを定義します。この要素は ID および Title 属性を伴います。

例:


		<LinkGroup ID="LG1" Title="マイ リンク グループ" />
   <Data>
      <Context>
         <Links>
            <LItemEx>
               <LItem ID="LI1" LinkGroup="LG1" Image="http://www.test-
1.msn.com/warning.gif">マイ リンク グループの LItem</LItem>
               <Blurb>LItem を説明するテキスト。</Blurb>
            </LItemEx>
         </Links>
      <Context>
   <Data>
<LinkGroupSet><LinkGroupSet>
省略可能。<LinkGroup> 要素のセットです。

例:


		<LinkGroupSet>
      <LinkGroup ID="LG1" />
      <LinkGroup ID="LG2" />
</LinkGroupSet>
ID 属性
必須。要素の一意の ID です。
Title 属性
必須。要素の表示名です。
Source 属性
必須。イメージの URL または完全なパスです。
Height 属性
省略可能。イメージの縦の長さをピクセルで指定します。
Width 属性
省略可能。イメージの横の長さをピクセルで指定します。
AltText 属性
省略可能。ペインにイメージが表示されない場合に表示されるテキストです。
FontFamily 属性
省略可能。Tahoma や Verdana など、テキストの表示に使用するフォントを指定します。
FontSize 属性
省略可能。フォント サイズをポイント数で指定します。
URL 属性
必須。必ず http:、https:、news:、ms-help:、または vs: で始まる Web の絶対 URL です。Relative 属性と共に使用すると、MSDN ヘルプ トピックなどの相対 URL を指定できます。
Relative 属性
省略可能。値 1 を受け取ります。この属性を使用すると、MSDN ヘルプに含まれるトピックの URL を指定できます。この属性は、URL 属性で指定された値が、MSDN ヘルプ コレクションにあることを示します。

タブの Data 要素と Feeds 要素

タブ定義ファイルの <Data> 要素は、リンクとして表示されるタブのコンテンツを含み、オプションとして要約やイメージを含めることが可能です。<Feed> 要素を使用すると、オフライン時にスタティック リンクを表示することができますが、インターネットに接続すると、サーバーにアクセスして引数を渡し、更新されたコンテンツを受信することもできます。

ここでは、次の要素について説明します。

<Data> <AItem> <Links>
<Context> <Attributes> <LItemEx>
<LItem> <Blurb> <Feeds>
<Feed> <Source> <Arg>
<Data></Data>
省略可能。タブに表示されるリンクのリストです。
<Context></Context>
必須。オプションとしてフィルタ処理が可能な <LItem> 要素のグループを定義します。この要素は <Attributes> および <Links> 要素を伴います。<Data> 要素の子です。

例:

<Attributes></Attributes>
省略可能。この要素を使用して <Context> 要素のコンテンツの属性を指定すると、事前定義済みのヘルプ フィルタを使用して、タブ内でリンクをフィルタ処理できます。この要素は <AItem> 要素を伴います。
<AItem></AItem>
省略可能。この要素を使用して <Context> 要素内のリンクのセットに属性を関連付けると、事前定義済みのヘルプ フィルタとの対話が可能になります。この要素は Name および Value 属性を伴います。
<Links><Links>
必須。タブでフィルタ処理が可能なリンクのセットです。<LItemEx> および <LItem> の親要素です。
<LItemEx></LItemEx>
省略可能。<LItem> および省略可能な <Blurb> 要素を含む、属性を持たない親要素です。

例:


		<LItemEx>
   <LItem ID="LI1" LinkGroup="LG1" 
Image="http://www.test-1.msn.com/warning.gif">テキストとイメージを持った LItem</LItem>
   <Blurb>LItem を説明するテキスト。</Blurb>
</LItemEx>
<LItem></LItem>
必須。http、https、ms-help、mail、news など、イメージを含めることが可能なハイパーリンクです。この要素は ID、LinkGroup、および Image 属性を伴います。
<Blurb></Blurb>
省略可能。<LItemEx> 要素のスタティック テキストを含みます。
<Feeds></Feeds>
省略可能。<Tab> の子要素です。タブのサーバー側コンテンツをダウンロードする方法を定義します。
<Feed></Feed>
必須。Feeds 要素の子です。
<Source></Source>
必須。サーバーのコンテンツを指定します。LCID および URL 属性を伴います。
<Arg></Arg>
省略可能。Feed URL と追加の引数を渡します。Name 属性を伴います。

例:


		<Feeds>
   <Feed>
      <Source LCID="1033" URL="http://myserver/myfeed.aspx">
         <Arg Name="feedName">defaultFeed</Arg>
      </Source>
   </Feed>
</Feeds>

このフィードは、<http://myserver/myfeed.aspx?hasArgs=y&feedName="defaultFeed"&FeedLCID=1033&UserLang=en-us> を呼び出してタブのコンテンツを取得します。

ID 属性
必須。要素の一意の ID です。
URL 属性
必須。必ず http:、https:、news:、ms-help:、または vs: で始まる Web の絶対 URL です。
Image 属性
必須。イメージの URL または完全なパスです。
LinkGroup 属性
省略可能。LItem が属する <LinkGroup> 要素の ID です。
Name 属性
必須。Help 属性カテゴリの名前です。Help 属性の詳細については、MSDN ライブラリ ヘルプの「フィルタの作成と使用 」を参照してください。
Value 属性
必須。Help 属性の値です。

次に <Data> 要素の例を示します。


<Data>
   <Context>
      <Attributes>
         <AItem Name="DocSet" Value="Visual Studio" />
         <AItem Name="Product" Value="VS" />
      </Attributes>
      <Links>
         <LItemEx>
            <LItem ID="LI1" LinkGroup="LG1" URL=" 
http://www.test-1.msn.com/warning.gif" Image=" 
http://www.test-1.msn.com/warning.gif 
">このリンクは Visual Studio フィルタが適用された場合に表示されます。</LItem>
            <Blurb>Link を説明する Blurb</Blurb>
         </LItemEx>
      </Links>
   </Context>
</Data>

LCID 属性
省略可能。対象となる言語のロケール ID 番号です。
言語LCID
繁体字中国語1028
ドイツ語1031
英語1033
フランス語1036
イタリア語1040
日本語1041
韓国語1042
簡体字中国語2052
スペイン語3082

新しいユーザー インターフェイス要素

次は、Visual Studio .NET 2003 の新しい要素です。

<LinkGroup> <LinkGroupSet> <Table> <TableRow>
<TableCell> <ListBox> <ListBoxItem> <RadioButton>
<RadioGroup> <RootNode> <ContainerNode> <ItemNode>
<TextField> <PasswordField> <Button> <CheckBox>
<HiddenField> <FileField>   <Label>
<Table></Table>
省略可能。<TalbeRow> および <TableCell> の親要素です。省略可能な ID、Align、Border、CellPadding、CellSpacing、Height、Width、および Title 属性を伴います。

例:


<Table Border="1" Height="200" Width="200">
   <TableRow>
      <TableCell ColSpan="3" Align="center" Valign="middle"><TextSpan>セル       1</TextSpan></TableCell>
   </TableRow>
   <TableRow>
      <TableCell RowSpan="2"><TextSpan>セル 2</TextSpan></TableCell>
      <TableCell><TextSpan>セル 3</TextSpan></TableCell>
      <TableCell><TextSpan>セル 4</TextSpan></TableCell>
   </TableRow>
   <TableRow>
      <TableCell><TextSpan>セル 5</TextSpan></TableCell>
      <TableCell RowSpan="2"><TextSpan>セル 6</TextSpan></TableCell>
   </TableRow>
   <TableRow>
      <TableCell><TextSpan>セル 7</TextSpan></TableCell>
      <TableCell><TextSpan>セル 8</TextSpan></TableCell>
   </TableRow>
</Table>

<TableRow></TableRow>
必須。<TableCell> の親要素です。この要素は属性を伴いません。
<TableCell></TableCell>
必須。テーブルのコンテンツを含みます。省略可能な ID、Align、ColSpan、NoWrap、RowSpan、および Title 属性を伴います。
<ListBox></ListBox>
省略可能。<ListBoxItem> の親要素です。ドロップダウン リストの項目を表示します。この要素は、省略可能な ID および Size 属性を伴います。

例:


   <ListBox>
      <ListBoxItem>1</ListBoxItem>
      <ListBoxItem>2</ListBoxItem>
      <ListBoxItem>3</ListBoxItem>
   </ListBox>

<ListBoxItem></ListBoxItem>
省略可能。リストの項目です。<ListBox> 要素内で使用します。この要素は、省略可能な ID および Value 属性を伴います。

例:


		<ListBoxItem Value="Value1">項目 1</ListBoxItem>
<RadioGroup></RadioGroup>
省略可能。<RadioButton> の親要素です。この要素は、省略可能な ID、GroupName、Selected、および BreaksBetween 属性を伴います。

例:


   <RadioGroup ID="radio1" BreaksBetween="true">
      <RadioButton Checked="true">オプション 2</RadioButton>
      <RadioButton>オプション 1</RadioButton>
   </RadioGroup>

<RadioButton></RadioButton>
省略可能。オプション ボタン。<RadioGroup> 要素で使用します。この要素は、省略可能な ID、AccessKey、および Checked 属性を伴います。
<RootNode></RootNode>
省略可能。<;ContainerNode> 要素を含む、属性を持たない親ノードです。この要素を使用して、ツリー構造のユーザー インターフェイスを作成します。

例:



<RootNode>
   <ContainerNode ID="MyContainer1" AltText="マイ コンテナ" Title="コンテナ" 
   OpenedImage="vs:/images_greenfolder.gif" ClosedImage="vs:/images_greenfoldero.gif"
     Height="13" Width="16" State="closed">
      <ItemNode>
         <Hyperlink ID="TestHyperlink1A" URL="http://localhost/warning.gif">ハイパーリンク</Hyperlink>
      </ItemNode>
      <ItemNode>
         <Hyperlink ID="TestHyperlink1A1" URL="http://localhost/warning.gif">ハイパーリンク</Hyperlink>
      </ItemNode>
      <ContainerNode ID="MyContainer2" Title="コンテナ" 
      OpenedImage="vs:/images_greenfolder.gif" ClosedImage="vs:/images_greenfoldero.gif" 
      Height="13" Width="16" State="closed">
         <ItemNode>
            <Hyperlink ID="TestHyperlink1A2" URL="http://localhost/warning.gif">ハイパーリンク</Hyperlink>
         </ItemNode>
      </ContainerNode>
   </ContainerNode>
</RootNode>

<ContainerNode></ContainerNode>
必須。ツリー構造のユーザー インターフェイスでコンテナとして使用します。この要素には <ItemNode> 要素が含まれ、省略可能な ID、AltText、Title、OpenedImage、ClosedImage、Height、Width、および State 属性を伴います。
<ItemNode></ItemNode>
省略可能。ツリー コントロールのコントロールまたはテキストを含む、属性を持たない親ノードです。
<TextField></TextField>
省略可能。ユーザー入力を受け取るテキスト ボックスです。この要素は、省略可能な ID、Size、および MaxLength 属性を伴います。

<TextField ID="TestTextField" Size="50" MaxLength="20">マイ テキスト フィールド</TextField>

<PasswordField></PasswordField>
省略可能。パスワードやその他の機密情報に使用され、入力テキストが * (アスタリスク) 文字として表示されます。この要素は、省略可能な ID、Size、および MaxLength 属性を伴います。
<Button></Button>
省略可能。ボタンです。この要素は、省略可能な ID および Text 属性を伴います。

例:

<Button ID="TestButton" Text="ボタン" />

<CheckBox></CheckBox>
省略可能。チェック ボックスです。この要素は、省略可能な ID、Checked、および AccessKey 属性を伴います。

例:


		<CheckBox ID="TestCheckBox" Checked="true" AccessKey="x">チェック ボックス</CheckBox>
<HiddenField></HiddenField>
省略可能。非表示のフィールドです。この要素は、省略可能な ID 属性を伴います。

例:


		<HiddenField ID="TestHiddenField">マイ非表示フィールド</HiddenField>
<FileField></FileField>
省略可能。ファイル ピッカー フィールドです。この要素は、省略可能な ID、Size、および MaxLength 属性を伴います。

例:


		<FileField ID="TestFileField" Size="50" MaxLength="20" />
<Label></Label>
省略可能。テキスト ラベルです。この要素は、省略可能な ID、AccessKey、および For 属性を伴います。

例:


		<Label ID="TestLabel" AccessKey="L" For="TestTextField">ラベル:</Label>
BreaksBetween 属性
必須。true または false の値を選択します。各行にオプション ボタンを 1 つずつ表示する場合は、true を選択します。すべてのオプション ボタンを隣り合わせにして 1 行に表示する場合は、false を選択します。
Border 属性
省略可能。表の境界線のサイズです。
Height 属性
省略可能。コントロールの垂直方向のサイズです。
Width 属性
省略可能。コントロールの水平方向のサイズです。
ColSpan 属性
省略可能。表のセル範囲の列数を指定します。
Align 属性
省略可能。表のセル内でのテキストの水平方向の配置を指定します。選択できる値は center、left、および right です。
Valign 属性
省略可能。表のセル内でのテキストの垂直方向の配置を指定します。選択できる値は baseline、bottom、center、middle、および top です。
RowSpan 属性
省略可能。表のセル範囲の行数を指定します。
Title 属性
省略可能。ツリー構造のユーザー インターフェイスまたは表のタイトルの <ContainerNode> の表示名を指定します。
OpenedImage 属性
省略可能。展開したときに <ContainerNode> に対して使用するグラフィックを指定します。
ID 属性
省略可能。要素の一意の ID です。
CellPadding 属性
省略可能。表内でセルの周囲に埋め込むスペースを指定します。
CellSpacing 属性
省略可能。表内でのセルの間隔を指定します。
Title 属性
省略可能。コントロールのタイトルです。
NoWrap 属性
省略可能。表のセル内でのテキストの折り返しを行うかどうかを指定します。
Size 属性
省略可能。ListBox に表示する項目数または TextField や PasswordField のサイズです。
Value 属性
省略可能。ListBox の項目が選択されたときの値です。
GroupName 属性
省略可能。RadioButtonGroup のすべての RadioButton 要素に関連付ける名前です。
Selected 属性
省略可能。RadioButtonGroup 内で選択された RadioButton です。
AccessKey 属性
省略可能。コントロールに対するキーボード アクセス キーです。
For 属性
必須。ラベルに関連付けるコントロールの ID です。
Checked 属性
省略可能。RadioButton がオンになっています。
AltText 属性
省略可能。マウスが ContainerNode 上にあるとき表示されるテキストです。
ClosedImage 属性
省略可能。縮小したときに <ContainerNode> に対して使用するグラフィックを指定します。
State 属性
省略可能。<ContainerNode> の状態です。opened または closed の値を選択できます。
MaxLength 属性
省略可能。許容される最大文字数です。

スタート ページのコンテンツのテストとトラブルシューティングを行う

カスタマイズしたコンテンツが予想どおりに表示されない場合は、次の手順に従います。

  • Web ブラウザで .xml ファイルを表示して、解析エラーがないかどうかをチェックします。
  • Visual Studio で、このホワイト ペーパーのサンプルをコピーして xml ファイルに貼り付けるとき、[編集] メニューの [HTML として貼り付け] を使用します。[貼り付け] を使用すると、スタート ページのスキーマと一致しないコードが XML デザイナによって追加される場合があります。
  • Visual Studio を終了し、再起動します。サーバー側の .xml ファイルから配信されたタブ コンテンツは、[更新] を使用してもスタート ページで更新されない場合があります。

検証用の .htm ファイルを作成して XML をチェックし、エラーを見つける方法もあります。

シンプルな XML 検証ファイルを作成する

次の手順は、スタート ページのカスタム コンテンツの XML を検証するスクリプトが含まれた .htm ファイルを作成します。この検証スクリプトを使用するには、インターネットに接続している必要があります。

シンプルな XML 検証ファイルを使用するには

  1. 次のコードをコピーし、Visual Studio コード エディタまたはメモ帳などのテキスト エディタに貼り付けます。
    
    <html>
       <head>
          <title>スタート ページのコンテンツの検証ツール</title>
          <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
          <script id="clientEventHandlersJS" language="javascript">
    <!--
    //グローバル変数
    var g_MSXML_DOM = "MSXML2.DOMDocument.3.0";
    var g_MSXML_Schema_DOM = "MSXML2.XMLSchemaCache.3.0";
    var g_valError;
    
    var g_valSchema = new ActiveXObject(g_MSXML_Schema_DOM);
    
    //この関数はタブの xml を検証します。
    function fnLoadAndValidate(oTab, xmlobj)
    {
       //エラー リストを "" に設定します。
       g_valError = "";
       
       try {
          //xml がスキーマ検証を通過するかどうかを確認します。
          try {
             xmlobj.validateOnParse = true;
             xmlobj.schemas = g_valSchema;
             xmlobj.loadXML(oTab.xml);
             if (xmlobj.parseError != 0) {
                g_valError = "コンテンツ検証エラー:  " + xmlobj.parseError.reason;
                return false;
             }
          } catch (e) {
             g_valError = "XML 解析または検証エラー:  " + e.message;
             return false;
          }
       } catch (e) {
          g_valError = "一般的な検証エラー:  " + e.message;
          return false;
       }
       return true;
    }
    
    //この関数は、タブ定義ファイルの読み込み後、[Validate] ボタンをクリックしたときに呼び出され、
    //定義ファイルにあるすべてのタブを検証します。
    function validateTab(tabFile) {
       var xmlTmp = new ActiveXObject(g_MSXML_DOM);
       var errorList = "";
       
       //ページのファイル フィールドに指定されたファイルを読み込みます。
       xmlTmp.load(SelectFile.value);
    
       //ファイル内のすべてのタブを検索します。
       var tabList = xmlTmp.selectNodes("//Tab");
    
       //各タブの xml がスキーマと一致しているかどうかを検証します。
       for(var o = 0; o!=tabList.length;o++)
       {
          objNode = tabList.nextNode();
          tabName = objNode.getAttribute("Name");
    
          //タブが検証に失敗した場合は、エラー リストにエラーを追加します。
          if(!fnLoadAndValidate(objNode, xmlTmp))
             errorList += "Tab : " + tabName + "\n" + g_valError +"\n";
       }
    
       //エラーが見つかった場合はメッセージとエラー リストが表示され、そうでない場合は成功のメッセージが表示されます。
       if(errorList!="")
          alert("検証エラーが見つかりました。\n\n" + errorList);
       else
          alert("エラーは検出されませんでした。");
    }
    
    //ウィンドウの読み込み時に、スキーマ検証ファイル (vstab.xdr) を開きます。
    //注: コンテンツの検証には、アクティブなインターネット接続が必要です。
       function window_onload() {
          try {
             g_valSchema.add("", "http://msdn.microsoft.com/vsdata/xdr/vstab_2003.xdr");
             RenderInput.style.display = "インライン";
          } catch (e) {
             RenderError.innerHTML = "スキーマ ファイルのアクセス エラー (vstab.xdr)。
             問題が解決されない場合は、管理者に相談してください。
             <p/>注: コンテンツの検証には、アクティブなインターネット接続が必要です。";
       }
    }
    
    //-->
          </script>
       </head>
       <body language="javascript" onload="return window_onload()">
          <span>スタート ページのコンテンツの検証ツール</span>
          <hr>
          <div ID="RenderInput" style="DISPLAY: none">
             コンテンツ定義ファイル:
             <BR>
             <INPUT ID="SelectFile" type="file" size="60">
             <INPUT ID="Validate" style="height: 20" type="button" value="Validate" onclick="validateTab()">
          </div>
          <div ID="RenderError"></div>
       </body>
    </html>
    
  2. ファイルを .htm ページとして保存します。
  3. Web ブラウザで .htm ページを開きます。
  4. 検証ページで [参照] をクリックして、検証する .xml ファイルを見つけます。
  5. [Validate] をクリックします。

検証ファイルは、ファイル内の XML が正しくフォーマットされ、関連要素に対して必要な属性が用意され、要素が正しく使用されているかどうかを確認します。

スタート ページのカスタム コンテンツを配置する

カスタム タブのコンテンツは、クライアントおよびサーバーのタブ定義ファイルを使用して配信されます。クライアントのカスタム タブ定義ファイルは、スタート ページが認識できるように、コンピュータの特定の場所に保存しておく必要があります。ファイル内の URL を使用して、サーバーから返されるコンテンツを参照できます。

コンテンツが頻繁に更新される場合は、サーバー側のフィードを使用します。サーバーでは、クライアントに影響を与えずにコンテンツを更新でき、単一のソースから複数のコンピュータへ定期的にコンテンツを配信できます。スタート ページの [オンライン コミュニティ]、[ヘッドライン]、および [ダウンロード] の各タブはこの方法で定義されています。コンテンツを頻繁に更新しないかまったく更新しない場合は、クライアント側のタブ定義ファイルのみで十分です。更新しないタブには、スタート ページの [プロジェクト] タブなどがあります。

ロケール固有のコンテンツでもタブ定義ファイルを配置できます。この場合は、コンピュータの地域設定に基づいて、複数の言語でカスタム タブを表示できます。

スタート ページが表示されると、コンピュータの特定の場所でカスタム タブがあるかどうかが検索されます。これらの場所でタブ定義ファイルが見つかると、ファイル内のコンテンツがスタート ページに表示されます。タブが選択されると、クライアントのコンテンツが描画されます。サーバーのフィードが定義されている場合は、サーバー コンテンツがダウンロードされて、クライアントのコンテンツの代わりにスタート ページに表示されます。

クライアントにカスタム タブを配置するには

  1. <Visual Studio のインストール パス>\Common7\IDE\HTML\Custom\ ディレクトリを参照します。Custom ディレクトリがない場合は作成してください。
  2. タブ定義ファイル *.xml をディレクトリにコピーします。
  3. Visual Studio .NET を起動し、スタート ページの [オンライン リソース] ペインを表示します。カスタム タブは、タブ一覧の一番下付近に表示されます。

カスタム タブが表示されない場合は、XML にエラーがある可能性があります。詳細については、「スタート ページのコンテンツのテストとトラブルシューティングを行う」を参照してください。

クライアントにロケール固有のカスタム タブを配置するには

  1. <Visual Studio のインストール パス>\Common7\IDE\HTML\<ロケール ID>\Custom\ ディレクトリを参照します。\...\<ロケール ID>\Custom\ ディレクトリが存在しない場合は作成してください。

    日本語の場合は、c:\Program Files\Visual Studio .NET\Common7\IDE\HTML\1041\Custom\ となります。

    言語ロケール ID
    繁体字中国語1028
    ドイツ語1031
    英語1033
    フランス語1036
    イタリア語1040
    日本語1041
    韓国語1042
    簡体字中国語2052
    スペイン語3082
  2. タブ定義ファイル *.xml を適切なロケールのディレクトリにコピーします。

サーバーで更新されるコンテンツには 2 つの部分があります。適切なサーバーへのポインタを含むクライアント側のタブ定義ファイルと、XML を描画し、XML がスタート ページのスキーマと一致していることを確認するサーバー側のファイルです。これらのファイルには、Web サーバーに配置されるシンプルな XML ファイルから、完全な .NET アプリケーション、さらには XML を返すサーバー上の XML Web サービスに至るあらゆるファイルが含まれます。たとえば、例 4 のように、XML タブ定義ファイルを参照する .asp ファイルを使用することができます。

サーバーにダイナミック コンテンツを配置するには

  1. クライアントのタブ定義ファイルの <Feed> セクションに、サーバー、アプリケーション パス、または出力ファイルを参照するポインタを含めます。
  2. <Visual Studio のインストール パス>\Common7\IDE\HTML\Custom\ ディレクトリを参照します。Custom ディレクトリがない場合は作成してください。
  3. タブ定義ファイル *.xml をディレクトリにコピーします。
  4. サーバーで、サーバー側のファイルが決められた場所にあることを確認します。

高度な要素

Visual Studio .NET 2003 で利用できるようになった新しい要素を使用すると、さらに柔軟性の高いカスタム タブを定義できます。新しい要素を使用すると、スタート ページのタブから Visual Studio のアドインと直接対話できます。

次の表に、以下で説明する高度な要素の一覧を示します。

<AddInWorker> <Action>
<InvokeMethod> <RenderArgs>
<RenderArg> <RenderInput>
<AddInWorker></AddInWorker>
省略可能。Visual Studio に読み込まれた Visual Studio アドインとの接続に使用します。<RenderArgs> および <RenderInput> の親要素です。この要素は ID、ActionID、RenderAreaID、ProgID、Method、および ErrorMessage 属性を伴います。

アドインの作成の詳細については、MSDN ライブラリの「アドインとウィザードの作成」を参照してください。

<Action></Action>
省略可能。アドインおよび <InvokeMethod> の親要素の呼び出しに使用します。この要素は ID 属性を伴います。
<InvokeMethod></InvokeMethod>
省略可能。Visual Studio アドインまたは Web サイトの呼び出しに使用します。この要素は ToolID 属性を伴います。
<RenderArgs></RenderArgs>
省略可能。Visual Studio アドインおよび <RenderArg> の親要素に渡す引数リストです。この要素は ItemID および ItemProp 属性を伴います。
<RenderArg></RenderArg>
省略可能。Visual Studio アドイン メソッドに渡す引数です。
<RenderInput></RenderInput>
省略可能。Visual Studio アドインと対話するときに使用する要素のリストです。これらの要素は、スキーマ内に定義され、ドキュメント化されたユーザー インターフェイス要素のセットに含まれるあらゆる要素です。
ID 属性
必須。要素の一意の ID です。
ItemID 属性
必須。Visual Studio アドイン メソッドに渡す引数を構築する、カスタム タブの要素の ID です。
ItemProp 属性
省略可能。ItemID 属性が参照する、カスタム タブの要素の属性です。Visual Studio アドイン メソッドに渡す引数を構築します。指定しなかった場合は、要素自体がアドイン メソッドに渡され、アドインはカスタム タブの要素と直接対話できるようになります。
ToolID 属性
必須。Visual Studio アドインの ID です。ActionID 属性はこの属性値を使用します。
ActionID 属性
必須。<InvokeMethod> 要素の ToolID 属性によって提供される、Visual Studio アドインのアクション ID です。
ProgID 属性
必須。Visual Studio アドインのプログラム ID です。
Method 属性
必須。アドインの呼び出し時に呼び出される、Visual Studio アドインのメソッドです。
ExecuteOnRender 属性
必須。タブを描画するときに Visual Studio アドイン メソッドを呼び出すかどうかを示します。true または false の値を使用します。
RenderAreaID 属性
必須。Visual Studio アドインから返された結果を描画するときに使用する要素の ID です。

<AddInWorker> の例

次のコードは、Visual Studio アドインを呼び出し、表のセル内に結果を描画するためのシンプルなタブ定義ファイルの例です。


<TabDefinition>
   <Tab ID="vs_AddInWorkerTab" Name="アドイン ワーカー" Filterable="false">
      <Application ID="VSAddInWorkerTab">
         <Action ID="MyAddInInvoke">
            <InvokeMethod ToolID="MyAddInInvoke" />
         </Action>
         <Pane ID="MyAddInPane" Title="マイ アドイン">
            <Break/>
               <TextSpan>アドインに渡すテキスト:</TextSpan>
            <Break/>
               <AddInWorker ID="MyAddIn" ActionID="MyAddInInvoke" 
RenderAreaID="RenderMyAddInXML" ProgID="MySPAddin.Connect" 
Method="HelloWorld" ExecuteOnRender="false">
                  <RenderArgs>
                     <RenderArg ItemID="MyAddInField" ItemProp="value" />
                  </RenderArgs>
                  <RenderInput>
                     <TextField ID="MyAddInField"></TextField>
                     <Button Text="Go" AccessKey="G" OnClick="MyAddInInvoke"></Button>
                  </RenderInput>
               </AddInWorker>
                  <Table ID="RenderMyAddInTable">
                     <TableRow>
                        <TableCell ID="RenderMyAddInXML"></TableCell>
                     </TableRow>
                  </Table>
         </Pane>
      </Application>
   </Tab>
</TabDefinition>

次のコードは、上記のアドイン ワーカーから呼び出される Visual Studio アドイン メソッドです。


public string HelloWorld(string MyAddInArg)
{
   string returnXML;
   returnXML = "<TextSpan>AddInWorker の受信内容: " + MyAddInArg +    "</TextSpan>";
   return returnXML;
}

まとめ

これまで説明したように、Visual Studio のスタート ページにカスタム コンテンツを追加し、そのコンテンツを複数のマシンに配置できます。スタティックなコンテンツを表示するか、サーバーでファイルを管理して変化するコンテンツを表示するかを選択できます。どちらの方法を選択した場合でも、スタート ページをカスタマイズすると、自身や組織のニーズに合わせて IDE を調整できます。

詳細については、MSDN ライブラリの「スタート ページ」を参照してください。

カスタム コンテンツの例

次のサンプルは、Visual Studio のスタート ページをカスタマイズする方法についてのアイディアを提供するためのものです。Visual Studio で、サンプルをコピーして XML ファイルに貼り付けるときは、[編集] メニューの [HTML として貼り付け] を使用します。スタート ページにこれらのサンプルを表示する方法については、「スタート ページのカスタム コンテンツを配置する」を参照してください。

例 1 ~ 3 は、提供された XML に変更を加えずに配置および表示することができます。例 4 では、提供されている XML を変更する必要があります。タブを表示するために必要な変更については、コメントとして入力された説明を参照してください。

作成するタブ参照先
説明テキストとグラフィックが関連付けられたスタティックなハイパーリンクを含む 1 つのタブ。 例 1: シンプルなタブ
ハイパーリンクがそれぞれに関連付けられた、3 つのサブタブを含む 1 つのタブ。 例 2: 複数のペインを含むタブ
説明テキストとグラフィックが関連付けられたスタティックなハイパーリンクを含む 1 つのタブ。 例 3: スタティック コンテンツを含むタブ
サーバーのタブ定義ファイルからコンテンツが提供される、ハイパーリンク、グラフィック、およびテキストを含む 1 つのタブ。 例 4: ライブ コンテンツを含むタブ

例 1: シンプルなタブ

この例では、スタティックなハイパーリンクを含む 1 つのタブが表示されます。2 つのハイパーリンクに説明テキストとグラフィックが関連付けられていますが、他の 2 つには関連付けられていません。

Aa290348.vsstpgexample1(ja-jp,VS.71).gif
図 2. シンプルなタブ

この例は、次の XML を使用して作成されています。


<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
   <Tab ID="simple_tab" Name="例 1: シンプルなタブ" Filterable="false">
      <Application ID="Simple_App">
         <Pane ID="Main_Pane">
            <TextSpan ID="Tab_Description" FontSize="16">例 1--A 
シンプルなカスタム タブ</TextSpan><Break/>
            <Break/>
            <TextSpan ID="disclaimer">注: このサンプル タブのコンテンツおよびコードは
            ホワイト ペーパー「Visual Studio .NET 2003 のスタート ページをカスタマイズする」の一部であり、
            Microsoft 製品サポート サービスによるサポートの対象ではありません。</TextSpan>
            <Break/>
            <HRule/>
            <LinkGroupSet>
               <LinkGroup ID="WebSites" Title="グラフィックとテキスト付きのハイパーリンク"/>
               <LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンクの一覧"/>
            </LinkGroupSet>
         </Pane>
         <Data>
            <Context>
               <Links>
                  <LItemEx>
                     <LItem ID="LI1" LinkGroup="WebSites" 
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif" 
URL="http://www.microsoft.com">Microsoft</LItem>
                     <Blurb>Microsoft ホームページ</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI2" LinkGroup="WebSites" 
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem>
                     <Blurb>Microsoft Developer Network</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI3" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com">Microsoft の検索</LItem>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI4" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の検索</LItem>
                  </LItemEx>
               </Links>
            </Context>
         </Data>
      </Application>
   </Tab>
</TabDefinition>

例 2: 複数のペインを含むタブ

この例では、[サイト]、[検索]、および [その他] の 3 つのペインを含む 1 つのタブが表示されます。各ペインにハイパーリンクがあります。

Aa290348.vsstpgexample2(ja-jp,VS.71).gif
図 3. 複数のペインを含むカスタム タブ

この例は、次の XML を使用して作成されています。


<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
   <Tab ID="tabbed_tab" Name="例 2: 複数のペインを含むタブ" 
Filterable="false">
      <Application ID="Tabbed_App">
         <PaneSet ID="Main_PaneSet">
            <Pane ID="Sites_Pane" Title="サイト">
               <TextSpan ID="SitesTab_Description" FontSize="16">例 
2--A 複数のペインを含むカスタム タブ</TextSpan><Break/>
               <Break/>
            <TextSpan ID="disclaimer">注: このサンプル タブのコンテンツおよびコードは
            ホワイト ペーパー「Visual Studio .NET 2003 のスタート ページをカスタマイズする」の一部であり、
            Microsoft 製品サポート サービスによるサポートの対象ではありません。</TextSpan>
            <Break/>
               <LinkGroup ID="WebSites" Title="グラフィックスとテキスト付きのハイパーリンク"/>
            </Pane>
            <Pane ID="Search_Pane" Title="検索">
               <TextSpan ID="SearchTab_Description" FontSize="16">例 
2--A 複数のペインを含むカスタム タブ</TextSpan><Break/>
               <LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンクの一覧"/>
            </Pane>
            <Pane ID="Other_Pane" Title="その他">
               <TextSpan ID="Tab_Description" FontSize="16">例 2--A 
複数のペインを含むカスタム タブ</TextSpan><Break/>
               <LinkGroup ID="OtherSites" Title="シンプルなハイパーリンクの一覧"/>
            </Pane>
         </PaneSet>
         <Data>
            <Context>
               <Links>
                  <LItemEx>
                     <LItem ID="LI1" LinkGroup="WebSites" 
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif" 
URL="http://www.microsoft.com">Microsoft</LItem>
                     <Blurb>Microsoft ホームページ</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI2" LinkGroup="WebSites" 
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem>
                     <Blurb>Microsoft Developer Network</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI3" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com">Microsoft の検索</LItem>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI4" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の検索</LItem>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI5" LinkGroup="OtherSites" 
URL="http://www.gotdotnet.com">GotDotNet</LItem>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI6" LinkGroup="OtherSites" 
URL="http://msn.com">MSN</LItem>
                  </LItemEx>
               </Links>
            </Context>
         </Data>
      </Application>
   </Tab>
</TabDefinition>

例 3: スタティック コンテンツを含むタブ

この例では、スタティック ハイパーリンクを含む 1 つのタブが表示されます。2 つのハイパーリンクに説明テキストとグラフィックが関連付けられていますが、他の 2 つには関連付けられていません。

Aa290348.vsstpgexample3(ja-jp,VS.71).gif
図 4. スタティック コンテンツを含むタブ

この例は、次の XML を使用して作成されています。


<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
   <Tab ID="static_tab" Name="例 3: スタティック コンテンツを含むタブ"
Filterable="false">
      <Application ID="Static_App">
         <Pane ID="Main_Pane">
            <TextSpan ID="Tab_Description" FontSize="16">例 3--
 スタティック コンテンツを含むタブ</TextSpan><Break/>
         <Break/>
         <TextSpan ID="disclaimer">注: このサンプル タブのコンテンツおよびコードは
         ホワイト ペーパー「Visual Studio .NET 2003 のスタート ページをカスタマイズする」の一部であり、
         Microsoft 製品サポート サービスによるサポートの対象ではありません。</TextSpan>
            <Break/>
            <LItemEx>
               <LItem ID="LI1" LinkGroup="WebSites" 
Image="http://www.microsoft.com/library/homepage/images/
mslogo-blue.gif" URL="http://www.microsoft.com">Microsoft</LItem>
               <Blurb>Microsoft ホームページ</Blurb>
            </LItemEx>
            <LItemEx>
               <LItem ID="LI2" LinkGroup="WebSites" 
Image="http://msdn.microsoft.com/library/shared/toolbar/
graphics/banners/MSDN_banner.gif" 
URL="http://msdn.microsoft.com">MSDN</LItem>
               <Blurb>Microsoft Developer Network</Blurb>
            </LItemEx>
            <HRule/>
            <LItemEx>
               <LItem ID="LI3" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com">Microsoft の検索</LItem>
            </LItemEx>
            <LItemEx>
               <LItem ID="LI4" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">
MSDN の検索</LItem>
            </LItemEx>
            <HRule/>
         </Pane>
      </Application>
   </Tab>
</TabDefinition>

例 4: ライブ コンテンツを含むタブ

この例では、ハイパーリンク、グラフィック、およびテキストを含む 1 つのタブが表示されます。タブのコンテンツは、サーバーのタブ定義ファイルによって提供されます。サーバーで更新されるコンテンツには 2 つの部分があります。適切なサーバーへのポインタを含むクライアント側のタブ定義ファイルと、XML を描画し、XML がスタート ページのスキーマと一致していることを確認するサーバー側のファイルです。

Aa290348.vsstpgexample4(ja-jp,VS.71).gif
図 5. ライブ コンテンツを含むタブ

この例のコンテンツを表示するには、クライアントのタブ定義ファイル (example4.xml)、サーバーのタブ定義ファイル (serverFeed.xml)、および XML の検証も行う、サーバーの .asp フィード ファイル (serverFeed.asp) という 3 つのファイルを作成する必要があります。また、example4.xml は、serverFeed.asp と serverFeed.xml が保存されている Web サーバーを参照するように変更する必要があります。

クライアント側のタブ定義ファイル コンテンツ: example4.xml

このクライアント XML は、Web サーバーに置かれている .asp ファイル (serverFeed.asp) を参照します。Web サーバーは http://www.test-1.msn.com として参照されます。サーバーが利用できない場合は、"サーバーからコンテンツを読み込めません" というメッセージがタブに表示されます。


<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
   <Tab ID="live_tab" Name="例 4: ライブ コンテンツを含むタブ" 
Filterable="true">
      <Application ID="Live_App">
         <Pane ID="Main_Pane">
            <Break/>
            <TextSpan ID="Tab_Description">サーバーからコンテンツを読み込めません。</TextSpan>
         </Pane>
      </Application>
      <Feeds>
         <Feed>
            <!--次の <Source> 要素の "http://www.test-1.msn.com/serverFeed.asp" を、
サーバーの .asp ファイルの保存場所へのパスに
置換します。-->
            <Source LCID="1033" URL="http://www.test-1.msn.com/
serverFeed.asp">
               <Arg Name="feedName">defaultFeed</Arg>
            </Source>
         </Feed>
      </Feeds>
   </Tab>
</TabDefinition>

サーバー側のタブ定義ファイル コンテンツ: serverFeed.xml

この例では、サーバーの XML を serverFeed.xml としてホスト Web サーバーのルート ディレクトリに保存しておく必要があります。クライアントのタブ定義ファイルが serverFeed.asp を呼び出すと、.asp ファイルは serverFeed.xml を参照します。


<?xml version="1.0" encoding="UTF-8" ?>
<TabDefinition>
   <Tab ID="live_tab" Name="Live" Filterable="true">
      <Application ID="Live_App">
         <Pane ID="Main_Pane">
            <Break/>
            <TextSpan ID="Tab_Description" FontSize="16"> 例 4--A 
ライブ コンテンツを含むタブ</TextSpan> <Break/>
            <Break/>
            <TextSpan ID="disclaimer">注: このサンプル タブのコンテンツおよびコードは
            ホワイト ペーパー「Visual Studio .NET 2003 のスタート ページをカスタマイズする」の一部であり、
            Microsoft 製品サポート サービスによるサポートの対象ではありません。</TextSpan>
            <Break/>
            <HRule/>
            <LinkGroupSet>
               <LinkGroup ID="WebSites" Title="グラフィックスとテキスト付きのハイパーリンク"/>
               <LinkGroup ID="SearchEngines" Title="シンプルなハイパーリンクの一覧"/>
            </LinkGroupSet>
         </Pane>
         <Data>
            <Context>
               <Links>
                  <LItemEx>
                     <LItem ID="LI1" LinkGroup="WebSites" 
Image="http://www.microsoft.com/library/homepage/images/mslogo-blue.gif" 
URL="http://www.microsoft.com">Microsoft</LItem>
                     <Blurb>Microsoft ホームページ</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI2" LinkGroup="WebSites" 
Image="http://msdn.microsoft.com/library/shared/toolbar/graphics/banners/
MSDN_banner.gif" URL="http://msdn.microsoft.com">MSDN</LItem>
                     <Blurb>Microsoft Developer Network</Blurb>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI3" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com">Microsoft の検索</LItem>
                  </LItemEx>
                  <LItemEx>
                     <LItem ID="LI4" LinkGroup="SearchEngines" 
URL="http://search.microsoft.com/advanced_search.asp?siteid=us/dev">MSDN の検索</LItem>
                  </LItemEx>
               </Links>
            </Context>
         </Data>
      </Application>
   </Tab>
</TabDefinition>

サーバー側の ASP コンテンツ: serverFeed.asp

次の VBScript を実行すると、スタート ページのタブのコンテンツとして serverFeed.xml ファイルが使用されます。ASP コードによって、有効な XML がスタート ページに返されます。このファイルは、ホスト Web サーバーのルート ディレクトリに serverFeed.asp として保存されている必要があります。


<% @ CODEPAGE="65001" LANGUAGE="VBScript" %>
<% IF (Request.QueryString("feedName") = "defaultFeed") THEN
Response.ContentType = "Text/XML"
Response.Redirect "serverFeed.xml"
END IF
%>
<!--この関数は、クライアントに返される URL が、スタート ページで使用する上で安全であるかどうかを確認します。-->
function replaceBadURLs(xpath, xmlDocument) 
{
   var i = 0;
   var regex = "^http:|^https:|^news:|^ms-help:|^vs:";
   var nodes = xmlDocument.selectNodes(xpath);
   
   for(i = 0 ; i < nodes.length ; i++)
   {
      if(!nodes.item(i).text.match(regex))
      {
         nodes.item(i).text = "";
      }
   }
}