チャートをクリックし、クリックした条件でレポートをフィルタリングしてみます。
チャートは円チャート、レポートには対話グリッドを使います。
最初にリンク設定を使った実装を行います。対話グリッドのリンク設定は、マニュアルの以下の部分で説明されています。
対話グリッド・レポートへのリンクの設定
https://docs.oracle.com/cd/F70953_01/htmdb/linking-to-interactive-grid-reports.html
対話モード・レポートへのリンクの設定
https://docs.oracle.com/cd/F70953_01/htmdb/linking-to-interactive-reports.html
対話グリッドと対話モード・レポートでのリンク設定の違いは、それぞれのパラメータ名の接頭辞です。対話グリッドはIG、対話モード・レポートはIRになります。それ以外はほぼ同じです。今回はリンクするレポートに対話グリッドを使いますが、対話モード・レポートでも同様の実装ができます。
サンプルの実装に使用するデータ・セットを用意します。
サンプル・データセットの国に含まれる人口の情報を使います。
SQLワークショップのユーティリティのサンプル・データセットを開きます。
名前が国のデータ・セットをインストールします。
次へ進みます。
作成される表やビューが表示されます。
データセットのインストールを実行します。
サンプル・データセットの国がインストールされました。
国のアクションがインストールから更新に変わります。
サンプル・データセット国にはビューEBA_COUNTRIES_Vが含まれますが、今回の用途には列が不足しています。具体的にはREGION_IDとSUB_REGION_IDです。そのため、新規にビューEBAC_COUNTRIES_Vを作成します。
SQLコマンドより実行します。
ビューEBAC_COUNTRIES_Vが作成されます。
このビューを使ったチャートとレポートを表示するアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。
アプリケーションの名前はチャートとレポートの連携とします。デフォルトで作成されるホーム・ページは、編集をクリックして削除します。ページの追加をクリックし、代わりに対話グリッドのページを追加します。
対話グリッドを選択します。
ページ名は国一覧とします。表またはビュー、読取り専用を選択します。表またはビューとして、先ほど作成したビューEBAC_COUNTRIES_Vを指定します。
アプリケーションにはこのページしかないため、このページが必ずホーム・ページになります。
ページの追加をクリックします。
アプリケーションの作成を実行します。
アプリケーションが作成されます。ページ・デザイナでページ番号1の国一覧を開きます。
ページ国一覧にチャートを表示するリージョンを作成します。
新規にリージョンを作成し、レポートEbac Countriesの上に配置します。
識別のタイトルは地域別、タイプとしてチャートを選択します。ソースの位置はローカル・データベース、タイプは表/ビュー、表名としてEBAC_COUNTRIES_Vを指定します。
プロパティ・エディタの属性タブを開き、チャートのタイプを円に変更します。
シリーズを選択し、識別の名前を人口に変更します。
ソースの位置としてリージョン・ソースを選択します。列のマッピングのラベルにREGION_NAME、値集計に合計、値にPOPULATIONを指定します。
この時点でアプリケーションを実行してみます。
これから、円チャート上でクリックした地域で、対話グリッドがフィルタリングされる設定を行います。
シリーズ人口を選択し、リンクのタイプとしてこのアプリケーションのページにリダイレクトを選択します。
ターゲットをクリックし、リンク・ビルダー・ターゲットを開きます。
アイテムの設定の名前にIG_REGION_NAMEを入力し、値として®ION_NAME.を選択します。
名前の指定方法は、ドキュメントの対話グリッドのName構文およびValue構文に記載されています。
IG[region static ID]<operator>_<target column alias>
ページに対話グリッドが1つだけの場合は、[region static ID]の指定を省略できます。また、<operator>が等しいを意味するEQの場合は、<operator>を省略できます。
つまりIG_REGION_NAMEと®ION_NAME.によるリンク設定は、ページに1つしかない対話グリッドの列REGION_NAMEの値が®ION_NAME.(円チャート上でクリックした地域名)に等しいというフィルタ条件として、対話グリッドに設定されます。
すでに設定済みのフィルタ条件をリセットするため、キャッシュのクリアに1(ページ番号の指定です)、アクションとしてリージョンのリセットを選択します。
以上でOKをクリックします。
以上の設定により、円チャート上でクリックした地域名を値としたフィルタ条件が、対話グリッドに設定されます。フィルタ条件が設定されるため、対話グリッドとして表示されるデータも、選択した地域に限定されます。
レポートの表示列を調整します。レポートの表示列からCapitalを除きます。
アクションの列を実行します。
このレポート設定をいつでも呼び出せるように保存します。
アクション・メニューのレポートの別名保存を呼び出します。
自分以外の人もこのレポート設定を呼び出せるように、タイプとして代替を選択します。レポート設定の名前は必須列のみとします。
保存をクリックします。
レポート設定を保存した直後は、保存したレポートが適用された状態になります。
対話グリッドの保存されたレポートを開きます。代替のレポートを保存したのに、保存されたレポートに表示されない場合は、ページ・デザイナをリロードします。データベースに更新された内容をページに表示するには、ページ・デザイナであってもページをリロードする必要があります。
保存されたレポートの必須列のみを選択し、識別の別名をRequiredColumnsOnlyに変更します。保存を実行するとリンク列の最後のコロン以降がIG_RequiredColumnsOnlyに変わります。これはリクエストとして指定する値です。
リクエストの指定は、ドキュメントの対話グリッドのRequest構文に説明されています。
IG[region static ID]_<report_alias>
ターゲットとなるページに対話グリッドが1つだけの場合、[region static ID]は省略できます。今回はレポートの別名(report_alias)をRequiredColumnsOnlyに変更したので、リクエストの値はIG_RequiredColumnsOnlyになります。
シリーズ人口のリンクのターゲットを再度開き、詳細のリクエストにIG_RequiredColumnsOnlyを指定します。
レポートのリンク設定を使ったチャートとレポートの連携方法の説明は以上になります。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/link-chart-and-report.zip
リンク設定を使ったチャートとレポートの連携は、比較的簡単に実装できます。しかし、今回の例のようにチャートとレポートが同じページに配置されていると、必ずページのリロードが発生するため、ページの応答がいまひとつ良くありません。
次の記事では動的アクションと少々のJavaScriptのコードを記述し、ページのリロードを行わない実装を試みます。
続く