8.13 フォームおよびレポートでのBLOBサポートの理解

Oracle APEXでは、宣言的なBLOBサポートが提供されているため、開発者はフォームでのファイルの宣言的なアップロードや、レポートでのファイルのダウンロードおよび表示を行うことができます。

BLOBの表示とダウンロードは、PL/SQLを使用して手続き的に作成することもできます。このセクションでは、ファイルのアップロード、ダウンロードおよび表示を行う方法と、BLOB列に格納されているファイルを正しく管理するために重要となる追加のファイル属性(MIMEタイプやファイル名など)の管理方法について説明します。この機能を使用すると、簡単にAPEXアプリケーションを拡張して、イメージ、ドキュメント、ビデオなどのファイルを管理できます。

8.13.1 レポートでのBLOBサポートについて

Oracle APEXでは、従来のレポートと対話モード・レポートの両方に対するBLOBサポートが提供されています。

ウィザードを使用してレポートを作成し、BLOBタイプの列を含めた場合、この列はレポート定義には含まれません。BLOBダウンロード・リンクを追加するには、ダウンロード機能を提供するように、生成後に追加属性を構成する必要があります。

8.13.2 ダウンロード・リンクの追加

レポートの問合せに列を追加して、ダウンロード・リンクをレポートに追加します。

デフォルトでは、BLOB列はレポートに表示されません。BLOB列を含むレポートには、列のテキスト[unsupported data type]が表示されます。レポートにダウンロード・リンクを追加するには、レポート問合せに数値列を追加し、表示タイプ「BLOBのダウンロード」を選択する必要があります。

ダウンロード・リンクを追加するには:

  1. ページ・デザイナで、レポートを含むページを表示します。
  2. レポートの「ソース」「表/ビュー」に基づいている場合は、この属性を「SQL問合せ」に変更します。
    「SQL問合せ」属性によって、対応する問合せが自動的に生成されます。
  3. 新しい数値/整数列の式を問合せに追加します(通常は、ダウンロード・リンクで参照されるファイルのサイズ)。長さが0の場合、BLOBNULL,となり、ダウンロード・リンクは表示されません。

    ファイル・サイズを計算するには、次のような式を使用します。

    ...
       col_n,
       sys.dbms_lob.getlength([blob_column]) as download
    from ...
  4. ダウンロード列の「識別」を見つけます。「タイプ」から、「BLOBのダウンロード」を選択します。
  5. 「BLOB属性」を見つけます。次を構成します。
    1. 表名 - 表示するBLOBコンテンツを格納する表名を入力します。表名を入力するか、使用可能な表のリストから選択します。
    2. BLOB列 - 表から、表示するBLOBコンテンツを格納するBLOB列を選択します。
    3. 主キー列 - 表から、表示するBLOBコンテンツを格納する主キー列を選択します。この表の主キーが3列以上で構成される場合は、ROWID列を選択する必要があります。
    4. MIMEタイプ列 - オプションで、表から、表示するBLOBコンテンツを格納するMIMEタイプ列を選択します。
    5. ファイル名列 - オプションで、表から、表示するBLOBコンテンツを格納するファイル名列を選択します。
    6. 最終更新列 - オプションで、表から、表示するBLOBコンテンツを格納する最終更新列を選択します。この列は、他の列の値ではなく、ファイルの更新を表すことが理想的です。
    7. 文字セット列 - オプションで、表から、表示するBLOBコンテンツを格納する文字セット列を選択します。
  6. 「外観」を見つけます。
    1. テキストのダウンロード - ページのダウンロード・リンクに使用するテキストを入力します。
    2. コンテンツ配置 - 「添付」「インライン」の中から選択します。
      「添付」はファイルを強制的にダウンロードしますが、「インライン」は可能な場合はブラウザでファイルをレンダリングしようとします。インライン動作は、ファイルのMIMEタイプに対するブラウザの機能および構成によって異なります。
  7. 「保存」または「ページの保存と実行」をクリックします。

8.13.3 レポートでのBLOBイメージの表示

レポート問合せに列を追加して、レポートにBLOBイメージを表示します。

作業中のBLOBがイメージである場合は、表示タイプ「イメージの表示」を使用してレポートに表示できます。

イメージのBLOBをレポートに表示するには:

  1. ページ・デザイナで、レポートを含むページを表示します。
  2. レポートの「ソース」「表/ビュー」に基づいている場合は、この属性を「SQL問合せ」に変更します。
    「SQL問合せ」属性によって、対応する問合せが自動的に生成されます。
  3. 新しい数値/整数列の式を問合せに追加します(通常は、イメージ・ファイルのサイズ)。長さが0の場合、BLOBNULLとなり、イメージは表示されません。

    ファイル・サイズを計算するには、次のような式を使用します。

    ...
       col_n,
       sys.dbms_lob.getlength([blob_column]) as image
    from ...
  4. 「識別」を検索します。「タイプ」で、「イメージの表示」を選択します。
  5. 「BLOB属性」を見つけます。次を構成します。
    1. 表名 - 表示するBLOBコンテンツを格納する表名を入力します。表名を入力するか、使用可能な表のリストから選択します。
    2. BLOB列 - 表から、表示するBLOBコンテンツを格納するBLOB列を選択します。
    3. 主キー列 - 表から、表示するBLOBコンテンツを格納する主キー列を選択します。この表の主キーが3列以上で構成される場合は、ROWID列を選択する必要があります。
    4. MIMEタイプ列 - オプションで、表から、表示するBLOBコンテンツを格納するMIMEタイプ列を選択します。
    5. ファイル名列 - オプションで、表から、表示するBLOBコンテンツを格納するファイル名列を選択します。
    6. 最終更新列 - オプションで、表から、表示するBLOBコンテンツを格納する最終更新列を選択します。この列は、他の列の値ではなく、ファイルの更新を表すことが理想的です。

    BLOB列にイメージ以外のファイルが含まれる場合、ブラウザによるファイル・タイプの処理方法によっては、コンテンツが表示されません。

    イメージはそのままレンダリングされ、イメージの元の高さと幅がピクセルで表示されます。

  6. イメージがレポートに収まるようにページにカスタムCSSを追加するには:
    1. 「詳細」を見つけます。レポートのイメージ列(my_report_image_columnなど)に静的IDを追加します。
    2. 「CSS」を見つけます。インライン属性にCSSコードを追加します。たとえば、高さが25ピクセルのイメージを表示するには、次を追加します。
      td[headers="my_report_image_column"] img {
          height: 25px;
      }
  7. 「保存」または「ページの保存と実行」をクリックします。

8.13.4 手続き的なBLOBの使用について

ダウンロード・リンクを指定した組込み方式を使用するかわりに、APEX_UTIL.GET_BLOB_FILE_SRCファンクションを使用します。

APEX_UTIL.GET_BLOB_FILE_SRCファンクションを使用する利点の1つは、イメージの表示を(heightタグとwidthタグで)より具体的にフォーマットできることです。この方法は、有効なOracle APEXセッションからコールされた場合にのみ有効です。また、BLOBを記述するパラメータを、アプリケーション内の有効なアイテムの書式としてリストする必要もあります。この項目は後でファンクションが参照します。

関連項目:

Oracle APEX APIリファレンスGET_BLOB_FILE_SRCファンクション