Oracle APEXでフォーム付き対話モードレポートに文書ファイルをアップロード


APEXのフォーム付き対話モードレポートを通して、文書データ(ExcelやWordなど)を一覧表示、アップロード、ダウンロードできるやり方を記載します。文書データに関してはDBにBLOB型で持たせます。

画面

手順サマリ

  1. テーブル作成
  2. フォーム付き対話モードレポートの作成
  3. フォームのBLOB列のページアイテムプロパティにBLOB補足情報列を入力

手順詳細

テーブル作成

DOC列がドキュメントファイルを格納するBLOB列で、その他のDOC_FILENAME、DOC_MIMETYPE、DOC_CHARSET、DOC_LASTUPDが追加の補足列になります。
これらの補足列があることでドキュメントファイルが扱いやすくなります。
以下はSQLワークショップからID列を新規順序作成で指定して作成したときに生成されるSQLです。シーケンスと自動採番のトリガーまで生成してくれます。

CREATE table "DOCUMENTS" (
    "ID"           NUMBER,
    "NAME"         VARCHAR2(256),
    "DOC"          BLOB,
    "DOC_FILENAME" VARCHAR2(512),
    "DOC_MIMETYPE" VARCHAR2(512),
    "DOC_CHARSET"  VARCHAR2(512),
    "DOC_LASTUPD"  DATE,
    constraint  "DOCUMENTS_PK" primary key ("ID")
)
/

CREATE sequence "DOCUMENTS_SEQ" 
/

CREATE trigger "BI_DOCUMENTS"  
  before insert on "DOCUMENTS"              
  for each row 
begin  
  if :NEW."ID" is null then
    select "DOCUMENTS_SEQ".nextval into :NEW."ID" from sys.dual;
  end if;
end;
/   

対話モードレポートの作成

先ほど作成したテーブル(DOCUMENTS)をもとにフォーム付き対話モードレポートを持つアプリケーションを作成します。
方法はいろいろありますが、SQLワークショップからDOCUMENTSを指定してアプリケーション作成ボタンを押下して始める方法が早いです。

特に何もいじらずアプリケーション作成ボタンを押せば、以下のようなフォーム付きの対話モードレポートができあがります。まだデータがないので何もない表示されてません。

文書を登録するために、以下の順で、作成ボタンからフォームを呼び出し、文書名(リスト上の文書の名前)を入力し、文書ファイルをダイアログまたはドラッグアンドドロップで選択後、作成ボタンを押します

すると以下のような行が追加されます。

ここで鉛筆マークをクリックすると、該当行を編集するフォームに飛ぶのですが、ここにダウンロードリンクがあり、ファイルのダウンロードができます。しかし、ダウンロードファイルはdownloadという名前で拡張子も何もないファイルがダウンロードされてしまい、このままでは使いにくい感じです。(一応、ダウンロード後に元ファイル名にリネームしてに戻せば使えます)

フォームのBLOB列のページアイテムプロパティにBLOB補足情報列を入力

そこで先ほどのDOC_FILENAME、DOC_MIMETYPE、DOC_CHARSET、DOC_LASTUPDが追加の補足列をフォームに設定してファイルのアップロードと同時に名前情報などがテーブルに保存されるようにします。
方法としては、フォームの編集画面から、BLOB列のページアイテム(今回はP4_DOC)を選択して、プロパティにそれぞれ以下のように設定します。

この設定のあと、もう一度フォームからtest.xlsxを名前test2としてアップロードしてダウンロード用のファイルダイアログを見ると、以下のようにちゃんと、元のファイル名でダウンロードされます。

この時のDOCUMETSテーブルの状態をオブジェクトブラウザで見ると以下のような形になっています。

参考

日日是Oracle APEX:簡単な文書管理アプリケーションを作成する
こちらのサイトでは、文書ファイルのレポート内でのダウンロードリンクのつくり方、直リンクによるダウンロードや全文検索の追加の手順などまで記載されています。