ファセット検索の結果をCSV形式でダウンロードする
上記では、クラシック・レポートの問合せコンテキストを取得し、パイプライン表関数を作っています。
最近のAPEXではAPIとして、APEX_REGION.OPEN_QUERY_CONTEXTが提供されています。このファンクションを使用することにより、面倒なパイプライン表関数の作成が不要になります。
サンプル・データセットのEMPから作成できるDemonstration - EMP / DEPT のアプリケーションに含まれているファセット検索のページに、CSV形式のダウンロードを行うボタンを実装してみます。
ファセット検索のページはページ番号3です。
ファセット検索のフィルタ済みリージョンとして指定されているクラシック・レポートのリージョンに静的IDを設定します。APEX_REGION.OPEN_QUERY_CONTEXTの引数p_region_idとして与えるリージョンIDを、ビューAPEX_APPLICATION_PAGE_REGIONSから取り出すために使用します。
今回はEMPLOYEESとしています。
Ajaxコールバックとして、CSV形式のダウンロードを実行するプロセスを作成します。識別の名前はCSVDOWNLOADとします。
PL/SQLコードとして以下を記述します。
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 apex_application_page_regions.region_id%type; | |
l_context apex_exec.t_context; | |
l_export apex_data_export.t_export; | |
begin | |
/* クラシック・レポートのリージョンの静的IDより、region_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 = 'EMPLOYEES'; | |
/* クラシック・レポートのQuery Contextを取得する。 */ | |
l_context := apex_region.open_query_context( | |
p_page_id => :APP_PAGE_ID | |
,p_region_id => l_region_id | |
); | |
l_export := apex_data_export.export ( | |
p_context => l_context | |
,p_format => apex_data_export.c_format_csv | |
,p_file_name => 'download' ); | |
apex_exec.close( l_context ); | |
apex_data_export.download( p_export => l_export ); | |
end; |
作成したAjaxコールバックを呼び出すボタンDOWNLOADを作成します。
ボタンはどこにおいても動作します。今回はブレッドクラムの右端に配置しています。
動作のアクションとしてこのアプリケーションのページにリダイレクトを選択します。
ターゲットのページとして現在開いているページ番号である&APP_PAGE_ID.、AjaxコールバックCSVDOWNLOADを呼び出すために、リクエストに以下を記述します。
APPLICATION_PROCESS=CSVDOWNLOAD
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完