対話グリッドの列に設定した値より、別の列の選択リストに値を設定する方法を紹介します。
以下の動画のように、列Product Nameに製品名を入力したときに、列Shopに販売会社を設定します。列Shopに設定された販売会社は初期値で、選択リストを開いて変更できます。
以下のスクリプトを実行し、上記のサンプル・アプリケーションで使用するスキーマを作成します。
アプリケーション作成ウィザードを起動します。アプリケーションの名前は選択リストの初期化とします。
ホーム・ページを削除し、代わりに対話グリッドのページを追加します。
対話グリッドのページは、以下の設定で作成します。
ページ名はOrders、表またはビュー、編集を許可を選択します。
表またはビューとしてSHP_ORDERSを選択します。
詳細のホームページとして設定にチェックを入れます。
アプリケーションが作成されたら、ページ・デザイナで対話グリッドのページを開きます。
ページ・プロパティのJavaScriptのファンクションおよびグローバル変数の宣言に以下を記述します。
var defaultShops;
この変数defaultShopsは、製品名と販売会社の組み合わせをキャッシュするために使用します。
対話グリッドShp Ordersを選択し、静的IDとしてordersを設定します。
プロセス・ビューを開きます。
製品名より販売会社の初期値を求めるプロセスを、Ajaxコールバックとして作成します。
識別の名前はGET_DEFAULT_SHOPとします。この名前は、JavaScript側から呼び出すファンクションapex.server.processの引数として与えるため、変更はできません(変更する場合は、apex.server.processの引数も変更する)。
タイプはコードを実行を選び、ソースのPL/SQLコードとして以下を記述します。
レンダリング・ビューを開きます。
列PRODUCT_NAMEに動的アクションを作成します。
識別の名前はonChange ProductName、タイミングはデフォルトでイベントが変更、選択タイプが列、対話グリッドがShp Orders、列がPRODUCT_NAMEになります。
TRUEアクションとしてJavaScriptコードの実行を選択し、設定のコードとして以下を記述します。
ページ・アイテムのAPIのsetValueは、引数として表示値(pDisplayValue)、値(pValue)を指定できますが、対話グリッドのsetValueは値(pValue)のみです。そのため、対話グリッドの選択リストやポップアップLOVへ値を設定するには、JSON形式{ d: "表示値", v: "値" } で渡します。
この状態でアプリケーションを実行すると、記事の先頭のGIF動画のように動作します。
とはいえ、対話グリッドに製品名を入力するたびに、ブラウザからデータベースへの問合せが発生するため、今ひとつ反応が良くありません。
ページが開いた時点で、製品名と販売会社の組み合わせを変数defaultShopsにキャッシュする機能を追加します。
プロセス・ビューを開き、AjaxコールバックとしてGET_DEFAULT_SHOPSを作成します。PL/SQLコードとして以下を記述します。
レンダリング・ビューに戻り、ページ・プロパティのJavaScriptのページ・ロード時に実行に以下を記述します。