第7章
データベースページフローウィザード
この章では、データベースページフローウィザードの使用方法について説明します。この章の節は次のとおりです。

データベースページフローウィザードについて
exteNd Directorには、「データベースページフローウィザード」があり、データベースページフローを簡単に作成できます。 「データベースページフロー」で、データベース内のレコードの検索、表示、および変更ができます。
データベースページフローウィザードを使用すると、単一のデータベーステーブルにアクセスするフローを作成できます。また、多対1の関係(ルックアップ)または1対多の関係(マスタ/詳細)、あるいはその両方によって関係付けられた、他のテーブルに移動するフローも作成できます。
ウィザード使用後に、生成されたページフローをすぐに実行できます。 また、Pageflow Modelerを使用して、他のページフローと同様に、ページフローを変更できます。
データベースページフローウィザードにより、フォーム(XFormsテクノロジを採用しているXHTMLページ)のセットだけでなく、ページフロープロセスも生成されます。このプロセスにより、フォームが1つに融合され、シンプルなデータベースアプリケーションになります。 このアプリケーションは、データベーステーブルにアクセスするための、便利で使いやすいインタフェースになります。
単一テーブルにアクセスするフロー
次の例は、単一テーブルにアクセスする場合に使用される、典型的なデータベースページフローを示しています。

マスタ/詳細データベースフロー
データベースページフローを作成する際、どのテーブルがプライマリテーブルになるのかを指定します。 プライマリになるテーブルをウィザードが知っている場合は、選択されたさまざまなテーブル間の関係を検査して、クエリ内にレベルがいくつあるのかを判断できます。 ルックアップ(多対1の関係)が、クエリ内の単一レベルとして扱われるのに対して、マスタ/詳細(1対多の関係)は、2つのレベルとして扱われます。
マスタ/詳細の関係を持つテーブルからのデータを結合するデータベースページフローを作成すると、ウィザードにより、複数のページフロープロセスが生成されます。これは、クエリ内の各レベルに応じたプロセスです。
プライマリテーブルのデータにアクセスするフローを、親フローといいます。 親フローには、子フローを参照するページフローアクティビティ(詳細表示)があります。 子フローは、詳細テーブルにあるデータにアクセスします。 ユーザが[表示]リンクをクリックすると、親フローはそのページフローアクティビティに影響を及ぼし、制御を子フローに渡します。 ユーザが[戻る]リンクをクリックすると、子フローはその終了アクティビティに影響を及ぼし、制御を親フローに戻します。
次に、親フローの例を示します。

次に、詳細表示アクティビティから参照される、子フローの例を示します。

フォーム
データベースページフローを作成すると、次のフォーム(XHTMLファイル)が生成されます。
フォーム
|
説明
|
検索フォーム
|
検索条件を入力するためのユーザインタフェースを提供します。 ユーザが[検索]ボタンをクリックすると、検索用語がXMLドキュメントとしてサーバに送信されます。

|
結果表示
|
検索結果を1ページにまとめた要約データを表示します。 要約データは、表形式で提示されます。
この形式には、[表示]、[編集]、および[削除]のボタンがあり、その時点で選択している行を操作できます。 また、[新規レコード]ボタンもあり、新たにレコードを挿入できます。
変更内容保存のために変更ログを使用することを指定した場合は、結果表示フォームに[変更の適用]と[変更をキャンセルする]のボタンも組み込まれます。

|
詳細表示
|
結果セットの1レコードの詳細を表示します。 これには[編集]ボタンもあり、現在のレコードに関連付けられた値を変更できます。

マスタ/詳細の状態では、詳細表示フォームに子テーブルの結果ビューも表形式で表示されます。 結果ビューには、現在の親レコードにリンクされた、子テーブルのレコードすべてが表示されます。
|
レコード編集
|
プライマリテーブルに関連付けられた詳細フィールドを編集するユーザインタフェースを提供します。 レコード編集フォームには、[更新]と[キャンセル]のボタンも組み込まれます。

注記: レコード編集フォームでは、関連テーブルのカラムを編集することはできません。
|
新規レコード
|
プライマリテーブルに新規レコードを作成するためのユーザインタフェースを提供します。 このインタフェースには、新規レコードに関連付けられたカラム値を入力するためのフィールドがあります。
このフォームは、レコード編集フォームにとても類似しています。 主な相違点は、新規レコードフォームではキーフィールドの値を指定できることです(自動的に増分が加えられないキーフィールドは除く)。 新規レコードフォームには、[保存]ボタンがあり、データベースに新規レコードを追加できます。

