<%@ LANGUAGE = VBScript %> モジュール 2: ActiveX サーバー コンポーネントの使用

モジュール 2: ActiveX サーバー コンポーネントの使用

ActiveX サーバー コンポーネントは、データへのアクセスの方法として再利用可能な手段を提供することによって、スクリプトの機能を拡張するものです。たとえば、Database Access コンポーネントは、スクリプトからのデータベースへのクエリーを可能にするものですが、これによってデータベースへのクエリーを実行したいときにいつでもこの Database Access コンポーネントを使うことができ、同じ作業を実行するために改めて複雑なスクリプトを作成する必要がなくなります。コンポーネントは、オートメーション (ActiveX サーバー コンポーネントはオートメーション サーバーです) をサポートしているプログラミング言語から、またはスクリプトから呼び出すことができます。このモジュールでは、ASP に付属の ActiveX サーバー コンポーネントを使って Web サイトのサンプルを操作してみます。

ここでは、.asp ファイルの基本的な作成方法について既に習得していることを前提として説明しています。まだ習得されていない方は、このチュートリアルの「モジュール 1」を実行してください。

注意   このモジュールで作業結果を保存したり表示したりするためには、Web サーバー上、または Web サーバー上で書き込みおよび実行のアクセス権が設定されているリモート ディレクトリ共有上に、Active Server Pages がインストールされている必要があります。


作業 1: Ad Rotator コンポーネントの使用

インターネット上の Web サイトには、広告や宣伝のために設けられたサイトが数多く見受けられます。このようなサイトでは、閲覧者の視覚的な興味をひくために、また、限られたスペースの中でできるだけ多くの広告を見てもらうために、さまざまな広告を縦覧できる機能があると便利です。Ad Rotator コンポーネントは、このような広告縦覧の機能を簡単に実現するためのコンポーネントであり、随時新しい広告を追加することもできます。この作業では、Ad Rotator コンポーネントを呼び出すスクリプトを作成し、4 つの広告をランダムに選択してそれらを順番に表示してみます。下の [表示] ボタンをクリックしてみてください。これから作成する広告縦覧の例を見ることができます。さらに繰り返しボタンをクリックすると、ほかの広告を順に見ることができます。



広告ファイルの作成

Ad Rotator コンポーネントを使って広告を挿入し、個々の広告の表示時間の割合を指定する簡単なテキスト ファイルを作成してみます。ここでは、Web サイトのサンプル Adventure Works に付属の広告用ファイルを流用します。このファイルを表示するには、テキスト エディタを使って Lessons ディレクトリ (デフォルトでは <%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\ASPSamp\Tutorial\Lessons) にあるファイル Adrot.txt を開きます。

このファイルの 1 行目では、ユーザーが広告をクリックしたときにスクリプト Adredir.asp が呼び出されるように設定されています。このスクリプトは広告の寸法を設定するもので、広告画像の幅、高さ、および境界が次の 3 つの行で設定されています。

redirect /aspsamp/advworks/adredir.asp
width 460
height 60
border 1

次に、広告用のデータが設定されています。ここでは各広告ごとに、使用する画像、ユーザーが広告をクリックしたときのジャンプ先の URL、画像に付随するテキスト、および広告の表示時間が設定されています。

/aspsamp/advworks/multimedia/images/ad_1.gif
http://www.microsoft.com
Astro Mt. Bike Company
20

広告データをファイル単位で個別に管理することで、ASP ページ全体を更新することなく、広告提供者ごとに Adrot.txt ファイルを更新することができ、個々の広告提供者がそれぞれサイトの異なる場所で異なる広告用ファイルを管理することができます。

