2022年12月6日火曜日

簡単なファイル管理アプリケーションの作成(1) - 初期アプリケーションの作成

 手元にあるファイルのアップロード、一覧およびダウンロードを行うAPEXアプリケーションを作成します。過去に公開していた記事を、APEX 22.2で作業をやり直した上で書き直しました。

最初に、以下の動作をするアプリケーションを作成します。


ファイルを保存する表の作成


クリックSQLの以下のモデルより、表SFM_CONTENTSを作成します。

# prefix: sfm
# pk: guid
contents
    title vc80 /nn
    abstract vc800
    content file
contentというのがファイルを保存する列の指定になります。クイックSQLではfileとして、ファイルを保存する簡易タイプを指定できます。この指定から、content_filename, content_mimetype, content_charset, content_lastupdといった列が自動的に追加されます。これらはOracle APEXのページ・アイテムタイプとしてファイル参照...を選択した際に、ページ・アイテムのプロパティに指定する値になります。

PKとしてGUIDを生成するように定義しているため、行の挿入時に主キー列IDとしてGUID(SYS_GUID()の値)が自動的に設定されます。IDを連番にすると、IDを推測してダウンロードを試みることが容易になるため、GUIDを選んでいます。

表を作成します。

SQLワークショップよりユーティリティクイックSQLを開きます。

左ペインにクイックSQLのモデルを記述し、SQLの生成をクリックします。続けて、SQLスクリプトの保存をクリックし、ファイルとして一旦保存します。

その後、レビューおよび実行をクリックします。


スクリプト・エディタが開きます。自動生成されたDDLで変更が必要な部分はないため、そのまま実行します。この時点では、アプリケーションの作成は行えません。


確認画面が開きます。即時実行をクリックします。


DDLの実行が成功している(つまり正常に表SFM_CONTENTSが作成されている)ことを確認し、アプリケーションの作成を実行します。



アプリケーションの作成



クイックSQLによる表の作成から続けて、アプリケーションの作成を行います。

アプリケーションの作成をクリックします。


クイックSQLにより作成された表SFM_CONTENTSをソースとするレポートとフォームのページを、アプリケーション作成ウィザードに設定すると案内されます。

そのまま、アプリケーションの作成をクリックします。


アプリケーション作成ウィザードが開きます。

表SFM_CONTENSをソースとしたレポートとフォームのページが含まれています。

アプリケーションの名前として簡易ファイル管理を設定します。それ以外はデフォルトから変更しません。

アプリケーションの作成を実行します。


アプリケーションが出来上がります。



作成されたアプリケーションの調整



SFM_CONTENTSの列CONTENTの型はBLOBです。レポートのBLOB列にて設定が必須でないBLOB属性は、手作業で設定する必要があります。

ページ・デザイナにてページ番号Contentsのページを開き、レポートSfm Contentsの列CONTENTを選択します。

CONTENTBLOB属性MIMEタイプ列としてCONTENT_MIMETYPEファイル名列としてCONTENT_FILENAME最終更新列としてCONTENT_LASTUPD文字セット列としてCONTENT_CHARSETを指定します。

これらの列はクイックSQLにて、列contentの型としてfileを指定したことにより、自動的に作成されています。

外観のテキストのダウンロードとして#CONTENT_FILENAME#を指定します。


APEXの22.1以降のバージョンでは、BLOB列はdbms_lob.getlengthを呼び出した結果に置き換わっています。そのため、ウィザードが生成したSELECT文を手作業で修正する必要が無くなりました。

続いて、フォームのページに対して同様の修正を行います。

ページ・デザイナにてページ番号Sfm Contentを開きます。

フォーム・リージョンSfm Contentに含まれるページ・アイテムP3_CONTENTを選択します。

設定MIMEタイプ列としてCONTENT_MIMETYPEファイル名列としてCONTENT_FILENAME文字セット列としてCONTENT_CHARSETBLOB最終更新列としてCONTENT_LASTUPDを指定します。


以上でアプリケーションは完成です。

続く