新規レコードフォームでは、関連テーブルのカラムに値を入力することはできません。
|
ページフロー
データベースページフローウィザードにより生成されるどのページフロープロセスにも、データベースへのアクセスに必要な情報をすべて提供するデータセットオブジェクトがあります。
データセットの詳細については、データセットの操作を参照してください。
データベースページフローウィザードにより生成されるどのページフロープロセスにも、作成された各フォームに対するフォームアクティビティがあります。 さらに、フローには次のデータベースアクティビティがあります。
アクティビティ
|
説明
|
初期クエリアクティビティ
|
検索フォームで指定された検索条件に一致するすべてのレコードのキーを、データベースから取得します。
このアクティビティでは、検索用語を含むXMLドキュメント(検索フォームで生成)を入力にします。 いったんキーがデータベースから取得されると、このアクティビティにより、結果セットがレコードキャッシュに格納されます。
|
ページの取得アクティビティ
|
レコードを1ページにまとめるために要約データを取得します。 データベースページフローウィザードにより、どのカラムが要約データに含まれるのかを制御し、1ページあたりのレコード件数を指定できます。
ページの取得アクティビティでは、初期クエリアクティビティによって返されたキーセットを使用して、結果1ページ分のレコードを取得します。 要約データでのレコードの順序は、初期クエリアクティビティ実行の際に設定された順序に基づいており、ページの取得アクティビティによって取得されたレコードの順序にはなっていません。
|
レコードの取得アクティビティ
|
単一レコードの詳細フィールドを取得します。
|
レコ―ド挿入アクティビティ
|
SQLのINSERTステートメントを実行することにより、新規レコードのデータをデータベースに送信します。
注記: 変更ログを有効にしている場合、SQLのINSERTステートメントは、変更ログの適用アクティビティを実行して初めて、実行されます。
次に、実行される可能性があるステートメントの例を示します。
INSERT INTO employees (firstname, lastname, city, state, phone) VALUES (\x91 Bob\x92 , \x91 Jones\x92 , \x91 Boston\x92 , \x91 MA\x92 , \x91 617-555-9999\x92 )
正常に挿入できたら、フローは次のアクティビティに進みます。 失敗した場合は、エラーメッセージが表示されます。
|
レコ―ド更新アクティビティ
|
SQLのUPDATEステートメントを実行することにより、レコード1件の更新データをデータベースに送信します。 オプティミスティック平行性制御をサポートするには、UPDATEステートメントのWHERE句に元の(キャッシュされた)値を含めます。 WHERE句がどの行とも一致しない場合は、データが別のユーザによって変更されていることになり、その旨をユーザに伝えるためデータ平行性例外がスローされます。
注記: 変更ログを有効にしている場合、SQLのUPDATEステートメントは、変更ログの適用アクティビティを実行して初めて、実行されます。
次に、実行される可能性があるステートメントの例を示します。
UPDATE employees SET city = \xd4 Waltham\xd5 , phone = \xd4 781-484-8200\xd5 WHERE firstname = \xd4 Joseph\xd5 AND lastname = \xd4 Smithe\xd5 AND city = \xd4 Boston\xd5 AND state = \xd4 MA\xd5 AND phone = \xd4 617-555-1213\xd5 AND employeeid = 61
正常に更新できたら、フローは次のアクティビティに進みます。 失敗した場合は、エラーメッセージが表示されます。
|
レコ―ド削除アクティビティ
|
SQLのDELETEステートメントを実行することにより、ユーザが選択したレコードを削除します。 オプティミスティック平行性制御をサポートするには、DELETEステートメントのWHERE句に元の(キャッシュされた)値を含めます。 WHERE句がどの行とも一致しない場合は、データが別のユーザによって変更されていることになり、その旨をユーザに伝えるためデータ平行性例外がスローされます。
注記: 変更ログを有効にしている場合、SQLのDELETEステートメントは、変更ログの適用アクティビティを実行して初めて、実行されます。
次に、実行される可能性があるステートメントの例を示します。
DELETE FROM employees WHERE firstname = \xd4 Joseph\xd5 AND lastname = \xd4 Smithe\xd5 AND city = \xd4 Boston\xd5 AND state = \xd4 MA\xd5 AND phone = \xd4 617-555-1213\xd5 AND employeeid = 61
正常に削除できたら、フローは次のアクティビティに進みます。 失敗した場合は、エラーメッセージが表示されます。
|
変更ログの使用を指定すると、変更ログの適用アクティビティもフローに組み込まれます。
アクティビティ
|
説明
|
変更のログ適用アクティビティ
|
変更内容をすべて、レコードのキャッシュからデータベースに適用します。
変更ログの適用アクティビティの詳細については、変更ログの適用アクティビティを参照してください。
|
ページフローには、次の追加的なアクティビティもあります。
アクティビティ
|
説明
|
表示
|
ページフローを表示モードにするモードアクティビティです。
|
チェックポイント
|
フロー内でページ更新処理を担当するチェックポイントアクティビティです。 チェックポイントアクティビティは、トランザクションマーカとして動作して、ユーザが結果表示、詳細表示、レコード編集、および新規レコードのフォームを更新するたびに、処理の開始点を示します。
|
例外ハンドラ
|
処理中にスローされた例外をすべて扱う例外アクティビティです。
|
例外ページ
|
例外情報をHTMLページで表示するHTMLアクティビティです。
|