スクリプトの作成

  1. テキスト エディタを使って Lessons ディレクトリ (デフォルトでは <%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\ASPSamp\Tutorial\Lessons) にあるファイル Ad.asp を開きます。

  2. "チュートリアル レッスン: Ad Rotator" というコメントを探します。ここにスクリプトを作成して追加します。

  3. テキスト エディタで、次のスクリプト コマンドをコピーしてコメントの後に貼り付けます。このスクリプトは、Ad Rotator コンポーネントのインスタンスを作成し、それを変数 Ad に割り当てます。
    <% Set Ad = Server.CreateObject("MSWC.Adrotator") %> 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

    コンポーネント インスタンスを変数に割り当てることにより、後でスクリプトの中から参照できるようになります。

  4. ファイルから広告データを取り出すには、Ad Rotator コンポーネントの GetAdvertisement メソッドを使います。次のコマンドをスクリプトに追加してください。
    <%= Ad.GetAdvertisement("/aspsamp/tutorial/lessons/adrot.txt") %> 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

    GetAdvertisement メソッドにはパラメータが 1 つ (広告データのあるファイルの名前、この例では Adrot.txt) あります。このメソッドは、指定されたパラメータに応じて、広告画像用の完全に整形された HTML <IMG> タグを返します。GetAdvertisement メソッドの前には Ad Rotator コンポーネント インスタンスに割り当てた変数名 Ad を付け、その後にファイル Adrot.txt へのパスを指定します。等号は、メソッド (実際には ad) が返した値をクライアント ブラウザに送ることを示します。

  5. 変更内容を Ad.asp にテキスト形式で保存し、テキスト エディタを終了します。拡張子は必ず .asp のままにしておきます。

  6. 作成した ASP ページが正しく動作するかどうかを確かめるため、ブラウザを /aspsamp/tutorial/lessons/ad.asp">http://<%= Request.ServerVariables("SERVER_NAME")%>/aspsamp/tutorial/lessons/ad.asp にポイントします (結果を確かめたら、ブラウザの [戻る] ボタンをクリックしてこのチュートリアルに戻ることができます)。

自分で作成

サンプル サイト Adventure Works にも /advworks/excursions/default.asp">Ad Rotator コンポーネントの例があります。[ASP ソースの表示] ボタンをクリックすると、Ad Rotator コンポーネントを操作するスクリプト コマンドを見ることができます。

注意   Adventure Works をまだ訪れていない場合、上のリンクをクリックすると自動的に Adventure Works のホーム ページにリダイレクトします (このホーム ページは Adventure Works サイトの一部です)。この場合は、Web ブラウザの [戻る] ボタンをクリックしていったんこのチュートリアルに戻ってから、もう一度リンクをクリックしてください。


作業 2: Browser Capabilities コンポーネントの使用

ハイパーメディアの世界では、急速な勢いで拡張される多様な機能をすべてのブラウザがサポートできるとは限りません。たとえば、フレーム、BGM、Java アプレット、テーブルなどの機能は、一部のブラウザしかサポートしていないのが現状です。Browser Capabilities コンポーネントを使えば、個々のブラウザの機能に適した形式でコンテンツを提供することが可能になります。たとえば、ブラウザがテーブルをサポートしていない場合に、Browser Capabilities コンポーネントを使い、テキストなどの代わりの形式でデータを表示することができます。

この作業では、作業 2 で作成した Ad Rotator スクリプトを拡張します。ユーザーのブラウザが ActiveX コントロールをサポートしていれば、さまざまな "フェードイン/アウト" の効果を備えた一連の広告を順に見ることができますが、ActiveX コントロールをサポートしていないブラウザでも、ユーザーは Ad Rotator コンポーネントが表示する代わりの広告を見ることができます。ブラウザによって広告縦覧の表示方法を変える例を次に示します (ActiveX をサポートしていないブラウザを使用している場合は、作業 1 と同じものが表示されます)。


重要   この作業は 作業 1を終えてから行ってください。


スクリプトの作成

  1. テキスト エディタを起動し、Lessons ディレクトリ (デフォルトでは <%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\ASPSamp\Tutorial\Lessons) にあるファイル Ad.asp を開きます。

  2. "チュートリアル レッスン: ブラウザ機能の開始" というコメントを探します。この下にスクリプトを作成して追加します。

  3. 次のスクリプト コマンドをコピーして Ad.asp に貼り付けます。このスクリプトは、Browser Capabilities コンポーネントのインスタンスを作成し、それを変数 OBJbrowser に割り当てます。このコマンドは必ず <% Set Ad...%> のステートメントのすぐ上に挿入してください。
    <% Set OBJbrowser = Server.CreateObject("MSWC.BrowserType") %>

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

  4. VBScript If...Then...Else ステートメントを使い、クライアント ブラウザが ActiveX コントロールをサポートしているかどうかを判定します。サポートしている場合は Ad Billboard コントロールを使用し、サポートしていない場合はサーバー上の Ad Rotator ActiveX サーバー コンポーネントを使用することにします。この機能を組み込むには、次のスクリプトをコピーし、手順 2 で挿入した <% Set OBJbrowser...%> のステートメントのすぐ下に貼り付けます。
    <% If OBJbrowser.ActiveXControls = "True" Then %> 
    <OBJECT HSPACE="10" WIDTH="460" HEIGHT="60" 
      CODEBASE="/aspsamp/advworks/controls/nboard.cab"  
      DATA="/aspsamp/advworks/controls/billboard.ods"> 
    </OBJECT> 
    <% Else %> 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト行が既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

    Browser Capabilities コンポーネントの ActiveXControls プロパティを調べることによって、ブラウザが ActiveX コントロールをサポートしているかどうかがわかります。

    <OBJECT> タグを使い、ActiveX コントロールを HTML ページに挿入します。このタグのパラメータには、コントロールが読み取るデータ元のファイルを指定します。この例では、コントロールは Billboard.ods というファイルから圧縮画像を読み取ります。

    注意   このコントロールは x86 と互換性のあるコンピュータ上でのみ正しく動作します。x86 と互換性のないコンピュータ上でこの作業を完了するには、使用しているコンピュータに対応したものにコントロールを置き換えてください。

  5. "チュートリアル レッスン: ブラウザ機能の終了" というコメントを探します。この下に次のスクリプトをコピーして貼り付け、If...Then ステートメントの終わりとします。
    <% End If %> 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

  6. 変更内容を Ad.asp にテキスト形式で保存し、テキスト エディタを終了します。拡張子は必ず .asp のままにしておきます。

  7. 作成した Active Server Page ページが正しく動作するかどうかを確かめるため、ブラウザを /aspsamp/tutorial/lessons/ad.asp">http://<%= Request.ServerVariables("SERVER_NAME")%>/aspsamp/tutorial/lessons/ad.asp にポイントします (結果を確かめたら、ブラウザの [戻る] ボタンをクリックしてこのチュートリアルに戻ることができます)

