ボタンを押したときに任意のデータを生成して、それをファイルとしてダウンロードしたい、という相談があったので実装してみました。
その作業の記録です。
まず、空のアプリケーションを作成します。名前をファイルの生成とします。
アプリケーションができたら、ホーム・ページをページ・デザイナで開きます。
Content Bodyにタイプが静的コンテンツのリージョンを作成します。タイトルをファイルの作成とします。
作成したリージョンにボタンを作成します。ボタン名をB_FILE、ラベルをファイルの生成とします。
ボタンの動作のアクションをこのアプリケーションのページにリダイレクトを選択し、ターゲットとしてページは1(自分自身)、リクエストとしてB_FILEを設定します。
ヘッダーの前にプロセスを作成します。このプロセス内で生成した文字列をファイルとしてダウンロードします。
コードとしては以下を設定します。
begin owa_util.mime_header('text/plain', false, 'utf-8'); htp.p('Content-Disposition: attachment; filename="sample.txt"'); owa_util.http_header_close; htp.p('select * from dual;'); apex_application.stop_apex_engine; end;
プロセスの名前はファイルの生成、サーバー側の条件として、タイプをリクエスト = 値、値をB_FILEとします。これで、リクエストとしてB_FILEが渡されているときだけ(つまり、B_FILEのボタンが押されたときだけ)、このプロセスが実行されます。
作成したアプリケーションのエクポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/generatefile.sql
Oracle APEXでのアプリケーション開発の一助になれば幸いです。
完