データベースページフローウィザードの使用
データベースページフローのプロセスを作成する
exteNd Directorでプロジェクトが開いている状態で、[ファイル]>[新規]の順に選択します。
[ポートレット]タブをクリックします。
[データベースページフロー]を選択して、[OK]をクリックします。

接続対象データベースのプロファイルが
ない場合は、[新規]ボタンをクリックして、作成します。

[新規データベースプロファイルの作成]ダイアログボックスで、次のように設定を指定します。
設定
|
説明
|
プロファイル名
|
プロファイルを識別する名前を入力します。
|
JDBCドライバ
|
JDBCドライバのクラス名を入力します。任意のJDBC 2.0準拠ドライバを指定できます。
SunのJDBC-ODBCブリッジドライバ(JREにあります)を使用するには、sun.jdbc.odbc.JdbcOdbcDriverを指定します。 Sunのブリッジドライバ以外のJDBCドライバを指定する場合は、ドライバクラスが開発環境によってロードできることを確認します。
MySQLを使用するには、com.mysql.jdbc.Driverを指定します。
|
JDBC URL
|
目的のデータベースを指定するURLを入力します。 たとえば、jdbc:odbc:TestDBと指定できます(TestDBがODBCデータソース名の場合)。 MySQLデータベースの場合、次のように指定できます。
jdbc:mysql://localhost:63306/ExpressPortal?user=root&password=novell
最初のコロンの後に入力するテキストは、ドライバ固有です。
|
Connection Catalog
|
(オプション)接続するデータベースのSQLカタログ(サブセット)を指定します。たとえば、PayrollDbです。データベースドライバがカタログをサポートしていない場合、この要求は無視されます。
サポートされている場合、接続カタログにより、取得されるデータベーステーブルを設定できます。接続カタログは、非常に大きなデータベースに接続している場合、またはデータベーステーブルのサブセットに接続する(たとえば、運用データベースアクセスを除外する)場合のみ役に立ちます。
|
データベース名
|
このデータベースプロファイルに関連付けるデータソースの名前を指定します。
データソースまたは完全なJNDI仕様のいずれかを指定できます。 たとえば、JDBC/ExpressPortalを指定して、ExpressPortalという接続プールを使用できます。
|
値が入力されたパネルは、次のように表示されます。

[テスト]をクリックして、JDBC URLで指定されているデータベースとの接続をチェックします。
このテストでは、データベースとのJDBC接続が行われます。接続が使用できない場合、または設定が正しく指定されていない場合、このテストは失敗します。
テストのポップアップで、データベースユーザ名およびパスワードを入力し、[OK]をクリックしてアクセスを検証します。
[OK]をクリックして、[新規データベースプロファイルの作成]ダイアログボックスを閉じます。
または、[データベースプロファイル]ダイアログボックスでデータベースユーザ名およびパスワードを入力し、[OK]をクリックします。

ページフローの
プライマリテーブルを選択して、[次へ]をクリックします。

[データベースカラム]ダイアログボックスで、データベースページフローに使用する
カラムを選択して、[OK]をクリックします。

プライマリテーブルに直接関係付けられたテーブルは、プライマリテーブルで定義されたカラムと一緒に、選択肢として[データベースカラム]ボックスにリストされます。
関係付けられたテーブルのカラムを選択するには、まず[データベースカラム]ボックスでテーブルを開き、次にカラムを選択します。
フローの
ユーザインタフェースオプションを、次のように指定します。
[各ページの結果の数の指定]フィールドで、結果リストの1ページに表示する行数を指定します。
検索フィールドを結果リストページの最上部に追加するかどうかを指定します。

[次へ]をクリックします。
コントロールをフォーム上に配列する方法を指定します。

この設定により、検索、詳細表示、レコード編集、および新規レコードのフォーム上でのコントロールの外観が決まります。
[次へ]をクリックします。
各カラムの
詳細を、次のように選択します。
[カラム]リストからカラムを選択します。
カラムの詳細を指定します。

[次へ]をクリックします。
更新方法を指定して、[次へ]をクリックします。

生成されるファイルの
ベース名を指定します。 ベース名は、選択したデータベーステーブルごとに個別に指定する必要があります。

[完了]をクリックします。

データベースページフローの変更
ウィザード実行後に、ページフローを変更するには、ページフローモデラーを使用します。 また、フォームデザイナを使用して、生成されたフォームを変更することもできます。

