演習 1: ユーザーが旅行の詳細を参照できるようにする

レッスン 6: アプリケーションのメインページの作成では、データベース内のレコードを参照するために「Trip Detail」ページにボタンを追加しました。この演習では、これらのボタンのアクションを実装するアクションページを作成します。

ブラウズ機能を有効にするには、ナビゲーションアクションページを作成します。このページにより、ユーザーがいずれかのナビゲーションボタンをクリックした後に、「Trip Detail」ページに表示する旅行レコードが決定されます。このアクションページで表示する HTML 出力はありません。その代わりに、このページではダイナミック SQL を使用し、「Trip Detail」ページで表示する tripID を識別します。このダイナミック SQL ステートメントでは、正しい tripID がパラメータとして URL に渡され、その後「Trip Detail」ページに転送されます。

ダイナミック SQL の使用による Trips テーブルの参照

tripID は、Trips テーブル内の旅行を識別します。レッスン 6: アプリケーションのメインページの作成では、URL のパラメータとして ID を渡すことで、各旅行に関する「Trip Detail」ページを表示しました。たとえば、次の URL を使って、20 という ID を持つ旅行の詳細情報を表示します。

http://localhost/cfdocs/getting_started/my_app/tripdetail.cfm?ID=20

ナビゲーションアクションページ (navigationaction.cfm) の主な目的は、クリックしたナビゲーションボタンに応じて、正しい tripID を含んだ URLを使って「Trip Detail」ページに移動することです。旅行は追加されたり後で削除されたりするため、ID 番号順に並んでいないことがあります。旅行が削除された場合、その ID が抜けていることがあります。たとえば、現在の tripID が 10 のときに、ユーザーが [Next] ナビゲーションボタンをクリックすると、次の旅行の tripID が、11 ではなく 14 の場合があります。

正しい tripID を取り出すには、現在の tripID に基づいて次の ID (または前の ID、最初の ID、最後の ID) が何であるかを判別するために、データベースに対してクエリーを実行する必要があります。ナビゲーションアクションのページでは、ダイナミック SQL を使用して、使用に適した ID を検索するクエリーを作成します。

レッスン 4: ダイナミッククエリーの作成では、ColdFusion 文字列を操作することで、SQL SELECT ステートメントの WHERE 節を作成しました。このレッスンでも、同様にナビゲーション用の WHERE 節を作成します。さらに、正しい ORDER BY 節を使用して、trips テーブルから適切な旅行の行を選択します。

次の表に、現在の tripID が 6 の場合にユーザーがクリックしたナビゲーションボタンに基づく正しい SQL ステートメントを示します。

ナビゲーションボタン 正しい旅行 ID に移動する SQL ステートメント SQL ステートメントの説明

1 行め

SELECT tripID FROM trips

ORDER BY tripID

すべての tripID のリストを昇順 (1、2、3...) で返します。

前の行

SELECT tripID FROM trips

WHERE tripID < 6

ORDER BY tripID DESC

6 より小さいすべての tripID のリストを降順 (5、4、3...) で返します。

次の行

SELECT tripID FROM trips

WHERE tripID > 6

ORDER BY tripID

6 より大きいすべての tripID のリストを昇順 (7、8、9...) で返します。

最終行

SELECT tripID FROM trips
ORDER BY tripID DESC

すべての tripID のリストを降順 (99、98、97...) で返します。

1 つ前の行または次の行へ移動する SQL の SELECT ステートメントを正しく作成するには、現在の tripID を知る必要があります。「Trip Detail」ページで非表示入力タグ RecordID を使用するのはそのためです。次に、ナビゲーションアクションのページでフォーム変数 #Form.RecordID# を使用して、SQL SELECT ステートメントの WHERE 節で正しいテストを作成できます。

結果の行数制限

前の表の各 SQL ステートメントは、旅行の行の結果セットを返します。結果セットの範囲は、ゼロから任意の行までです。ナビゲーションアクションページでは、結果セットの最初の行だけを「Trip Detail」ページに表示するよう、結果セットのカウントを 1 に制限する必要があります。

ColdFusion では、この目的を達成するための maxRows 属性が cfquery タグにあります。この属性は、データベースから返される結果行の最大数を制限します。「Trip Detail」ページで一度に表示する行数を 1 に制限する場合は、maxRows を 1 に設定します。

