モーダル・ダイアログまたはドロワーは、レポートのページなどが開かれている状態から、そのページに重なるように表示されます。そのため、基となるページが必要で、他のページからリダイレクトする宛先にモーダル・ダイアログやドロワーのページを指定することはできません。
ドロワーを開く基となるページをリダイレクトの宛先として、その宛先に渡した引数を元にドロワーを開く実装を行なってみます。
以下のように動作します。
アプリケーション作成ウィザードを起動します。名前はドロワーのオープンとします。
ページの追加をクリックし、表EMPをソースとした対話モード・レポートとフォームのページを追加します。
対話モード・レポートを選択します。
ページ名はEMPとし、表またはビュー、対話モード・レポートを選択します。表またはビューにEMPを選択します。フォームを含めるにチェックを入れます。
ページの追加をクリックします。
以上で、アプリケーションの作成を実行します。
アプリケーションが作成されたら、リダイレクトの宛先となる対話モード・レポートのページ(ページ番号2)を、ページ・デザイナで開きます。
リダイレクト時の引数となるページ・アイテムP2_EMPNOを作成します。P2_EMPNOに指定されている従業員をドロワーで開きます。
識別の名前はP2_EMPNO、タイプは非表示とします。セッション・ステートのストレージにリクエストごと(メモリーのみ)を選択します。
引数P2_EMPNOの値より、ターゲットとなるURLを生成します。
レンダリング前にプロセスターゲットの生成を作成します。タイプとしてコードを実行を選択します。
PL/SQLコードとして以下を記述します。p_pageにダイアログまたはドロワーのページが指定されている場合はURLではなく、JavaScriptのコードが返されます。
:P2_TARGET := apex_page.get_url(
p_page => 3
,p_items => 'P3_EMPNO'
,p_values => :P2_EMPNO
);
サーバー側の条件のタイプにアイテムはNULLではないを選択し、アイテムとしてP2_EMPNOを指定します。引数P2_EMPNOに値が渡されているときに限り、P2_TARGETの値を設定します。
ターゲットとして生成されたJavaScriptを実行し、ドロワーを開く動的アクションを作成します。
動的アクション・ビューを開き、ページのロードに動的アクションターゲットを開くを作成します。
TRUEアクションとしてJavaScriptコードの実行を選択し、設定のコードに&P2_TARGET.を記述します。
クライアント側の条件のタイプとしてアイテムはnullではないを選択し、アイテムにP2_TARGETを指定します。P2_TARGETに値がない場合は、対話モード・レポートが表示され、ドロワーは開きません。
以上でドロワーを開く設定ができました。
ページ・デザイナでホーム・ページを開き、直接ドロワーを開く機能を実装します。
従業員を選択するページ・アイテムP1_EMPNOを作成します。識別のタイプとして選択リストを選びます。ラベルは従業員とします。設定の選択時のページ・アクションとしてRedirect and Set Valueを選択します。
LOVのタイプとしてSQL問合せを選択し、SQL問合せに以下を記述します。
select ename d, empno r from emp
詳細の保存されていない変更の警告として無視を選択します。選択時のページ・アクションがRedirect and Set Valueのときは、ページ・アイテムの値が変更された後にリダイレクトが発生するため、必ず警告が表示されます。警告が表示されないよう、この属性に無視を設定します。
ドロワーを開くボタンを作成します。
識別のボタン名をOPEN、ラベルをOpenとします。動作のアクションとしてこのアプリケーションのページにリダイレクトを選択します。
ターゲットをクリックし、リンク・ビルダーを開きます。
ターゲットのページは対話モード・レポートのページである2(ドロワーのページではありません)、アイテムの設定として名前にP2_EMPNO、値に&P1_EMPNO.を設定します。
以上でアプリケーションは完成です。
今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/open-drawer-on-page-redirect.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完