この章では、リリース10.1.3.3で導入されリリース10.1.3.3〜10.1.3.4に適用されるBI Publisher機能について説明します。この機能については、リリース10.1.3.4用に更新されたBI Publisherドキュメント・セットにも記載されています。
この新機能により、レポート作成者はAdobe FLEXテンプレートを開発できます。このテンプレートにより、Oracle BI Publisherレポートに適用して高度な対話型Flash出力ドキュメントを生成できます。
リリース10.1.3.3より、Oracle BI Publisherでは、Adobe社の新しいドキュメント・フォーマット(Flexと呼ばれる)がサポートされています。このフォーマットは対話型のフォームとレポートの作成に使用します。Flexテンプレートを作成してからデスクトップでテストし、BI Publisherサーバーにデプロイすると、Flash出力を生成することができます。ユーザーは、レポートをBI Publisherユーザー・インタフェースから実行したり、レポート利用者に配信するようにスケジュールすることができます。
この章では、BI Publisherのフラットなデータソース(つまり、XMLデータに階層構造がないもの)でFlexテンプレートを設定する方法について説明します。また、テーブルやチャートなどの単純なオブジェクトについても説明します。複数のコンポーネント間における対話処理や接続性などの詳細は、Adobe社のFlexドキュメントを参照してください。
この章の内容は次のとおりです。
Flashテンプレートをサポートするには、BI Publisherユーザー・インタフェースで次の変更を行います。
「レポートの編集」ページの「レイアウト」→「一般設定」で、「テンプレート・タイプ」リストに「Flashテンプレート」オプションがあります。
「レポートの表示」ページで、「Flashテンプレート」が「テンプレート・タイプ」として選択されている場合は、出力セクション・リストに「フラッシュ」オプションがあります。Flashテンプレートでは、出力タイプとしてFlash、PDFおよびデータのみがサポートされます。
「フラッシュ」プロパティの新しいセットが、「ランタイム構成」ページに追加されました。
前提条件を次に示します。
出力を表示する場合:
レポート出力をFlashテンプレートから表示するには、Adobe Flash Player 9がコンピュータにインストールされている必要があります。
テンプレートを作成する場合:
Adobe社のFlexBuilder IDEが必要です。Oracle BI Publisherは現在、バージョン2.0.1で動作することが確認されています。このツールはAdobe社のWebサイト(http://www.adobe.com/products/flex/
)からダウンロードして購入することができます。
チャート機能を使用するには追加ライセンス料金が必要になることに注意してください。
レポート・データ・モデル(BI Publisherで設定しフラットなXMLが生成されるモデル)が必要です。
この項の内容は次のとおりです。
サンプル・データ・ファイルをレポート・データ・モデルから生成します。BI Publisherレポート・エディタまたは「レポート」ページから、「表示」を選択します。レイアウトがレポート用に定義されていない場合、出力タイプはxmlにデフォルト設定されます。それ以外の場合は、「データ」を出力タイプとして選択します。「エクスポート」を選択し、エクスポート結果をXMLファイルとしてローカル・ディレクトリに保存します。この例では次のデータに基づいています。
<ROWSET> <ROW> <NAME>Neena Kochhar</NAME> <FIRST_NAME>Neena</FIRST_NAME> <LAST_NAME>Kochhar</LAST_NAME> <SALARY>17000</SALARY> <ANNUAL_SALARY>204000</ANNUAL_SALARY> <FED_WITHHELD>57120</FED_WITHHELD> <JOB_TITLE>Administration Vice President</JOB_TITLE> <DEPARTMENT_NAME>Executive</DEPARTMENT_NAME> <MANAGER>Steven King</MANAGER> </ROW> <ROW> ... </ROWSET>
このデータは、次の単純な問合せをベースにしたレポートから生成されます。
select e.first_name || ' ' || e.last_name name, e.first_name, e.last_name, e.salary, e.salary*12 ANNUAL_SALARY, e.salary*12*0.28 FED_WITHHELD, j.job_title, d.department_name, m.first_name || ' ' || m.last_name manager from employees e, employees m, departments d, jobs j where e.department_id = d.department_id and j.job_id = e.job_id and e.manager_id = m.employee_id
Flex IDEを起動して新しいFlexプロジェクトを作成し、「Basic」をデータ・アクセス方法として選択します。
次の画面ではプロジェクト名を入力します。ここで使用する名前は、作成するテンプレート・ファイルの名前に割り当てられます。
「Finish」をクリックします。
IDEではMXMLファイルが作成されます。これはFlexテンプレート定義ファイルです。これは次のようなXMLフォーマットになります。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> </mx:Application>
これで、手動で更新したりVisual Builderを使用して更新することができます。
レポート・データ・モデルからダウンロードしたXMLに接続します。FlexがサポートしているXMLデータ・サービスを使用します。サンプル・データをMXMLファイルに埋め込みます。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ [Bindable] public var dataXML:XML = <ROWSET> <ROW> <NAME>Neena Kochhar</NAME> <FIRST_NAME>Neena</FIRST_NAME> <LAST_NAME>Kochhar</LAST_NAME> <SALARY>17000</SALARY> <ANNUAL_SALARY>204000</ANNUAL_SALARY> <FED_WITHHELD>57120</FED_WITHHELD> <JOB_TITLE>Administration Vice President</JOB_TITLE> <DEPARTMENT_NAME>Executive</DEPARTMENT_NAME> <MANAGER>Steven King</MANAGER> </ROW> <ROW> ... </ROWSET>; ]]> </mx:Script> </mx:Application>
XMLの部分は、ダウンロードしたデータとして次のようになります。重要な部分に関する説明を次に示します。
<mx:Script>
: これは、テンプレート・スクリプト・コードの開始を示します。また、終了を示す</mx:Script>
文もあります。
[Bindable]
: これは、次の変数がレイアウト・コンポーネントにバインド可能であることを示します。
public var dataXML:XML
: これは、データ変数の宣言を示します。
public
: これは、変数の値がテンプレート全体で利用できることを示します。
var
: これによって変数がレポートにあることを宣言します。
dataXML
: これは変数の名前です。名前は必須です。この名前を使用してテンプレートをBI Publisherで使用する必要があります。
:XML
: これによって変数がXMLタイプであることを宣言します。
;
: 指定したXMLデータの末尾にセミコロンがあることに注意してください。
実行時にBI Publisherサーバーでは、ランタイム・データがレポートから生成されてからFlexテンプレートに注入され、dataXML変数内にあるサンプル・データが置換されます。この機能により、サーバーに接続しなくてもFlexレポートをユーザーに配布することができます。
これで、レポート・オブジェクトをレイアウト・パレットに追加する作業を始めることができます。この例では、Flexの「Design」タブを使用してオブジェクトをレイアウトに追加します。「Design」タブをクリックして、利用可能なオブジェクトを「Component Navigator」ペインに表示します。
次の図は、利用可能なオブジェクトが「Component Navigator」ペインに表示される例を示します。
これらのオブジェクトは、設計パレットにドラッグ・アンド・ドロップすることができます。
Flex IDEでは、オブジェクトのドラッグ・アンド・ドロップができるデフォルト・キャンバスが作成されます。キャンバスは、必要に応じて変更できます。
重要: Flash出力をPDFドキュメントに埋め込む場合、テンプレートの幅と高さを「Layout」プロパティの「Size」リージョンに設定する必要があります。デフォルトのサイズのままにする場合でも、明示的に値をこれらのフィールドに入力する必要があります。
パネル・オブジェクトを「Layout」ノードの下から設計パレットにドラッグします。パネルをパレットの周囲にドラッグすると、ガイドラインが青色で表示されます。これらのガイドラインを使用して、オブジェクトの位置合せを行います。
パネルをパレットの左上端でドロップします。
パネルの右下端をパレットの右側にドラッグします。
そして、パレットの高さの約半分の位置でドロップします。または、右側のプロパティ・パレットを使用して、パネルのサイズを設定します。
Datagridオブジェクトを選択します。これは、データを表形式でレンダリングするためのオブジェクトです。手順2で作成したパネルにこれをドロップします。これでDatagridはパネルの子になります。必要に応じてサイズを変更できます。実行結果を次の図に示します。
デフォルトでは、3列が作成されます。次の項では、MXMLコードのデフォルトをオーバーライドする方法について説明します。
チャート機能オプションのライセンスを購入してある場合、チャートをレイアウトに追加できます。
最初に、レイアウトにチャートを追加する余地があることを確認してください。Datagridオブジェクトを選択し、ホスティングしているパネルの高さの約半分の位置まで上端を下に移動します。
このガイドのために、列チャートを例に説明します。列チャートを設計パレットからドラッグして、ホスティングしているパネルにドロップします。ガイドラインを使用して、位置合せを行います。
ドロップすると、デフォルトのサイズによりDatagridとチャートの凡例が左上端で重なることに注意してください。チャートのサイズを変更して凡例を左に移動すると、次の図のようになります。
これはチャートの例です。データへのバインドを次の項で行います。
レイアウトが完了したので、レイアウト・オブジェクトをデータソースにバインドできます。Flexには、オブジェクトのプロパティ・パレットを使用してバインドを定義するのに便利な支援機能がありますが、この作業を完了するのに十分ではありません。したがって、Sourceエディタを使用してMXMLを直接更新することにします。
DataGridをバインドする手順は次のとおりです。
DataGridを設計パレットで選択してから「Source」タブをクリックして、MXMLソースを表示します。DataGridコードの最初の行が選択された状態で表示されます。これは、複雑なFlexテンプレートを作成してコードを簡単に探す必要がある場合に便利な機能です。
DataGridコードは次のようになります。
<mx:DataGrid x="10" y="160" width="476" height="152"> <mx:columns> <mx:DataGridColumn headerText="Column 1" dataField="col1"/> <mx:DataGridColumn headerText="Column 2" dataField="col2"/> <mx:DataGridColumn headerText="Column 3" dataField="col3"/> </mx:columns> </mx:DataGrid>
親コンテナ内のグリッドにおけるx座標とy座標の相対位置、およびその幅と高さが定義されていることに注意してください。次の要素では、ヘッダー・ラベルとデータ・フィールドの属性で列が定義されています。
この目的は、次の図のような表を作成することです。
DataGridをデータソース対応にします。このためには、次に示すように属性を<mx:DataGrid>
要素に追加します。
dataProvider="{dataXML.ROW}"
この属性により、実行時にグリッドの移入に使用するデータ・オブジェクトを定義します。最初にXMLデータ変数をdataXMLとして定義したことに注意してください。ここでは、これにROWを付けて使用します。ROWは、データセットの繰返しグループです。データソースが定義されていることをFlexエンジンで検出できるように中カッコで囲まれていることに注意してください。
列をバインドします。基本構造があるので、値を次のように置換するだけです。
<mx:columns> <mx:DataGridColumn headerText="Employee" dataField="NAME" /> <mx:DataGridColumn headerText="Title" dataField="JOB_TITLE"/> <mx:DataGridColumn headerText="Monthly Salary" dataField="SALARY"/> <mx:DataGridColumn headerText="Annual Salary" dataField="ANNUAL_SALARY"/> </mx:columns>
この更新によって、DataGridの定義は次のようになります。
<mx:DataGrid x="10" y="160" width="476" height="152" dataProvider="{dataXML.ROW}"> <mx:columns> <mx:DataGridColumn headerText="Employee" dataField="NAME" /> <mx:DataGridColumn headerText="Title" dataField="JOB_TITLE"/> <mx:DataGridColumn headerText="Monthly Salary" dataField="SALARY"/> <mx:DataGridColumn headerText="Annual Salary" dataField="ANNUAL_SALARY"/> </mx:columns> </mx:DataGrid>
これによって、テンプレートをサンプル・データで試すことができます。「Run」→「Run EmployeeReport」を使用します。これによって新しいブラウザ・ウィンドウが開き、サンプル・データの表が手順1で示したようにレンダリングされます。
チャートをバインドする手順は次のとおりです。
「Design」タブを表示してからチャートを選択し、「Source」ビューに戻りチャート・コードを検索します。
<mx:ColumnChart x="10" y="10" id="columnchart1" width="476" height="142"> <mx:series> <mx:ColumnSeries displayName="Series 1" yField=""/> </mx:series> </mx:ColumnChart> <mx:Legend dataProvider="{columnchart1}" x="383" y="10"/>
データソースをチャート・オブジェクトにバインドするには、次のようにしてdataProvider属性を<mx:ColumnChart>
に追加します。
dataProvider="{dataXML.ROW}"
次に、水平軸と一連の列のバインドを追加します。この作業を行うには、少し手間がかかります。詳細は、Flexのヘルプ・ファイルを参照してください。給与を従業員別に示すチャートを次のように作成します。
このフォーマットを実現するには、次のように<series>
グループを修正し、<horizontalAxis>
要素を追加します。
<mx:ColumnChart x="10" y="10" id="columnchart1" width="476" height="142" dataProvider="{dataXML.ROW}"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="NAME" /> </mx:horizontalAxis> <mx:series > <mx:ColumnSeries xField="NAME" yField="SALARY" displayName="Salary"/> </mx:series> </mx:ColumnChart> <mx:Legend dataProvider="{columnchart1}" x="383" y="10"/>
これで、<mx:horizontalAxis>
要素が追加され、categoryField属性にはNAMEデータ属性が割り当てられました。この要素は、チャートをレンダリングするために必要です。
これで、<mx:series>
要素が、SALARY値を各従業員のNAMEにバインドするように更新され、従業員ごとにチャートの縦棒を作成します。
凡例のコードは更新不要です。ColumnChartのid属性が、<mx:Legend>
要素のdataProvider属性値に一致することに注意してください。
これによって、サンプル・データを使用してテンプレートを実行することができます。次の図に示すように、チャートが表形式のデータの上に表示される出力になります。
Flexテンプレートをデスクトップでテストしたら、BI Publisherサーバーにロードすることができます。
管理者ロールか開発者ロールを使用して、「レポートの編集」ページにナビゲートします。
「レイアウト」ノードを選択し「テンプレートのアップロード」フィールドを使用して、Flexテンプレートをサーバーにアップロードします。適切なファイルを探すには、「参照」ボタンを使用してFlexプロジェクト・ディレクトリにナビゲートします。このディレクトリの下でbinディレクトリを開き、EmployeeReport.swfファイルを選択します。「アップロード」ボタンを使用して、テンプレートをロードします。
「レイアウト」ノードが選択されている状態で、レポート構造ツリーの上部にある「新規」をクリックします。名前、テンプレートおよびテンプレート・タイプの各フィールドを次のように入力します。
レポートを保存します。テンプレートが利用できる状態になり、これによってユーザーがテンプレートをリアルタイムで実行するかスケジュール実行するかを選択できます。
「フラッシュ」プロパティの新しいセットが「ランタイム構成」ページに追加されているので、PDFを出力タイプとして選択すると、Flashオブジェクトのサイズと配置を指定できます。
重要: PDF出力を生成するには、テンプレートの高さと幅をFlex Builderで指定する必要があります。「レイアウトの作成」を参照してください。
PDF出力を構成する手順は次のとおりです。
管理者ロールか開発者ロールを使用して、Flashテンプレートを使用するレポートにナビゲートし、「構成」をクリックます。
「ランタイム構成」ページで、プロパティの新しいセットが「フラッシュ」ヘッダーの下に表示されます。これらのプロパティにより、出力PDFドキュメントにおけるFlashオブジェクトの配置とサイズを制御します。これらのプロパティを次のスクリーンショットに示します。
プロパティの値を入力します。必須プロパティはありません。値を入力しないとデフォルト値が適用され、11インチ x 8.5インチのドキュメント(標準横向き)になり、ページの左上隅には1/4インチの凹枠がFlashオブジェクトの挿入位置として割り当てられます。ドキュメントのデフォルト領域は、SWFオブジェクトのサイズになります。
ラッパー・ドキュメントのページ幅: 出力PDFドキュメントの幅をポイント単位で指定します。デフォルトは792(11インチ)です。
ラッパー・ドキュメントのページの高さ: 出力PDFドキュメントの高さをポイント単位で指定します。デフォルトは612(8.5インチ)です。
PDFのフラッシュ領域の開始X位置: ドキュメントの左端を軸の0座標点として使用し、PDFドキュメントにおけるFlashオブジェクトの横方向の開始位置をポイント単位で指定します。デフォルトは18(0.25インチ)です。
PDFのフラッシュ領域の開始Y位置: ドキュメントの左上隅を軸の0座標点として使用し、PDFドキュメントにおけるFlashオブジェクトの縦方向の開始位置をポイント単位で指定します。デフォルトは18(0.25インチ)です。
フラッシュ領域の幅: ドキュメントにおいてFlashオブジェクトが占有する領域の幅をポイント単位で入力します。デフォルトはSWFオブジェクトの幅です。
フラッシュ領域の高さ: ドキュメントにおいてFlashオブジェクトが占有する領域の高さをポイント単位で入力します。デフォルトはSWFオブジェクトの高さです。
この章では、レイアウト・オブジェクトの追加と整理を行い、オブジェクトをBI PublisherのデータソースにバインドしてFlexテンプレートを作成し、テンプレートをBI Publisherサーバーにロードしてレポート・ユーザーが利用できるようにする方法の基本について説明しました。
これはFlexテンプレートの基本的な概要ですが、Adobe Flexでははるかに複雑な対話型レポートをユーザーのために作成することができます。アニメーションの合成やレイアウト・オブジェクトのフォーマットは、Flexで行うことができます。また、入力データにおける計算フィールドの合計処理と作成処理を行うこともできます。高度な機能の詳細は、Flexのドキュメントを参照してください。