注意   ファイル Browscap.ini (デフォルトで C:\Winnt\system32\inetsrv\ASP\Cmpnts にあります) には、Browser Capabilities コンポーネントがブラウザとその機能を識別するために必要なデータが格納されています。新しいブラウザを使用する場合や、デフォルトの Browscap.ini ファイルに列挙されていないブラウザ依存の機能を使用している場合は、このファイルに新しいデータを追加する必要があります。


作業 3: Database Access コンポーネントの使用

Database Access コンポーネントは、ADO (Active Data Objects) を使用して、ODBC (Open Database Connectivity) 準拠のデータベース (またはテーブル形式のデータ構造) に格納されている情報に簡単にアクセスするための機能を提供するものです。この作業では、Microsoft(R) Access の顧客データベースに接続してその内容を一覧表示します。ここでは、SQL の SELECT ステートメントを使ってデータを取り出し、HTML のテーブルを作成してその結果を表示する方法について学びます。



データベースの識別

Database Access コンポーネントを使ってデータベースを操作する前に、まずコントロール パネルの ODBC アプリケーションでデータベースを識別する必要があります。この例では、ASP のサンプル Web サイトに付属の Microsoft(R) Access データベースを使います。

  1. Web サーバーが動作しているコンピュータで、[コントロール パネル] を開きます。

  2. [ODBC] アイコンをダブルクリックし、[DSN] をクリックします。

    2 種類のデータ ソースがあります。[ユーザー] は現在のユーザーだけが利用でき、[システム] はそのコンピュータを使用している人であれば誰でも利用できます。Web サーバーで使用するデータ ソースは必ず [システム] にします。

  3. [追加] をクリックし、[Microsoft Access ドライバ] を選択して、[完了] をクリックします。

  4. [データ ソース名] ボックスに 「AWTutorial」 と入力し、[選択] をクリックします。ファイル \AspSamp\AdvWorks\AdvWorks.mdb (デフォルトで Inetpub ディレクトリにあります) を選択して [OK] をクリックします。

  5. [OK] をクリックしてダイアログ ボックスを閉じます。

コンポーネント インスタンスの作成

  1. テキスト エディタを使い、Lessons ディレクトリ (デフォルトでは <%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\ASPSamp\Tutorial\Lessons) にあるファイル Database.asp を開きます。

  2. "チュートリアル レッスン: ADO 接続" というコメントを探します。この下にスクリプトをコピーして貼り付けます。

  3. いままでと同じように、使用するオブジェクトのインスタンスを作成します。次のスクリプト コマンドをコピーして貼り付けます。
    <% 
    Set OBJdbConnection = Server.CreateObject("ADODB.Connection")  

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

  4. Database Access コンポーネントでは、ODBC データ ソース (データを取得するデータベース) を指定するために、データベースへの接続を開くことも必要です。これには次のスクリプト コマンドをコピーして貼り付けます。
    OBJdbConnection.Open "AWTutorial" 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

  5. Database Access コンポーネントの Execute メソッドを使い、データベースに対して SQL の SELECT (SQLQuery) を実行して、返されたレコードを結果セット (RSCustomerList) に格納します。次のスクリプト コマンドをコピーして、OBJdbConnection.Open ステートメントのすぐ下に貼り付けます。
    SQLQuery = "SELECT * FROM Customers" 
    Set RSCustomerList = OBJdbConnection.Execute(SQLQuery) 
    %>

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト行が既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

    SELECT という文字列を変数 SQLQuery に割り当てずに直接 Execute メソッドに渡せば、この 2 行を 1 行で記述することもできます。しかし、SQL SELECT ステートメントが長い場合には、文字列をいったん SQLQuery などの変数名に割り当ててからそれを Execute に渡したほうがコードが読みやすくなります。

