Oracle Application Expressでは、リリース3.1から宣言的なBLOB
サポートが提供されているため、開発者はフォームでのファイルのアップロード、およびレポートでのファイルのダウンロードや表示を行うことができます。BLOB
の表示とダウンロードは、PL/SQLを使用して手続き的に作成することもできます。このセクションでは、ファイルのアップロード、ダウンロードおよび表示を行う方法と、BLOB
列に格納されているファイルを正しく管理するために重要となる追加のファイル属性(MIME
タイプやファイル名など)の管理方法について説明します。この機能を使用すると、簡単にOracle Application Expressアプリケーションを拡張して、イメージ、ドキュメント、ビデオなどのファイルを管理できます。
この項に含まれる内容は次のとおりです。
フォームを作成する場合(アプリケーションの作成ウィザードを使用して、フォーム型またはレポートおよびフォーム型のページを作成するか、フォーム型のリージョンを作成)、または既存のフォームにアイテムを追加する場合、BLOB
型のデータベース列がソースであるアイテムは、ファイル参照型のアイテムになります。フォームがINSERT
にコールされる場合、ユーザーが選択したファイルは、BLOB
列にロードされます。フォームが更新にコールされる場合、ダウンロード・リンクが「参照」ボタンの右に表示されます。ユーザーは、このリンクを使用してファイルをダウンロードできます。
デフォルトのBLOBサポートでは、一般的なアプリケーションでBLOB
を効果的に管理するために必要とされるすべての情報が提供されているわけではありません。列がBLOB
であるという情報に加えて、ファイルの詳細情報も提供されると、エンド・ユーザーの使いやすさが向上します。この追加情報の管理を簡単に行うために、(DB_COLUMN
に加えて)追加コンポーネントを使用できるようにアイテムのソース属性が拡張されています。
位置 | 属性 | 必須 | 説明 |
---|---|---|---|
1 | BLOB を含む列 |
はい | BLOB タイプの列の名前(大/小文字が区別されます)。 |
2 | MIMEタイプ列 | いいえ | MIME タイプを格納するために使用する列名(大/小文字が区別されます)。 |
3 | ファイル名列 | いいえ | BLOB のファイル名を格納するために使用する列名(大/小文字が区別されます)。ユーザーがファイルをダウンロードするときにNULLの場合は、この列名がデフォルトで使用されます。 |
4 | 最終更新列 | いいえ | BLOB の最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOBをブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。 |
5 | キャラクタ・セット列 | いいえ | BLOB のキャラクタ・セットを格納するために使用する列名(大/小文字が区別されます)。キャラクタ・セットのエンコーディングを維持する必要がある場合など、アジア言語で最も使用されます。 |
6 | コンテンツ配置 | いいえ | inline またはattachment を指定します。その他の値はすべて無視されます。attachment がデフォルト値です。inline はMIME タイプが指定されている場合のみ指定できます。 |
7 | ダウンロード・テキスト | いいえ | ダウンロード・リンクに使用する文字列。何も指定されていない場合は、Download が使用されます。これは置換をサポートしています(翻訳されたアプリケーションに有効です)。 |
次に例を示します。
RESUME:RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume
ファイル参照タイプのアイテムを使用しており、そのソースが1つ以上のコロンを含むデータベース列(RESUME:
など)である場合、 「ソース」の下にリンク「BLOBダウンロードの書式マスク」が表示されます。このポップアップは、BLOB書式に必要なすべてのパラメータを入力するために役立ちます。
最低でも、1つ以上の末尾のコロンを使用してデータベースのBLOB
列を指定する必要があります(RESUME:
など)。これにより、Oracle Application Expressリリース3.0.1との互換性が維持されます。
ヒント: 実際の例を確認するには、サンプル・アプリケーションのページ6 (「Add/Modify Products」)に移動し、アイテムP6_PRODUCT_IMAGEを確認します。「デモンストレーション・アプリケーションの実行」を参照してください。 |
この追加情報を提供するには、MIME
タイプ属性とファイル名属性を格納して追跡するための列を実表に追加することをお薦めします。この追加は表を拡張するだけで簡単に行うことができます。次に例を示します。
ALTER TABLE emp ADD (ATTACH_MIMETYPE VARCHAR2(255), ATTACH_FILENAME VARCHAR2(255), ATTACH_LAST_UPDATE DATE);
フォームを手動で作成している場合も、この機能を利用できます。DML_PROCESS_ROW
タイプのDMLプロセスを使用して、ファイル・タイプ(ファイル参照)のアイテム内に記述されている書式をページ上で使用します。この処理により、表名と主キーの列が決定されます。
ファイル参照の使用時はNULL
への設定が存在しないため、イメージ参照を削除するメカニズムを提供する必要がある場合は、イメージを削除する特別なボタン(必要な列を無効化する機能を持つボタン)を含める必要があります。次に例を示します。
UPDATE demo_product_info SET product_image = NULL, MIMETYPE = NULL, FILENAME = NULL, IMAGE_LAST_UPDATE = NULL, CHARSET = NULL WHERE product_id = :P6_PRODUCT_ID;
ヒント: 実際の例を確認するには、サンプル・アプリケーションのページ6 (「Add/Modify Products」)→「Delete Image」プロセスに移動します。「デモンストレーション・アプリケーションの実行」を参照してください。 |
Oracle Application Expressでは、従来のレポートと対話モード・レポートの両方に対するBLOB
サポートが提供されています。ウィザードを使用してレポートを作成し、BLOB
タイプの列を含める場合は、基本的なサポートが含まれます。ダウンロード機能を使いやすくするために、生成後に詳細情報を追加する必要があります。
レポートにダウンロード・リンクを容易に含めることができるように、レポートにはBLOB
の長さ(dbms_lob.getlength(RESUME)
など)を選択します。長さが0の場合、BLOB
はNULL
となり、ダウンロード・リンクは表示されません。同様に、ダウンロード・リンクの書式を設定できる、日付または数に対する書式マスクを指定します。DOWNLOAD書式は、次の例のように3つ以上のパラメータを指定する必要があるという点で他の書式マスクより複雑です。
DOWNLOAD:EMP:RESUME:EMPNO
次の表に、DOWNLOAD書式のパラメータの説明を示します。
位置 | 属性 | 必須 | 説明 |
---|---|---|---|
1 | DOWNLOAD | はい | DOWNLOADレポート書式マスクを指定します。 |
2 | 表名 | はい | BLOB タイプのターゲット列を含む表の名前(大/小文字が区別されます)。 |
3 | BLOBを含む列 | はい | BLOB タイプの列の名前(大/小文字が区別されます)。 |
4 | 主キー列1 | はい | 主キー列1の名前。大文字と小文字が区別されます。 |
5 | 主キー列2 | いいえ | 主キー列2の名前。大文字と小文字が区別されます。 |
6 | MIMEタイプ列 | いいえ | MIME タイプを格納するために使用する列名(大/小文字が区別されます)。 |
7 | ファイル名列 | いいえ | BLOB のファイル名を格納するために使用する列名(大/小文字が区別されます)。ユーザーがファイルをダウンロードするときにNULL の場合は、この列名がデフォルトで使用されます。 |
8 | 最終更新列 | いいえ | BLOB の最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOB をWebブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。 |
9 | キャラクタ・セット列 | いいえ | BLOB のキャラクタ・セットを格納するために使用する列名(大/小文字が区別されます)。キャラクタ・セットのエンコーディングを維持する必要がある場合など、アジア言語で最も使用されます。 |
10 | コンテンツ配置 | いいえ | inline またはattachment を指定します。その他の値はすべて無視されます。MIME タイプが提供され、ファイルが表示可能なタイプである場合は、ファイルが表示されます。MIME タイプが提供されていない場合、またはファイルをインラインで表示できない場合、ユーザーはダウンロードを行うように求められます。 |
11 | ダウンロード・テキスト | いいえ | ダウンロード・リンクに使用する文字列。何も指定されていない場合は、Download が使用されます。これは置換をサポートしています(翻訳されたアプリケーションに有効です)。 |
次に例を示します。
DOWNLOAD:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume
DOWNLOAD:
で始まる書式マスクを使用するレポート列がある場合、書式の下にリンク「BLOBダウンロードの書式マスク」が表示されます。このポップアップは、DOWNLOAD書式に必要なすべてのパラメータを入力するために役立ちます。
ヒント: 実際の例を確認するには、サンプル・アプリケーションのページ29 (「Master Detail」)→「Items for Order #&P29_ORDER_ID.」リージョン→「Product Image」列に移動します。「デモンストレーション・アプリケーションの実行」を参照してください。 |
作業中のBLOB
がイメージである場合は、レポートでも表示できます。そのためには、新しいレポート書式マスク「IMAGE」を使用します。MIME
タイプに関係なく、レポートでは常にBLOBの表示が試行されます。BLOBのレンダリングを行うことができない場合は、壊れたイメージが表示されます。
次の表に、IMAGE書式マスクのパラメータの説明を示します。
位置 | 属性 | 必須 | 説明 |
---|---|---|---|
1 | IMAGE | はい | IMAGEレポート書式マスクを指定します。 |
2 | 表名 | はい | BLOB タイプのターゲット列を含む表の名前(大/小文字が区別されます)。 |
3 | BLOBを含む列 | はい | BLOB タイプの列の名前(大/小文字が区別されます)。 |
4 | 主キー列1 | はい | 主キー列1の名前。大文字と小文字が区別されます。 |
5 | 主キー列2 | いいえ | 主キー列2の名前。大文字と小文字が区別されます。 |
6 | MIMEタイプ列 | いいえ | MIME タイプを格納するために使用する列名(大/小文字が区別されます)。 |
7 | ファイル名列 | いいえ | IMAGE書式には使用しませんが、IMAGEとDOWNLOAD間で書式を簡単に変更する場合に必要です。 |
8 | 最終更新列 | いいえ | BLOB の最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOB をWebブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。 |
9 | キャラクタ・セット列 | いいえ | IMAGE書式には使用しませんが、IMAGEとDOWNLOAD間で書式を簡単に変更する場合に必要です。 |
10 | コンテンツ配置 | いいえ | IMAGE書式には使用しませんが、IMAGEとDOWNLOAD間で書式を簡単に変更する場合に必要です。 |
11 | 代替テキスト | いいえ | イメージに関連付けられている代替タグに使用する文字列です。 |
次に例を示します。
IMAGE:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume
書式マスクがIMAGE:で始まるレポート列がある場合、書式「BLOBダウンロードの書式マスク」の下のリンクを参照してください。このポップアップはIMAGE書式に必要なすべてのパラメータの入力に役立ちます。
ダウンロード・リンクを指定した組込み方式を使用するかわりに、APEX_UTIL.GET_BLOB_FILE_SRC
ファンクションを使用できます。この方法を使用すると、イメージの表示形式をより具体的に設定できます(高さタグおよび幅タグを使用)。この方法は、有効なOracle Application Expressセッションからコールされた場合のみ有効であることに注意してください。また、BLOB
を記述するパラメータを、アプリケーション内の有効なアイテムの書式としてリストする必要もあります。この項目は後でファンクションが参照します。
関連項目: Oracle Application Express APIリファレンスの「GET_BLOB_FILE_SRCファンクション」 |