%@ LANGUAGE = VBScript %>
ActiveX サーバー コンポーネントは、データへのアクセスの方法として再利用可能な手段を提供することによって、スクリプトの機能を拡張するものです。たとえば、Database Access コンポーネントは、スクリプトからのデータベースへのクエリーを可能にするものですが、これによってデータベースへのクエリーを実行したいときにいつでもこの Database Access コンポーネントを使うことができ、同じ作業を実行するために改めて複雑なスクリプトを作成する必要がなくなります。コンポーネントは、オートメーション (ActiveX サーバー コンポーネントはオートメーション サーバーです) をサポートしているプログラミング言語から、またはスクリプトから呼び出すことができます。このモジュールでは、ASP に付属の ActiveX サーバー コンポーネントを使って Web サイトのサンプルを操作してみます。
ここでは、.asp ファイルの基本的な作成方法について既に習得していることを前提として説明しています。まだ習得されていない方は、このチュートリアルの「モジュール 1」を実行してください。
注意 このモジュールで作業結果を保存したり表示したりするためには、Web サーバー上、または Web サーバー上で書き込みおよび実行のアクセス権が設定されているリモート ディレクトリ共有上に、Active Server Pages がインストールされている必要があります。
インターネット上の 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 ファイルを更新することができ、個々の広告提供者がそれぞれサイトの異なる場所で異なる広告用ファイルを管理することができます。
Ad
に割り当てます。<% Set Ad = Server.CreateObject("MSWC.Adrotator") %>
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
コンポーネント インスタンスを変数に割り当てることにより、後でスクリプトの中から参照できるようになります。
<%= Ad.GetAdvertisement("/aspsamp/tutorial/lessons/adrot.txt") %>
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
GetAdvertisement メソッドにはパラメータが 1 つ (広告データのあるファイルの名前、この例では Adrot.txt) あります。このメソッドは、指定されたパラメータに応じて、広告画像用の完全に整形された HTML <IMG> タグを返します。GetAdvertisement メソッドの前には Ad Rotator コンポーネント インスタンスに割り当てた変数名 Ad を付け、その後にファイル Adrot.txt へのパスを指定します。等号は、メソッド (実際には ad) が返した値をクライアント ブラウザに送ることを示します。
サンプル サイト Adventure Works にも /advworks/excursions/default.asp">Ad Rotator コンポーネントの例があります。[ASP ソースの表示] ボタンをクリックすると、Ad Rotator コンポーネントを操作するスクリプト コマンドを見ることができます。
注意 Adventure Works をまだ訪れていない場合、上のリンクをクリックすると自動的に Adventure Works のホーム ページにリダイレクトします (このホーム ページは Adventure Works サイトの一部です)。この場合は、Web ブラウザの [戻る] ボタンをクリックしていったんこのチュートリアルに戻ってから、もう一度リンクをクリックしてください。
ハイパーメディアの世界では、急速な勢いで拡張される多様な機能をすべてのブラウザがサポートできるとは限りません。たとえば、フレーム、BGM、Java アプレット、テーブルなどの機能は、一部のブラウザしかサポートしていないのが現状です。Browser Capabilities コンポーネントを使えば、個々のブラウザの機能に適した形式でコンテンツを提供することが可能になります。たとえば、ブラウザがテーブルをサポートしていない場合に、Browser Capabilities コンポーネントを使い、テキストなどの代わりの形式でデータを表示することができます。
この作業では、作業 2 で作成した Ad Rotator スクリプトを拡張します。ユーザーのブラウザが ActiveX コントロールをサポートしていれば、さまざまな "フェードイン/アウト" の効果を備えた一連の広告を順に見ることができますが、ActiveX コントロールをサポートしていないブラウザでも、ユーザーは Ad Rotator コンポーネントが表示する代わりの広告を見ることができます。ブラウザによって広告縦覧の表示方法を変える例を次に示します (ActiveX をサポートしていないブラウザを使用している場合は、作業 1 と同じものが表示されます)。
OBJbrowser
に割り当てます。このコマンドは必ず <% Set Ad...%>
のステートメントのすぐ上に挿入してください。<% Set OBJbrowser = Server.CreateObject("MSWC.BrowserType") %>
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
<% 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 と互換性のないコンピュータ上でこの作業を完了するには、使用しているコンピュータに対応したものにコントロールを置き換えてください。
<% End If %>
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
注意 ファイル Browscap.ini (デフォルトで C:\Winnt\system32\inetsrv\ASP\Cmpnts にあります) には、Browser Capabilities コンポーネントがブラウザとその機能を識別するために必要なデータが格納されています。新しいブラウザを使用する場合や、デフォルトの Browscap.ini ファイルに列挙されていないブラウザ依存の機能を使用している場合は、このファイルに新しいデータを追加する必要があります。
Database Access コンポーネントは、ADO (Active Data Objects) を使用して、ODBC (Open Database Connectivity) 準拠のデータベース (またはテーブル形式のデータ構造) に格納されている情報に簡単にアクセスするための機能を提供するものです。この作業では、Microsoft(R) Access の顧客データベースに接続してその内容を一覧表示します。ここでは、SQL の SELECT ステートメントを使ってデータを取り出し、HTML のテーブルを作成してその結果を表示する方法について学びます。
Database Access コンポーネントを使ってデータベースを操作する前に、まずコントロール パネルの ODBC アプリケーションでデータベースを識別する必要があります。この例では、ASP のサンプル Web サイトに付属の Microsoft(R) Access データベースを使います。
2 種類のデータ ソースがあります。[ユーザー] は現在のユーザーだけが利用でき、[システム] はそのコンピュータを使用している人であれば誰でも利用できます。Web サーバーで使用するデータ ソースは必ず [システム] にします。
<% Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
OBJdbConnection.Open "AWTutorial"
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト コマンドが既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
RSCustomerList
) に格納します。次のスクリプト コマンドをコピーして、OBJdbConnection.Open
ステートメントのすぐ下に貼り付けます。
SQLQuery = "SELECT * FROM Customers" Set RSCustomerList = OBJdbConnection.Execute(SQLQuery) %>
以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、このスクリプト行が既に挿入されていますので、コピーしたスクリプトを貼り付けて上書きしてください。
SELECT という文字列を変数 SQLQuery に割り当てずに直接 Execute メソッドに渡せば、この 2 行を 1 行で記述することもできます。しかし、SQL SELECT ステートメントが長い場合には、文字列をいったん SQLQuery などの変数名に割り当ててからそれを Execute に渡したほうがコードが読みやすくなります。
結果セットは、SQL の SELECT ステートメントの中で指定されたフィールドによってその構造が決まるテーブルとして扱うことができます。このため、クエリーから返された行は、結果セットの行に対してループを実行するだけで簡単に表示できます。この例では、返されたデータは HTML のテーブルの行として表示されます。
<% 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 によって作成され、返されたデータがスクリプト コマンドによって挿入されます。
<% RScustomerList.MoveNext Loop %>
さらに詳細な 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 サーバー コンポーネントの記述 にジャンプしてください。