1ページに対話モード・レポートを2つ作り、両方を1つのCSVファイルとしてダウンロードしてみます。元にした実装は、Ajaxコールバックを使ったCSVのダウンロードです。
以下、実装手順になります。
サンプル・データセットのEMP/DEPTがインストール済みとします。それに含まれる表EMPを対話モード・レポートのソースとします。
最初に空のアプリケーションを作成します。アプリケーションが作成されたら、ホーム・ページに対話モード・レポートを2つ作成します。
最初の対話モード・レポートの静的IDとして、emp1を設定します。
次の対話モード・レポートの静的IDは、emp2とします。
declare
l_ctx_emp1 apex_exec.t_context;
l_ctx_emp2 apex_exec.t_context;
l_rid_emp1 number;
l_rid_emp2 number;
l_exp_emp1 apex_data_export.t_export;
l_exp_emp2 apex_data_export.t_export;
begin
-- Generate CSV of IR region emp1
select region_id into l_rid_emp1 from apex_application_page_regions
where application_id = :APP_ID and page_id = 1.
and static_id = 'emp1';
apex_debug.info('region_id of emp1 is ' || l_rid_emp1);
l_ctx_emp1 := apex_region.open_query_context (
p_page_id => 1,
p_region_id => l_rid_emp1 );
l_exp_emp1 := apex_data_export.export (
p_context => l_ctx_emp1,
p_format => apex_data_export.c_format_csv,
p_file_name => 'emp1' );
apex_exec.close(l_ctx_emp1);
-- Generate CSV of IR region emp1
select region_id into l_rid_emp2 from apex_application_page_regions
where application_id = :APP_ID and page_id = 1
and static_id = 'emp2';
apex_debug.info('region_id of emp2 is ' || l_rid_emp2);
l_ctx_emp2 := apex_region.open_query_context (
p_page_id => 1,
p_region_id => l_rid_emp2 );
l_exp_emp2 := apex_data_export.export (
p_context => l_ctx_emp2,
p_format => apex_data_export.c_format_csv,
p_file_name => 'emp2' );
apex_exec.close(l_ctx_emp2);
-- merge BLOB output into 1
dbms_lob.append(l_exp_emp1.content_blob, l_exp_emp2.content_blob);
-- download as a single file.
apex_data_export.download( p_export => l_exp_emp1 );
end;
対話モード・レポートに設定されている検索条件でSQL問合せ行うコンテキストをapex_region.open_query_contextを呼び出して取得します。その問合せからCSVのデータをapex_data_export.exportを呼び出して生成します。
l_exp_emp1には対話モード・レポートemp1のデータ、l_exp_emp2には対話モード・レポートemp2のデータが保持されています。dbms_lob.appendを呼び出して、l_exp_emp2の出力をl_exp_emp1に追記したのち、apex_data_export.downloadを呼び出して、ファイルとしてl_exp_emp1の内容を出力しています。
画面上にAjaxコールバックCSVEXPORTを呼び出すボタンを追加します。
ブレッドクラムのリージョンでボタンの作成を実行します。識別のボタン名をB_EXPORT、ラベルをCSVエクスポートとします。動作のアクションとして、このアプリケーションのページにリダイレクトを選択します。
ターゲットのページには&APP_PAGE_ID. (今回の例では1に置き換わります)、詳細のリクエストとして、APPLICATION_PROCESS=CSVEXPORTを設定します。
以上でアプリケーションは完成です。アプリケーションを実行すると、最初のGIF動画の動作を確認できます。
以下に作成したアプリケーションのエクスポートを置きました。
https://github.com/ujnak/apexapps/blob/master/exports/combinedcsvexport.sql
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完