2021年4月6日火曜日

APEXからオブジェクト・ストレージをPL/SQL SDKで操作する(4) - ダウンロードの実装

 オブジェクトのダウンロードは独立したページに実装します。

ページの作成を実行します。


 空白ページを選択します。


名前downloadページ・モード標準を選択します。ナビゲーションブラッドクラムの使用ナビゲーションの使用はともにOFFとします。

ページの作成をクリックします。


作成されたページに、ダウンロードするオブジェクトを決める引数となるページ・アイテムを作成します。

ページ・アイテムP6_BUCKET_NAMEを作成します。タイプテキスト・フィールドラベルBucket Nameとしています。

実際にはdownloadのページは表示されないため、タイプ非表示表示のみでも構いません。


同様にページ・アイテムP6_OBJECT_NAMEも作成します。


引数となるページ・アイテムを作成をしたので、実際にダウンロードを行うプロセスを作成します。

ヘッダーの前の上でコンテキスト・メニューを表示させ、プロセスの作成を実行します。


作成されたプロセスの識別名前downloadとし、ソースPL/SQLコードに以下を記述します。


DBMS_CLOUD_OCI_DBS_OBJECT_STORAGE.GET_OBJECTを呼び出してBLOBとしてAPEX(データベース)で受け取ったデータを、WPG_DOCLOAD.DOWNLOAD_FILEプロシージャを呼び出すことによってAPEXからブラウザにダウンロードしています。


一旦オブジェクト全体をデータベースで保持する形になるため、巨大なファイルの扱いには注意が必要と思われます。きちんと調べていませんが、多分、最低でもファイルのサイズ分だけPGAが消費されるのではないでしょうか。

最後にオブジェクト一覧のレポートから、オブジェクト名をクリックするとダウンロードが開始するようにリンクを設定します。

オブジェクト一覧のページをページ・デザイナで開きます。対話モード・レポートに含まれる列NAMEを選択し、タイプリンクに変更します。ターゲットとして先程作成したダウンロードを行うページ、リンク・テキスト#NAME#とします。


ターゲットとして、タイプこのアプリケーションのページページ6(ダウンロードのページ)、アイテムの設定として、P6_BUCKET_NAMEへはカレント・ページより&P4_BUCKET_NAME.P6_OBJECT_NAMEには列#NAME#を渡します。OKをクリックします。


以上でダウンロードの機能も実装完了です。オブジェクト一覧画面を表示し、動作を確認します。


列Nameのリンクをクリックすることにより、オブジェクト・ストレージからダウンロードができます。


以上でPL/SQL SDKを使ってオブジェクト・ストレージを操作するアプリケーションは完成です。オブジェクト・ストレージの操作に直接は関係しない設定は、記事が長くなるため除外しています。ですので、アプリケーションを実用レベルにあげるには、それらも調整する必要があるでしょう。

今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/oci-object-storage-manager.zip

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