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を呼び出しているだけのシンプルなコードです。


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

左ペインでプロセス・ビューを開き、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のアプリケーション作成の参考になれば幸いです。