返される結果セットの表示

結果セットは、SQL の SELECT ステートメントの中で指定されたフィールドによってその構造が決まるテーブルとして扱うことができます。このため、クエリーから返された行は、結果セットの行に対してループを実行するだけで簡単に表示できます。この例では、返されたデータは HTML のテーブルの行として表示されます。

  1. Database.asp の中で "チュートリアル レッスン: ADO データの表示" というコメントを探します。このコメントの下に次の Do...Loop の VBScript ステートメントをコピーして貼り付けます。
    <% Do While Not RScustomerList.EOF %>
      <TR>
      <TD BGCOLOR="f7efde" ALIGN=CENTER> 
        <FONT STYLE="ARIAL NARROW" SIZE=1> 
          <%= RSCustomerList("CompanyName")%> 
        </FONT></TD>
      <TD BGCOLOR="f7efde" ALIGN=CENTER>
        <FONT STYLE="ARIAL NARROW" SIZE=1> 
          <%= RScustomerList("ContactLastName") & ", " %> 
          <%= RScustomerList("ContactFirstName") %> 
        </FONT></TD>
      <TD BGCOLOR="f7efde" ALIGN=CENTER>
        <FONT STYLE="ARIAL NARROW" SIZE=1>
        <A HREF="mailto:"> 
          <%= RScustomerList("ContactLastName")%> 
        </A></FONT></TD>
      <TD BGCOLOR="f7efde" ALIGN=CENTER>
        <FONT STYLE="ARIAL NARROW" SIZE=1> 
          <%= RScustomerList("City")%> 
        </FONT></TD>
      <TD BGCOLOR="f7efde" ALIGN=CENTER>
        <FONT STYLE="ARIAL NARROW" SIZE=1> 
          <%= RScustomerList("StateOrProvince")%> 
        </FONT></TD>
      </TR> 

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト行が既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。

    Do...Loop ステートメントは、条件が真である間ステートメントのブロックを繰り返し実行します。ループにはスクリプト コマンドのほか、HTML のテキストやタグを繰り返すことができます。このようにして、ループが実行されるごとにテーブルの行が HTML によって作成され、返されたデータがスクリプト コマンドによって挿入されます。

  2. ループが完了したら、MoveNext メソッドを使って結果セットの行ポインタを 1 行下に移動します。このステートメントも Do...Loop ステートメントの内部にあるため、ファイルの終端に達するまで繰り返されます。次のスクリプト行をコピーして、"チュートリアル レッスン: 次の行" というコメントのすぐ下に貼り付けます。
    <% 
    RScustomerList.MoveNext 
    Loop 
    %>
  3. 変更内容を Database.asp にテキスト形式で保存し、テキスト エディタを終了します。拡張子は必ず .asp のままにしておきます。

  4. 作成した ASP ページが正しく動作するかどうかを確かめるため、ブラウザを /aspsamp/tutorial/lessons/database.asp">http://<%= Request.ServerVariables("SERVER_NAME")%>/aspsamp/tutorial/lessons/database.asp にポイントします (結果を確かめたら、ブラウザの [戻る] ボタンをクリックしてこのチュートリアルに戻ることができます)

自分で作成

さらに詳細な Database Access コンポーネントの動作例を見たい方は、サンプル サイト Adventure Works の .asp ファイル /advworks/internal/Customer_listing.asp">Customer_Listing.asp をご覧ください。[VIEW ASP SOURCE] ボタンをクリックすると、顧客リストを作成するスクリプト コマンドを見ることができます。

注意   Adventure Works をまだ訪れていない場合、上のリンクをクリックすると自動的に Adventure Works のホーム ページにリダイレクトします (このホーム ページは Adventure Works サイトの一部です)。この場合は、Web ブラウザの [戻る] ボタンをクリックしていったんこのチュートリアルに戻ってから、もう一度リンクをクリックしてください。

ここまでの作業で ActiveX サーバー コンポーネントの使い方について学びました。さらに学びたい方は モジュール 3: 独自の ActiveX サーバー コンポーネントの記述 にジャンプしてください。


(C) 1996-1997 Microsoft Corporation. All rights reserved.