作成するアプリケーションは以下のように動作します。データ・ソースとしてサンプル・データセットのEMP/DEPTに含まれる表EMPを使用し、従業員のジョブを凡例に表示し、円グラフにはジョブごとの給与の合計を表示します。
空のAPEXアプリケーションを作成し、ホーム・ページにすべて実装します。
チャート・リージョンのソースのSQL問合せとして、以下を記述します。
select job, sal from emp
シリーズの名前はSalaryとします。ソースの位置にリージョン・ソースを選択し、列のマッピングのラベルに列JOB、値集計に合計、値に列SALを設定します。
チャートの凡例をクリックして非表示に設定した凡例を保存するページ・アイテムをP1_HIDDENとして作成します。タイプは非表示です。JavaScriptのコードから値を設定するため、設定の保護された値をオフにします。今回の例ではページを送信することはないため違いはありませんが、セッション・ステートのストレージはリクエストごと(メモリーのみ)にします。
円グラフに連動して従業員を一覧するクラシック・レポートを作成します。
ソースの表名はEMP、WHERE句に以下を記述します。送信するページ・アイテムとしてP1_HIDDENを設定します。
:P1_HIDDEN is null
or
job not in (
select column_value from apex_string.split(:P1_HIDDEN,',')
)
チャートとレポートを連動させる動的アクションを作成します。
円グラフのチャートのリフレッシュ後にJavaScriptコードを実行します。
TRUEアクションとして実行するJavaScriptのコードとして以下を記述します。チャート・ウィジェットに対してonoptionchangeイベントで実行されるハンドラを設定しています。チャート・ウィジェットに対するイベント・ハンドラの設定方法やonoptionchangeイベントについては、Oracle Forumや海外のパートナーのブログ記事で取り上げられているケースがありますが、公式なドキュメントからは見つけることができませんでした。
ページ・アイテムP1_HIDDENの値が変更されたときにクラシック・レポートの一覧を更新するため、ページ・アイテムP1_HIDDENに動的アクションを作成します。
タイミングのイベントは変更になります。
TRUEアクションはリフレッシュ、影響を受ける要素の選択タイプをリージョンとし、リージョンにクラシック・レポートのリージョンを選択します。
以上でアプリケーションは完成です。アプリケーションを実行すると記事の先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/pie-chart-and-report.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完