本記事は下記の記事の続きの内容になっています。
この記事では、フォーム付き対話モードレポートのフォームのプロパティにBLOB関連ファイルを入力することで、編集フォームから文書をダウンロードできるようになりました。
今回はレポートにダウンロードリンクを出現させてダウンロードする方法になります。
サマリ
今回ははまりポイントがあるので、まずははまる例から説明します
0.はまりポイントの説明
手順の説明
- レポートのソースをSQL問合せに変更する
- BLOBダウンロード列の列プロパティの設定をする
はまりポイントの説明
前回作った下記状態の画面のName列の右に文書ファイルのダウンロードリンクの列を入れることを考えます。
そのために、まずはこの画面のページデザイナに移動します。
画面は下記のようになっています。
直観的には、列のところに、BLOB列であるDOC列を列の同期化で表示(列の文字列の上で右クリック→列の同期化を選択)させ、プロパティの識別でタイプをBLOBのダウンロードにし、BLOB属性をそれぞれ指定すれば、うまくいきそうな雰囲気がします。
すると、下記エラーのみ表示されて表にデータが何もでてこない状態になってしまいます。
ORA-06502: PL/SQL: 数値または値のエラー: 文字から数値への変換エラー。が発生しました
BLOB列を直接レポート列として扱おうとするとこのエラーが発生してしまいます。これを回避するには、BLOB列の代わりに、DBMS_LOB.GETLENGTH(DOC)
(DOCはBLOB列)のような列を指定します。
手順詳細
レポートのソースをSQL問合せに変更する
DBMS_LOB.GETLENGTH(DOC)
列を選択するためにレポートのソースをSQL問合せに変更し、DOCの代わりにDBMS_LOB.GETLENGTH(DOC)
をSELECT文に含めます
BLOBダウンロード列の列プロパティの設定をする
列の同期化で列の一覧を更新すると、先ほどSELECTに含めた列であるDOWNLOADが出てきます。後は、この列の識別タイプをBLOBのダウンロードを選択し、
また、ダウンロードリンクをファイル名にするため外観を#DOC_FILENAME#
にします。
ここで保存して実行すると、text.xlsxというファイル名のダウンロードリンクが出現しました。
参考
日日是Oracle APEX:簡単な文書管理アプリケーションを作成する
こちらのサイトでは、直リンクによるダウンロードや全文検索の追加の手順などまで記載されています。