データベースページフロー編集の一般的ガイドライン
生成されたデータベースページフローを編集するにあたって、忘れてはならない点は次のとおりです。
ページフローを変更しても、フローで使用されているどのフォームも変更されません。
データベースページフローでのカラムの追加、削除の場合、カラムに対応するフィールドをフォーム上で手動で追加、削除する必要があります。 データベースカラムの追加、削除の場合、データセットのプロパティシートを変更する必要があります。 いったん変更したら、通常は各フォームで、カラムを設計時のインスタンスデータに追加するだけでなく、フォームに入力または出力のコントロールを追加する必要があります。
データセットのプロパティシートを変更することの詳細については、データセットの操作を参照してください。 フォームに関連付けられたインスタンスデータまたはコントロールを変更することの詳細については、を参照してください。
データベースフローを手動で変更したくない場合は、再度データベースページフローウィザードを実行できます。 ウィザードを実行すると、古いフローとフォームを上書きするか、または新規に作成するかのいずれかを実行できます。

データセットの操作

データセットにより、ページフローがデータベースに接続して、データの行とカラムにアクセスするために必要な情報が、すべて提供されます。 データセットを使用すると、さまざまなデータベース設定を変更できます。 多くの場合、初めてデータベースページフローウィザードを実行したときに指定した設定しか変更できません。 ただし、ウィザードでは利用できない、高度な設定を変更できる場合もあります。
各データセットには、次のデータベースアクティビティから参照される固有な名前があります。
初期クエリアクティビティ
ページの取得アクティビティ
レコードの取得アクティビティ
レコ―ド挿入アクティビティ
レコ―ド更新アクティビティ
レコ―ド削除アクティビティ
データセットでは、データベースへのアクセスに必要な情報をすべてカプセル化するので、これらのアクティビティはその情報を指定する必要がありません。 むしろ、データセットオブジェクトをポイントするだけで十分です。

データセットのプロパティは、次のとおりです。
[プロパティインスペクタ]タブ
|
プロパティ名
|
説明
|
アクティビティ
|
名前
|
アクティビティの名前を指定します。
|
説明
|
アクティビティの内容を説明します。
|
データセット
|
詳細設定
|
平行性設定とキャッシング設定、およびデータベースアクセスを制御する他の詳細事項を設定できます。
詳細については、詳細設定を参照してください。
|
変更ログの有効化
|
このフローに対して変更ログが有効になるかどうかを示します。
この設定を変更しても、フロー内のアクティビティとリンクが追加されたり削除されることはありません。また、フローに関連付けられたフォームが変更されることもありません。 したがって、フォームに、変更ログの適用アクティビティまたは変更の適用リンクを追加、削除する場合は、手動で変更する必要があります。
|
JNDIデータソース
|
データソースを示します。
有効なデータソースのタイプは、次のとおりです。
JDBC/ xxx 接続プールとして設定されたデータベースを参照するには、この構文を使用します。
jdbc/ ref name 展開計画のリソースプロパティを参照するには、この構文を使用します。 この場合、web.xmlファイルにリソースデータソースも持っておく必要があります。
Databases/ xxx /DataSource exteNd\xaa Application Server.に追加されたデータベースを参照するには、この構文を使用します。
|
カラム
|
ページフローに対するカラムの追加と削除、およびカラムのプロパティ変更ができます。
|
行の制限
|
取得する最大行数を指定します。
|
1ページの行数
|
結果表示フォームの1ページに表示される行数を指定します。
|
ソート順序
|
結果セットでの行のソート順序を指定できます。
詳細については、ソート順序を参照してください。
|

詳細設定
[詳細設定]ダイアログボックスでは、データベースページフローウィザードで利用できない設定を指定できます。
平行性制御
[平行性]タブで、平行性制御をチェックするカラムを選択します。

選択されたカラムは、データベースレコードが、初めて取得されて以降変更されていないことを確認するために使用されます。 変更されている場合は、レコードを変更しようとしても失敗します。
キャッシュ
[キャッシング]タブで、次のように、キャッシュ方法を指定できます。

データベースページフローに使用するキャッシュ方法は、フロー実行時のパフォーマンスに直接影響を及ぼします。 どの方法を選択するのかは、お使いのアプリケーション要件により異なります。 メモリの利用率に最も関心がある場合は、[方法1]を選択します。データベースアクセス操作を最小限に抑えることに最も関心がある場合は、[方法3]を選択します。バランスの取れた手法を希望するなら、[方法2]を選択します。
SQLの詳細
[SQLの詳細]タブでは、実行時にページフローがデータベースにアクセスする方法をさらに制御したい方向けに、さらに高度な設定が用意されています。 デフォルトのSQLハンドラクラスを無効にしたり、識別子をSQLステートメント中で引用符で囲むかどうかを指定することもできます。


ソート順序
[ソート順序]ダイアログボックスで、結果セットでの行のソート順序を指定できます。 データベースページフローでは、4レベルまでのソートができます。

Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...