ファセット検索で使用しているクラシック・レポートの結果を、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を呼び出しているだけのシンプルなコードです。
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
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; |
ページ・デザイナにてページ番号3のファセット検索のページを開きます。
左ペインでプロセス・ビューを開き、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_PROCESSにCSVDOWNLOADを渡すことにより、Ajaxコールバックとして作成したプロセスCSVDOWNLOADが実行されます。
以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭にあるGIF動画のように動作します。
更新したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/faceted-search-with-chart-csvdownload.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完