2021年3月10日水曜日

ボタンを押して生成したデータをダウンロードする

 ボタンを押したときに任意のデータを生成して、それをファイルとしてダウンロードしたい、という相談があったので実装してみました。

その作業の記録です。

まず、空のアプリケーションを作成します。名前ファイルの生成とします。

アプリケーションができたら、ホーム・ページをページ・デザイナで開きます。

Content Bodyにタイプ静的コンテンツのリージョンを作成します。タイトルファイルの作成とします。

作成したリージョンにボタンを作成します。ボタン名B_FILEラベルファイルの生成とします。

ボタンの動作アクションこのアプリケーションのページにリダイレクトを選択し、ターゲットとしてページ(自分自身)、リクエストとして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のボタンが押されたときだけ)、このプロセスが実行されます。


以上でアプリケーションは完成です。実行すると最初のGIF動画のように動きます。

作成したアプリケーションのエクポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/generatefile.sql

Oracle APEXでのアプリケーション開発の一助になれば幸いです。