レッスン 6: アプリケーションのメインページの作成では、データベース内のレコードを参照するために「Trip Detail」ページにボタンを追加しました。この演習では、これらのボタンのアクションを実装するアクションページを作成します。
ブラウズ機能を有効にするには、ナビゲーションアクションページを作成します。このページにより、ユーザーがいずれかのナビゲーションボタンをクリックした後に、「Trip Detail」ページに表示する旅行レコードが決定されます。このアクションページで表示する HTML 出力はありません。その代わりに、このページではダイナミック SQL を使用し、「Trip Detail」ページで表示する tripID を識別します。このダイナミック SQL ステートメントでは、正しい tripID がパラメータとして URL に渡され、その後「Trip Detail」ページに転送されます。
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 |
すべての |
|
前の行 |
SELECT tripID FROM trips WHERE tripID < 6 ORDER BY tripID DESC |
6 より小さいすべての |
|
次の行 |
SELECT tripID FROM trips WHERE tripID > 6 ORDER BY tripID |
6 より大きいすべての |
|
最終行 |
SELECT tripID FROM trips |
すべての |
1 つ前の行または次の行へ移動する SQL の SELECT ステートメントを正しく作成するには、現在の tripID を知る必要があります。「Trip Detail」ページで非表示入力タグ RecordID を使用するのはそのためです。次に、ナビゲーションアクションのページでフォーム変数 #Form.RecordID# を使用して、SQL SELECT ステートメントの WHERE 節で正しいテストを作成できます。
前の表の各 SQL ステートメントは、旅行の行の結果セットを返します。結果セットの範囲は、ゼロから任意の行までです。ナビゲーションアクションページでは、結果セットの最初の行だけを「Trip Detail」ページに表示するよう、結果セットのカウントを 1 に制限する必要があります。
ColdFusion では、この目的を達成するための maxRows 属性が cfquery タグにあります。この属性は、データベースから返される結果行の最大数を制限します。「Trip Detail」ページで一度に表示する行数を 1 に制限する場合は、maxRows を 1 に設定します。
<!--- ナビゲーションボタン --->
<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>
メモ: これまでのレッスンでは、ColdFusion コンポーネントにクエリーを設定することにより、適切なコーディング方法を順守してきました。ナビゲーションアクションページは、CFC ではなく ColdFusion ページですが、これはパフォーマンスを最適化するためです (ナビゲーションアクションページにはクエリーだけが含まれるため)。コードの再利用に関する詳細については、『ColdFusion MX 開発ガイド』のColdFusion 要素の作成を参照してください。
次の表では、ナビゲーションボタンのリクエストを処理するコードについて説明します。
| コード | 説明 |
|---|---|
<cfquery |
|
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>
|
WHERE および ORDER BY 節は、ユーザーがクリックするナビゲーションボタンによって異なります。 |
<cfif TripQuery.RecordCount is 1> <cflocation url="tripdetail.cfm?RecordID=#TripQuery.tripID#"> <cfelse> <cflocation url="tripdetail.cfm?RecordID=#Form.RecordID#"> </cfif> |
|
「Trip Detail」ページに 2 番めの旅行の情報が表示されます。
「Trip Detail」ページに最初の旅行の情報が表示されます。
「Trip Detail」ページに最後の旅行の情報が表示されます。
「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