2021年4月13日火曜日

ダウンロードするレポートのファイル名を設定する

クラシック・レポートや対話モード・レポートのダウンロードを行ったときのファイル名をデフォルトのreport.csvから変更したい、自由に設定したいという要望がありました。


ダウンロードされるファイル名は、レポート・リージョンのAttributesダウンロードのセクションにあるファイル名で指定することができます。


ファイル名を指定するためのページ・アイテムを、画面上に設置してみます。今回は対話モード・レポートのリージョンを使って説明します。

例題に使用するアプリケーションは、サンプル・データセットEMP/DEPTをインストールしたのち、SQLワークショップオブジェクト・ブラウザより表EMPを選択し、アプリケーションの作成を実行して作成しました。


対話モード・レポートがページ番号4に作成されています。ファイル名を指定するためのページ・アイテムを、対話モード・レポートのリージョンに作成します。名前P4_FILENAMEタイプテキスト・フィールドラベルファイル名とします。ここが重要ですが、ソースセッション・ステートの保持セッションごと(ディスク)を選択します。


ファイル名が変更されたときに警告が表示されないよう、保存されていない変更の警告無効にします。


ページ・アイテムのデフォルトreportとします。


ページ・アイテムP4_FILENAMEが設定/変更されたときに、セッション・ステート(つまりデータベース)に値が保存されるよう、動的アクションを作成します。ページ・アイテムP4_FILENAME上でコンテキスト・メニューを表示させ、動的アクションの作成を実行します。


作成された動的アクションの識別名前ファイル名の保存とします。タイミングはデフォルトで、イベント変更選択タイプアイテムアイテムP4_FILENAMEとなっているはずです。これはそのままにします。


Trueアクションの実行によって、セッション・ステートに値を保存します。識別アクションとしてサーバー側のコードを実行を選択します。言語PL/SQLで、PL/SQLコードには単にnullと記載します。

送信するアイテムP4_FILENAMEを指定します。サーバー側のコードを実行する際に、P4_FILENAMEに設定されている値がブラウザからサーバーに送信されるので、PL/SQLコードとして何も実行しなくても、送信されたアイテムはセッション・ステートに保存されます。そのため、PL/SQLコードはnullで問題ありません。

プロシージャーAPEX_UTIL.SET_SESSION_STATEをサーバー側のコードとして呼び出す必要はありません。


ページ・アイテムを作成したので、対話モード・レポートのAttributesファイル名に、置換文字列として&P4_FILENAME.を設定します。


以上で設定が完了しました。レポートのダウンロードを行って、今まで実施してきた作業の結果を確認します。

対話モード・レポートのページを開き、ファイル名を入力し、アクション・メニューよりダウンロードを実行します。


ダウンロードされるファイルに、指定したファイル名が付けられることが確認できるでしょう。

ファイルのダウンロードを行わずに、セッション・ステートに保持されている値を確認することによっても、どのようなファイル名が付くのかを確認することができます。

開発者ツール・バーセッションをクリックします。


デバッグ画面が表示されます。ページ(4番)やビューの選択(ページ・アイテム)を選択/変更したあとは設定をクリックします。

画面にアイテム名アイテム値が表示されていれば、ファイル名が想定通りにセッション・ステートに保存されています。逆にリストされていなければ、何か設定に問題があるといえます。


以上になります。

 今回作成したアプリケーションを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/report-filename.sql

Oracle APEXのアプリケーション作成の参考になれば幸いです。