2020年11月9日月曜日

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

 ファセット検索で使用しているクラシック・レポートの結果を、Oracle APEX 20.2で追加されたAPEX_DATA_EXPORTのAPIを使用して、CSV形式で出力してみます。クラシック・レポートの標準機能でCSVダウンロードは可能ですので、この通りに実装するケースは少ないとは思います。API自体は、XLSX、PDF、HTML、CSV、XMLおよびJSON形式の出力をサポートしています。

CSVダウンロードの実装は、以下の記事で作成したAPEXアプリケーションに追加します。

ファセット検索にチャートを追加する

ダウンロードは以下のように動作します。


ダウンロードの処理を行うプロシージャff_csv_downloadを作成します。コードは以下になります。

APEX_EXEC.OPEN_QUERY_CONTEXT、APEX_DATA_EXPORT.EXPORT、APEX_EXEC.CLOSE、APEX_DATA_EXPORT.DOWNLOADの4つのAPIを呼び出しているだけのシンプルなコードです。

create or replace procedure ff_csv_download(
p_app_page_id in number
,p_region_static_id in varchar2
,p_file_name in varchar2
)
as
l_sql varchar2(4000);
l_context apex_exec.t_context;
l_export apex_data_export.t_export;
begin
l_sql := 'select ename, job, mgr, hiredate, sal, comm, deptno from table(get_faceted_search_data('
|| p_app_page_id
|| ',' || sys.dbms_assert.enquote_literal(p_region_static_id) || '))';
apex_debug.info('SQL for CSVDOWNLOAD: %s', l_sql);
l_context := apex_exec.open_query_context(
p_location => apex_exec.c_location_local_db,
p_sql_query => l_sql
);
l_export := apex_data_export.export (
p_context => l_context
,p_format => apex_data_export.c_format_csv
,p_file_name => p_file_name );
apex_exec.close( l_context );
apex_data_export.download( p_export => l_export );
exception
when others then
apex_exec.close( l_context );
raise;
end ff_csv_download;

ページ・デザイナにてページ番号のファセット検索のページを開きます。

左ペインでプロセス・ビューを開き、Ajaxコールバックとして新規にプロセスを作成します。

識別名前CSVDOWNLOADとし、タイプとしてコードを実行を選択します。AjaxコールバックのプロセスではAPIの呼出しが使えません(APEX 22.2時点)

ソースPL/SQLコードとして作成したプロシージャを呼び出すコードを記述します。
ff_csv_download(
    p_app_page_id => :APP_PAGE_ID
    ,p_region_static_id => 'FC_EMP'
    ,p_file_name => 'employees'
);

左ペインでレンダリング・ビューを開きます。

ブレッドクラムのリージョンにボタンを作成します。

識別ボタン名B_CSVDOWNLOADラベルCSVダウンロードとします。レイアウト位置Nextを指定します。


動作アクションとしてこのアプリケーションのページにリダイレクトを選択します。ターゲットとなるページに&APP_PAGE_ID.を指定します。&APP_PAGE_ID.は現在のページ番号に置き換えられます。詳細リクエストとして以下を指定します。

APPLICATION_PROCESS=CSVDOWNLOAD

リクエストとしてAPPLICATION_PROCESSCSVDOWNLOADを渡すことにより、Ajaxコールバックとして作成したプロセスCSVDOWNLOADが実行されます。


以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭にあるGIF動画のように動作します。

更新したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/faceted-search-with-chart-csvdownload.zip

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