2021年4月6日火曜日

APEXからオブジェクト・ストレージをPL/SQL SDKで操作する(3) - オブジェクトの操作

 これからオブジェクトの操作を実装していきます。バケットの実装と同様にパイプライン表関数の実装、レポートとフォームの作成、フォームを処理するプロセスの記述を行います。

バケット内のオブジェクトの一覧を取得するパイプライン表関数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#とします。


リンクターゲットとして、オブジェクト一覧のページを指定します。ターゲットタイプこのアプリケーションのページページです。アイテムの設定として、ページ・アイテムのP4_BUCKET_NAMEは列NAMEP4_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をクリックし、保存します。


これでファイルをオブジェクト・ストレージにアップロードする部分の実装はできました。ページを実行して、ファイルをアップロードしてみます。

ファイルを選択し、作成をクリックします。


ファイルがアップロードされたことが確認できます。


変更と削除についても、ターゲットの設定にバケット名を追加する必要があります。オブジェクト一覧のページをページ・デザイナで開き、対話モード・レポートの属性に含まれるリンクターゲットを開きます。


アイテムの設定に先ほどと同様に、名前P5_BUCKET_NAME&P4_BUCKET_NAME.の行を加えます。

OKをクリックします。


以上で削除変更の適用も実装ができました。

先程アップロードしたファイルを削除してみます。


この削除処理を実行しますか。と表示されるのでOKをクリックします。


オブジェクトが削除されたことが確認できます。


これからオブジェクトのダウンロードを実装するので、ファイルをひとつアップロードしておきましょう。

続く