2024年2月6日火曜日

ファセット検索の検索結果をAPEX_REGION.OPEN_QUERY_CONTEXTを呼び出してCSV形式でダウンロードする

ファセット検索の検索条件が適用された状態で、クラシック・レポートをCSV形式でダウンロードする方法について、以前に以下の記事を書いています。

ファセット検索の結果をCSV形式でダウンロードする

上記では、クラシック・レポートの問合せコンテキストを取得し、パイプライン表関数を作っています。

最近のAPEXではAPIとして、APEX_REGION.OPEN_QUERY_CONTEXTが提供されています。このファンクションを使用することにより、面倒なパイプライン表関数の作成が不要になります。

サンプル・データセットEMPから作成できるDemonstration - EMP / DEPT のアプリケーションに含まれているファセット検索のページに、CSV形式のダウンロードを行うボタンを実装してみます。

ファセット検索のページはページ番号です。

ファセット検索のフィルタ済みリージョンとして指定されているクラシック・レポートのリージョンに静的IDを設定します。APEX_REGION.OPEN_QUERY_CONTEXTの引数p_region_idとして与えるリージョンIDを、ビューAPEX_APPLICATION_PAGE_REGIONSから取り出すために使用します。

今回はEMPLOYEESとしています。


Ajaxコールバックとして、CSV形式のダウンロードを実行するプロセスを作成します。識別名前CSVDOWNLOADとします。

PL/SQLコードとして以下を記述します。

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


以上で、CSVダウンロードが実装できました。

Oracle APEXのアプリケーション作成の参考になれば幸いです。