ナビゲーションアクションページを作成するには :

  1. 空白ファイルを作成します。
  2. 空白ファイルに次のコードを入力します。
    <!---			ナビゲーションボタン			--->
    	<cfquery name="TripQuery" datasource="CompassTravel" maxrows="1">
    		SELECT tripID FROM trips			
    		<cfif IsDefined("Form.btnPrev.X")>
    			WHERE tripID < #Form.RecordID#
    			ORDER BY tripID DESC		
    		<cfelseif IsDefined("Form.btnNext.X")>
    			WHERE tripID > #Form.RecordID#
    			ORDER BY tripID		
    		<cfelseif IsDefined("Form.btnFirst.X")>
    			ORDER BY tripID		
    		<cfelseif IsDefined("Form.btnLast.X")>
    			WHERE tripID > #Form.RecordID#
    			ORDER BY tripID DESC
    		</cfif>
    	</cfquery>
    	<cfif TripQuery.RecordCount is 1>
    		<cflocation url="tripdetail.cfm?ID=#TripQuery.tripID#">
    	<cfelse>
    		<cflocation url="tripdetail.cfm?ID=#Form.RecordID#">
    	</cfif>
    
  3. my_app ディレクトリに、"navigationaction.cfm" という名前を付けてファイルを保存します。

メモ: これまでのレッスンでは、ColdFusion コンポーネントにクエリーを設定することにより、適切なコーディング方法を順守してきました。ナビゲーションアクションページは、CFC ではなく ColdFusion ページですが、これはパフォーマンスを最適化するためです (ナビゲーションアクションページにはクエリーだけが含まれるため)。コードの再利用に関する詳細については、『ColdFusion MX 開発ガイド』のColdFusion 要素の作成を参照してください。

コードの確認

次の表では、ナビゲーションボタンのリクエストを処理するコードについて説明します。

コード 説明
<cfquery
name="TripQuery"
dataSource="CompassTravel"
maxRows=1>

cfquery タグにより、「TripQuery」という名前のクエリーが「CompassTravel」というデータソースに対して実行されるよう指定します。戻り値の行数は 1 以下です (maxRows=1)。

SELECT tripID FROM trips

SQL の SELECT ステートメントは、常に「SELECT tripID FROM trips」で始まります。

<cfif IsDefined("Form.btnPrev.X")>
   WHERE tripID < #Form.RecordID#
   ORDER BY tripID DESC

<cfelseif IsDefined("Form.btnNext.X")>
   WHERE tripID > #Form.RecordID#
   ORDER BY tripID

<cfelseif IsDefined("Form.btnFirst.X")>
   ORDER BY tripID

<cfelseif IsDefined("Form.btnLast.X")>
   WHERE tripID > #Form.RecordID#
   ORDER BY tripID DESC

</cfif>

</cfquery>

cfif タグでは、ユーザーが表示ページでナビゲーションボタンを押したかどうかを検証しています。「Trip Detail」ページのボタンでは、イメージタイプの HTML 入力タグが使われているため、X プロパティを確認しています。X プロパティは、ユーザーがグラフィックボタンをクリックした場合に送られるマウスのオフセット位置です。

 

WHERE および ORDER BY 節は、ユーザーがクリックするナビゲーションボタンによって異なります。

<cfif TripQuery.RecordCount is 1>
<cflocation url="tripdetail.cfm?RecordID=#TripQuery.tripID#">
<cfelse>
<cflocation url="tripdetail.cfm?RecordID=#Form.RecordID#">
</cfif>

cfif タグは、クエリーが、表示する行を返したかどうかを確認します。表示する行が返された場合、その tripID を利用して、cflocation タグで移動先の URL を作成します。表示する行がクエリーから返されない場合、非表示フォーム変数 RecordID に渡された現在のレコード ID を持つ詳細ページに戻ります。

ナビゲーションをテストするには :

  1. my_app ディレクトリにある "tripdetail.cfm" ページをブラウザで表示します。
  2. [Next Row] ボタンをクリックします。

    「Trip Detail」ページに 2 番めの旅行の情報が表示されます。

  3. [Previous Row] ボタンをクリックします。

    「Trip Detail」ページに最初の旅行の情報が表示されます。

  4. [Last Row] ボタンをクリックします。

    「Trip Detail」ページに最後の旅行の情報が表示されます。

  5. [First Row] ボタンをクリックします。

    「Trip Detail」ページに最初の旅行の情報が表示されます。


ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告

バージョン7

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/coldfusion/7_jp/htmldocs/browse_2.htm