APIを使用することにより、対話グリッドのフィルタ条件を設定します。使用するAPIはAPEX_IG.ADD_FILTERです。
チャートをクリックして、同時に複数の対話グリッドにフィルタ条件を設定します。
一番最初の記事で作成したAPEXアプリケーションを元に、サンプルの実装を進めます。
同じページに複数の対話グリッドを配置するため、識別できるように静的IDを設定します。
対話グリッドの詳細の静的IDとしてCOUNTRIES1を指定します。
作成済みの対話グリッドを重複させます。
レイアウトの新規行の開始をOFFにし、対話グリッドが横に並ぶようにします。詳細の静的IDとしてCOUNTRIES2を設定します。
以下のように対話グリッドの静的IDを含め、双方に値として®ION_NAME.を指定します。
IG[COUNTRIES1]_REGION_NAME
IG[COUNTRIES2]_REGION_NAME
これからAPIによる実装を行います。
チャート上でクリックした地域名を保持するページ・アイテムを作成します。
識別の名前はP1_REGIONとします。タイプは非表示とします。JavaScriptで値を設定するため、設定の保護された値はOFFにします。対話グリッドに表示されている値にフィルタをかけるため、このページ・アイテムに保存する値は列REGION_IDではなく列REGION_NAMEの値です。
シリーズ人口のリンクのタイプをURLにリダイレクトに変更し、ターゲットのURLとして以下を記述します。選択リストと異なり、表示値は不要なのでnullを指定します。
javascript:apex.item("P1_REGION").setValue("®ION_NAME.", null, false);
ページ・アイテムP1_REGIONに動的アクションを作成します。
作成した動的アクションの識別の名前は地域の変更とします。タイミングはデフォルトでイベントが変更、選択タイプはアイテム、アイテムはP1_REGIONになります。
TRUEアクションとしてサーバー側のコードを実行を選択し、設定のPL/SQLコードとして以下を記述します。APIを呼び出し、それぞれの対話グリッドにフィルタを設定しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_region_id number; | |
begin | |
/* 対話グリッドCOUNTRIES1へのフィルタ設定 */ | |
-- レポートIDを取得する。 | |
select region_id into l_region_id | |
from apex_application_page_regions | |
where application_id = :APP_ID | |
and page_id = :APP_PAGE_ID | |
and static_id = 'COUNTRIES1'; | |
-- レポート設定をクリアする。 | |
apex_ig.clear_report( | |
p_page_id => :APP_PAGE_ID | |
,p_region_id => l_region_id | |
,p_report_name => 'RequiredColumnsOnly' | |
); | |
-- デフォルトのフィルタを適用する。 | |
apex_ig.add_filter( | |
p_page_id => :APP_PAGE_ID | |
,p_region_id => l_region_id | |
,p_filter_value => :P1_REGION | |
,p_column_name => 'REGION_NAME' | |
,p_operator_abbr => 'EQ' | |
,p_report_name => 'RequiredColumnsOnly' | |
); | |
/* 対話グリッドCOUNTRIES2へのフィルタ設定 */ | |
-- レポートIDを取得する。 | |
select region_id into l_region_id | |
from apex_application_page_regions | |
where application_id = :APP_ID | |
and page_id = :APP_PAGE_ID | |
and static_id = 'COUNTRIES2'; | |
-- レポート設定をクリアする。2番目の対話グリッドは代替レポートを指定しない。 | |
apex_ig.clear_report( | |
p_page_id => :APP_PAGE_ID | |
,p_region_id => l_region_id | |
,p_report_id => null | |
); | |
-- デフォルトのフィルタを適用する。 | |
apex_ig.add_filter( | |
p_page_id => :APP_PAGE_ID | |
,p_region_id => l_region_id | |
,p_filter_value => :P1_REGION | |
,p_column_name => 'REGION_NAME' | |
,p_operator_abbr => 'EQ' | |
,p_report_id => null | |
); | |
end; |
送信するアイテムとしてP1_REGIONを指定します。
新規にTRUEアクションを作成し、アクションとしてページの送信を選択します。
対話グリッドに設定したフィルタを反映するためには、ページを再送信する必要があります。
以上でアプリケーションは完成です。アプリケーションを実行すると、先頭のGIF動画のように動作します。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/link-chart-and-report-api.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完