これからオブジェクトの操作を実装していきます。バケットの実装と同様にパイプライン表関数の実装、レポートとフォームの作成、フォームを処理するプロセスの記述を行います。
バケット内のオブジェクトの一覧を取得するパイプライン表関数list_objectsを定義します。コードは以下になります。
これをSQLワークショップのSQLスクリプトに登録し、実行します。実行手順はバケットを一覧するファンクションlist_bucketsで行ったものと同じです。
list_bucketsと同様に初回実行時は先頭の2行はエラーになります。残りの3行成功していれば、ファンクションlist_objectsが作成できています。
続いて、作成したパイプライン表関数を使ったレポートとフォームのページを作成します。作成しているアプリケーションを開き、ページの作成を実行します。
対話モード・レポートを選択します。
ページ定義の名前はオブジェクト一覧とします。フォーム・ページを含めるをONに変更し、フォーム・ページ名はオブジェクト操作とします。フォーム・ページ・モードとしてモーダル・ダイアログを選択します。
データ・ソースのソース・タイプにSQL問合せを選択し、以下のSELECT文を記述します。
select * from list_objects
(
p_namespace_name => :G_NAMESPACE_NAME
, p_bucket_name => :P4_BUCKET_NAME
, p_region => :G_REGION
, p_credential_name => :G_CREDENTIAL_NAME
)
P4_BUCKET_NAMEはページを作成した後、ページ・アイテムとして作成します。
ナビゲーションのブレッドクラムの使用、ナビゲーションの使用はともにONにします。
以上を設定し、次へ進みます。
主キー列1としてID (Varchar2)を選択し、ページの作成を実行します。
ページが作成された後、対話モード・レポートのリージョンにページ・アイテムを作成します。
ページ・アイテムP4_BUCKET_NAMEを作成します。ページ・アイテムの作成を実行し、作成されたページ・アイテムの識別の名前をP4_BUCKET_NAME、タイプを表示のみ、ラベルはBucket Nameとします。
バケット名はバケット一覧から引き継ぎます。バケット一覧を表示するレポートに、オブジェクト一覧をレポートするページへのリンクを作成します。
バケット一覧のページをページ・デザイナで開きます。
列NAMEのタイプをプレーン・テキストからリンクへ変更し、ターゲットを設定します。リンク・テキストは#NAME#とします。
リンクのターゲットとして、オブジェクト一覧のページを指定します。ターゲットのタイプはこのアプリケーションのページ、ページは4です。アイテムの設定として、ページ・アイテムのP4_BUCKET_NAMEは列NAME、P4_NAMESPACEには列NAMESPACEの値が渡されるよう設定します。OKをクリックします。
以上でオブジェクトの一覧を表示する設定が完了したので、バケット一覧のページを実行して指定したバケットに含まれるオブジェクトの一覧をリストしてみます。
バケット一覧のページの列Nameがリンクに変わっています。これをクリックします。
選択したバケットに含まれるオブジェクトの一覧画面に遷移します。登録されたオブジェクトが存在しないと、データが見つかりません。と表示されますが、オブジェクトの一覧画面はこれで完成しています。
続いてオブジェクト操作の画面を変更し、オブジェクトの作成/更新/
削除ができるようにします。
ページ・デザイナにてオブジェクト操作のページを開き、オブジェクトの操作に必要なページ・アイテムを2つ作成します。
最初に、バケット名を保持するページ・アイテムP5_BUCKET_NAMEを作成します。アイテムの作成を実行し、識別の名前をP5_BUCKET_NAMEとし、タイプは非表示にします。
次に、オブジェクト・ストレージにアップロードするファイルを指定するページ・アイテムP5_FILEを作成します。識別の名前をP5_FILEとし、タイプにファイル参照...を選択します。ラベルはFilename、それ以外はデフォルトですが、特に記憶域タイプについては、Table APEX_APPLICATION_TEMP_FILESであることを確認します。アップロードされたファイルは、こちらの表より取得します。
必要なページ・アイテムが登録されたので、プロセスを変更します。
左ペインよりプロセス・ビューを開き、プロセス・フォームオブジェクトの操作を選択します。設定のターゲット・タイプをPL/SQL Codeに変更し、挿入/更新/削除するPL/SQLコードに以下を記述します。失われた更新の防止はOFF、行のロックはNoにします。
作成のときは、ビューAPEX_APPLICATION_TEMP_FILESよりアップロードされたファイルをBLOBとして取り出し、そのBLOBをオブジェクト・ストレージに登録しています。オブジェクト名の入力がなければ、ファイル名をオブジェクト名にしています。オブジェクト名に日本語が含まれている場合に対応するため、ファイル名のエンコードをUTL_URL.ESCAPEファンクションで実施しています。更新では、オブジェクト名の変更のみが可能です。オブジェクトの削除も実装しています。
ページ・デザイナでオブジェクト一覧のページを開きます。
ボタンCREATEのクリックの際に、バケット名がフォームに渡されるようにターゲットの設定を変更します。
アイテムの設定に、名前をP5_BUCKET_NAME、値を&P4_BUCKET_NAME.とした行を追加します。
OKをクリックし、保存します。
これでファイルをオブジェクト・ストレージにアップロードする部分の実装はできました。ページを実行して、ファイルをアップロードしてみます。
ファイルを選択し、作成をクリックします。
ファイルがアップロードされたことが確認できます。
OKをクリックします。
以上で削除と変更の適用も実装ができました。
先程アップロードしたファイルを削除してみます。
この削除処理を実行しますか。と表示されるのでOKをクリックします。
オブジェクトが削除されたことが確認できます。
これからオブジェクトのダウンロードを実装するので、ファイルをひとつアップロードしておきましょう。
続く