Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド 11gリリース1(11.1.1.9.0) B52029-12 |
|
![]() 前 |
![]() 次 |
この章では、データ・バインドされたADFピボット・テーブル・コンポーネントを使用してデータを表示する方法とピボット・テーブルのカスタマイズ・オプションについて説明します。
この章では、次の項目について説明します。
ADFピボット・テーブルのデータ・バインディングの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたピボット・テーブルの作成に関する項を参照してください。
ADFピボット・テーブル・コンポーネントでは、行および列のグリッド・データを表示します。表計算ソフトウェア同様、このコンポーネントでは、グリッド・データの小計と合計を生成するオプションが用意されています。ピボット・テーブルでは、データ・ラベルや関連するデータ・レイヤーを1つの行エッジまたは列エッジから別のエッジにピボットまたは移動して、データの表示を変えることができるため、インタラクティブな分析がサポートされます。
ピボット・テーブルのインタラクティブな機能は、行ヘッダーと列ヘッダーにネストする複数の属性の表示に基づいています。ドラッグ・アンド・ドロップ操作を使用してこれらの属性のレイアウトを動的に変更できます。
図27-1に、行と列に複数の属性がネストするピボット・テーブルを示します。
ピボット・フィルタ・バーは、ピボット・テーブルに追加可能なコンポーネントで、ピボット・テーブルのいずれかのエッジに表示されないレイヤーのピボット・テーブル・データをフィルタ処理できます。ユーザーは、ピボット・フィルタ・バーと関連付けられたピボット・テーブルの間でこれらのレイヤーをドラッグ・アンド・ドロップして、データのビューを変更することもできます。図27-2に、ピボット・テーブルのピボット・フィルタ・バーを示します。
次のピボット・テーブルの用語のリストでは、売上げピボット・テーブルのサンプルとして図27-1を用語の説明に使用します。
エッジ: ピボット・テーブル内の軸で、次のものがあります。
行エッジ: ピボット・テーブル本体の左側にある縦軸。図27-1には、行エッジに年と製品の2つのレイヤーがあります。ピボット・テーブルの各行は、特定の年と製品の組合せを表します。
列エッジ: ピボット・テーブルの本体の上にある横軸。図27-1には、列エッジに尺度、販路、地理の3つのレイヤーがあります。ピボット・テーブルの各列は、特定の測定値(SalesまたはUnits)、特定の販路インジケータ(All Channels)、特定の地理上の位置(WorldまたはBoston)の組合せを表します。
ページ・エッジ: ピボット・フィルタ・バーによって表されるエッジで、そのレイヤーは行および列エッジのレイヤーによりフィルタ処理やピボット処理ができます。
レイヤー: 1つのエッジに表示される、ネストされた属性。図27-1では、3つのレイヤーである尺度、販路、地理が列エッジに表示されています。行エッジには、年と製品の2つのレイヤーが表示されています。
ヘッダー・セル: 行または列に表示されているデータを識別するラベル。行ヘッダー・セルは行エッジ上に、列ヘッダー・セルは列エッジ上に表示されます。
データ・セル: ヘッダー情報ではなく、データ値を含むピボット・テーブル内のセル。サンプルでは、最初のデータ・セルに、20,000.000という値が含まれています。
QDR (修飾データ参照): 行、列または個々のセルに対する完全修飾データ参照。たとえば、図27-1では、ピボット・テーブル内の最初のセルのQDRに次の情報が含まれる必要があります。
年: 2007
製品: Tents
尺度: Sales
販路: All Channels
地理: World
ピボット・テーブル・コンポーネントでは、データを表示およびやりとりするモデルを使用します。使用される特定のモデル・クラスはoracle.adf.view.faces.bi.model.DataModel
です。
行セット(フラット・ファイル)データ・コレクションを使用して、ピボット・テーブルにデータを提供できます。データ・バインディング処理時、「データ・バインディング」ダイアログでピボット・テーブルの行エッジまたは列エッジの目的の場所に各データ要素をドラッグできます。
データ・バインディング時には、ピボット・テーブルの行および列の小計と合計の指定、実行時のドリル操作の指定、重複レコードの集計方法の定義、および初期のソート基準の設定もできます。
ピボット・テーブルのデータ・バインディングの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたピボット・テーブルの作成に関する項を参照してください。
ピボット・テーブルとピボット・フィルタ・バーは、アクティブ・データ・イベントが受け取られたときにPPR(部分ページ・リフレッシュ)リクエストを送ることによりADSをサポートします。PPR応答により、ピボット・テーブルおよびピボット・フィルタ・バーの値は次のように更新されます。
ADSイベントの結果が、1つ以上の既存のピボット・テーブル・データ・セルの値の更新の場合、値はただちに更新されます。
ADSイベントの結果が、1つ以上の行または列の挿入または削除の場合、ピボット・テーブル全体がリフレッシュされ、変更が表示されます。
ADSは、データ・セルの単一のスタンプ設定されたaf:outputText
またはdvt:sparkChart
コンポーネントに対してのみサポートされます。
ピボット操作などピボット・テーブルの操作中にイベントが到着した場合、操作の完了後にイベントを適用できるようにするために、イベントはバッファに格納されます。ただし、ピボット操作でフェッチされたデータよりもイベントが古い場合は除きます。この場合、イベントは破棄されます。
アクティブ・データ・サービスの使用の詳細は、第37章「非同期バックエンドでのアクティブ・データ・サービスの使用方法」を参照してください。
ピボット・テーブルのレイヤーは、同じエッジの別の場所や異なるエッジにドラッグできます。この操作はピボット処理と呼ばれ、デフォルトで有効になっています。
レイヤー上にカーソルを置くと、レイヤーのピボット・ハンドルが選択され、オプションのピボット・ラベルが表示されます。マウスをピボット・ハンドルに移動すると、カーソルが4点矢印のドラッグ・カーソルに変わります。次にこのハンドルを使用して、レイヤーを新しい場所へドラッグできます。行エッジのレイヤー上にカーソルを置くと、図27-3に示すとおり、そのレイヤーの上にピボット・ハンドルが表示されます。
カーソルを列エッジのレイヤーに移動すると、ピボット・ハンドルが図27-4に示すようにそのレイヤーの左に表示されます。
図27-3で時間(年)のピボット・ハンドルを行エッジから列エッジの尺度(Sales)レイヤーと販路レイヤーの間にドラッグすると、ピボット・テーブルは図27-5に示すように変わります。
ピボットはピボット・ラベルおよびピボットを無効にするようにカスタマイズできます。
ピボット・テーブルのピボットをカスタマイズする手順:
「構造」ウィンドウで「dvt:pivotTable」ノードを右クリックし、「プロパティに移動」を選択します。
(オプション)プロパティ・インスペクタの「外観」カテゴリのPivotLabelVisible
フィールドで、ドロップダウン・リストから「false」を選択してピボット・ハンドルのラベルの表示を無効にします。
(オプション)プロパティ・インスペクタの「動作」カテゴリのPivotEnabled
フィールドで、ドロップダウン・リストから「false」を選択してピボットを無効にします。
ピボット・テーブルは、デフォルトで大規模なデータ・セットに対するオンデマンド・データ・スクロールをサポートします。ピボット・テーブルに表示されているデータのみがロードされます。ユーザーが垂直または水平にスクロールすると、データは新しいピボット・テーブル表示に合せてフェッチまたは破棄されます。図27-6に、オンデマンド・データ・スクロールを使用して大規模なデータ・セットを表示するピボット・テーブルを示します。
デスクトップ・アプリケーションやタッチ装置のモバイル・ブラウザに対しては、ピボット・テーブルの大規模なデータ・セットのナビゲーション用に、スクロール・バーのかわりにページ・コントロールを構成できます。このコントロールは、データ・フェッチ・サイズを超える行が存在し、かつコンポーネントがそれを含むレイアウト・コンポーネントによって拡大されない場合にのみ使用できます。たとえば、図27-7に示すように、列のページ・コントロールはピボット・テーブルの上部に、行のページ・コントロールはピボット・テーブルの下部に表示されます。
ADF Faces Webアプリケーションを開発している場合、ピボット・テーブルではデフォルトで、フェッチしているデータのサイズを超えるデータを表示するために垂直または水平のスクロール・バーが使用されます。pivotTable
コンポーネントに、かわりにページ・コントロールを構成するには、scrollPolicy
属性をpage
に設定します。次に例を示します。
scrollPolicy="page"
ただし、標準ADF Faces Webアプリケーションはモバイル・ブラウザで動作しますが、ユーザーの操作が異なり、スクリーン・サイズが制限されるため、アプリケーションをモバイル・ブラウザで実行する必要がある場合は、タッチ装置に固有のバージョンのページを作成する必要があります。詳細は、付録D「ADF Facesを使用したタッチ装置のWebアプリケーションの作成」を参照してください。
デフォルトでは、モバイル・デバイスにレンダリングする場合、ピボット・テーブルにはユーザーが特定の行のページにジャンプできるページ・コントロールが表示されます。モバイル・デバイスにピボット・テーブルを表示するには、次のようにします。
ピボット・テーブル・コンポーネントをフロー・コンテナ(つまり、子を拡大しないコンポーネント)の中に配置します。フロー・コンテナ・コンポーネントの詳細は、第8.2.1項「ジオメトリ管理およびコンポーネントの拡大」を参照してください。
scrollPolicy
属性をauto
(ページがデスクトップ・デバイスでも実行される場合)、またはpage
(ページがモバイル・デバイスのみで実行される場合)に設定します。
ピボット・テーブルがフロー・コンテナの中にない場合、または属性が正しく設定されていない場合は、ページではなくスクロールバーが表示されます。
スクロール・バーまたはページ・コントロールを使用して大規模なデータ・セットを表示する場合は、各行ヘッダー・レイヤーの上、および各列ヘッダー・レイヤーの横に常にラベルが表示されるようにピボット・テーブルを構成することで、読みやすさを高めることもできます。pivotTable
コンポーネントで行および列ヘッダーのラベルを常に表示するように構成するには、layerLabelMode
属性をrendered
に設定します。デフォルト値はhidden
です。
ピボット・テーブルでの選択により、ユーザーはピボット・テーブルで複数のセルを選択できます。行ヘッダー、列ヘッダーまたはデータ・セルを含めて3つの領域のいずれか1つのみを一度に選択できます。
現在選択されているセルに基づいて、アプリケーションはコンテキスト・メニューのカスタマイズされたコンテンツの表示などの機能を実装できます。例27-1に、現在選択されているヘッダー・セルを取得するためのサンプル・コードを示します。
例27-1 選択されているヘッダー・セルを取得するためのサンプル・コード
UIPivotTable pt = getPivotTable() if (pt == null) return null; HeaderCellSelectionSet headerCells = null; if (pt.getSelection().getColumnHeaderCells().size() > 0) { headerCells = pt.getSelection().getColumnHeaderCells(); } else if (pt.getSelection().getRowHeaderCells().size() > 0) { headerCells = pt.getSelection().getRowHeaderCells(); }
実行時に、データ・セルを選択すると、図27-8に示すように、そのセルが強調表示されます。
ピボット・テーブルには、読取り専用のデータ・セルと編集可能なデータ・セルの両方を含めることができます。編集可能なセルは、入力コンポーネント(たとえば、af:inputText
またはaf:comboBox
)を含むセルです。編集可能なセルを含むピボット・テーブルが最初に表示されるとき、最初のデータ・セルが選択されていて、ピボット・テーブルが編集のために開いています。ユーザーは、セルをクリックすることでピボット・テーブル内のどこでも編集を開始して、セル値を編集または上書きできます。ユーザーは、編集可能なセルでクリックすることで、セル内の特定の場所を指定し、矢印キーを使用してそのセル内で移動できます。編集可能なセル上で実行された編集は、[Esc]を押せば元に戻すことができます。
注意: [Esc]キーを押しても、値リスト・コンポーネント(af:inputComboboxListOfValues など)で選択した値は元に戻りません。これは、ドロップダウンを閉じると、ただちに値が送信されるためです。 |
図27-9に示すように、直接編集する場合に選択したデータ・セルが表示されます。
ドロップダウン・リストの編集のために選択されたデータ・セルは、図27-10で示すように表示されます。
データ・セルの編集の有効化の詳細は、27.12項「ピボット・テーブルのデータ・セルのスタンプと編集」を参照してください。
ピボット・テーブルでは、ピボット・テーブル内のデータのソートがサポートされています。ソートが有効な場合、列ヘッダーの最も内側のレイヤー上にカーソルを置くと、昇順および降順のソート・アイコンが表示されます。デフォルトでは、dvt:pivotTable
コンポーネントのsortMode
属性はgrouped
に設定されているため、データは行エッジの最も外側のレイヤーを基準にグループ化されて効率的にソートされます。図27-11に、ピボット・テーブルの「World」売上げ列のソート・アイコンを示します。この場合、データは年の行エッジの最も外側のレイヤーを基準にグループ化されています。
ピボット・テーブルの作成時、そのピボット・テーブル全体のサイズはデフォルト設定で決まります。ピボット・テーブルでは、全体サイズで使用できる領域内で行、列およびレイヤーのサイズが自動的に決まります。ピボット・テーブル全体のサイズを変更することも、その行、列およびレイヤーのサイズを変更することもできます。
ピボット・テーブルのデフォルト・サイズは、横300ピクセル、縦300ピクセルです。ピクセルを入力するかわりに、横、縦、あるいはその両方にパーセンテージの値を指定できます。このパーセンテージ値は、ピボット・テーブルで使用するページの割当て分を指します。
ピボット・テーブルのデフォルト設定をカスタマイズする手順:
ビジュアル・エディタで、ピボット・テーブルを含むページを表示します。
「ソース」をクリックしてJSPXページのXMLコードを表示します。
pivotTable
タグのinlineStyle
属性に、コードinlineStyle="width:value1;height:value2"
を入力します。ここで、value1
は、ピボット・テーブルの幅の単位タイプを含む整数、value2
は、ピボット・テーブルの高さの単位タイプを含む整数です。
例27-2に、表の幅をページ・サイズの50パーセントに、表の高さを400ピクセルに指定するinlineStyle
属性の設定を示します。
ピボット・テーブルは、初期表示の際は、行、列、レイヤーのサイズが自動設定されます。行、列またはレイヤーのサイズは、行セパレータ、列セパレータまたはレイヤー・セパレータを新しい位置にドラッグすることで、実行時に変更できます。
行、列およびレイヤーのサイズを実行時に変更する手順:
行のサイズを変更する場合、次のようにします。
行ヘッダーでサイズを変更する行とその次の行の間のセパレータにカーソルを置きます。
カーソルが両方向の矢印に変わったら、行セパレータをクリックして目的の位置にドラッグします。
列のサイズを変更する場合、次のようにします。
列ヘッダーでサイズを変更する列とその次の列の間のセパレータにカーソルを置きます。
カーソルが両方向の矢印に変わったら、列セパレータをクリックして目的の位置にドラッグします。
レイヤーのサイズを変更する場合、次のようにします。
行または列ヘッダーでサイズを変更するレイヤーとその次のレイヤーの間のセパレータにカーソルを置きます。
カーソルが両方向の矢印に変わったら、レイヤー・セパレータをクリックして目的の位置にドラッグします。
ピボット・テーブルを更新できます。たとえば、部分ページ・レンダリング(PPR)を使用してチェック・ボックスによってトリガーされるピボット・テーブルの合計を表示できます。PPRを使用すると、ページ全体をリフレッシュせずにページ上の特定のコンポーネントのみをレンダリングできます。PPRの詳細は、第7章「部分ページ・レンダリングの概要」を参照してください。
別のコンポーネントで発生したイベントに基づいてコンポーネントを再レンダリングするには、どのコンポーネントがトリガーかを宣言する必要があります。partialTriggers
属性を使用してピボット・テーブルの部分更新をトリガーするコンポーネントのIDのリストを提供します。ピボット・テーブルはトリガー・コンポーネントをリスニングし、いずれかのトリガー・コンポーネントがなんらかの更新を発生させるイベントを受信すると、ピボット・テーブルも更新されます。
例27-3に、チェック・ボックスがトリガーされたときに、合計を表示することによってピボット・テーブルを更新するサンプル・コードを示します。トリガー・コンポーネントはIDをpartialTriggers
値として使用します。
ピボット・テーブルからMicrosoft Excelスプレッドシートにデータをエクスポートできます。コマンド・ボタンやコマンド・リンクなどのアクション・ソースを作成し、dvt:exportPivotTableData
コンポーネントを追加して、エクスポートするデータと関連付けます。ピボット・テーブル全体がエクスポートされるように、またはユーザーが選択した行のみがエクスポートされるようにdvt:exportPivotTableData
コンポーネントを構成できます。たとえば、図27-12では、ユーザーがデータをExcelスプレッドシートにエクスポートできるコマンド・ボタン・コンポーネントがあるピボット・テーブルを示しています。
ユーザーがコマンド・ボタンをクリックすると、すべての行と列はエクスポートされ、デフォルトでタグのfilename
属性に指定されたファイルにExcel形式で書き込まれます。または、ユーザーが選択した行のみがエクスポートされるように、exportedData
属性をselected
に設定して、dvt:exportPivotTableData
コンポーネントを構成することも可能です。例27-4に、「Excelにエクスポート」コマンド・ボタンのサンプル・コードを示します。
例27-4 「Excelにエクスポート」コマンド・ボタンのサンプル・コード
<af:commandButton text="Export To Excel" immediate="true"> <dvt:exportPivotTableData type="excelHTML" exportedId="goodPT" filename="updated_export.xls" title="PivotTable export"/> </af:commandButton>
図27-13に、結果のExcelスプレッドシートを示します。
注意: ファイルがファイル拡張子で指定されたフォーマットとは異なることを示す警告がExcelに表示されることがあります。この警告は無視して問題ありません。 |
ADF Facesでは、印刷用の簡略化されたモードで、ADF Faces WebアプリケーションからJSFページを出力できます。たとえば、ユーザーがページ(またはページの一部)を印刷できるようにし、一方でWebブラウザでレンダリングされているとおりにページを印刷するのではなく、スクロールバーやボタンなど、印刷ページに必要ないアイテムを削除することが望ましい場合があります。このような出力用に簡略化されたページを作成する場合の詳細は、第36章「様々な出力モードの使用」を参照してください。
印刷可能モードで出力するJSFページにピボット・テーブルとピボット・フィルタ・バーが表示されている場合は、次のようになります。
ピボット・テーブルのすべてのデータ・セルが表示されます。
セルの選択や行または列のサイズ変更など、限定されたクライアント操作がサポートされます。
ピボット、ドリルおよびソート操作はサポートされません。
行や列のサイズ変更機能も含めて、コンテキスト・メニューはサポートされません。
ピボット・フィルタ・バーに表示されるピボット・テーブル・データのフィルタが構成されている場合、フィルタは表示されても、コンテンツは変化しません。
ピボット・テーブルのすべてのセルは、ヘッダー・セルまたはデータ・セルのいずれかです。セルをレンダリングする前、ピボット・テーブルではメソッド式がコールされます。dvt:pivotTable
タグの次の属性にメソッド式を指定することで、ピボット・テーブルのヘッダー・セルとデータ・セルのコンテンツをカスタマイズできます。
ヘッダー・セルには、次のいずれかの属性を使用します。
headerFormat
: ヘッダー・セルのコンテンツをカスタマイズする書式設定ルールの作成に使用します。
headerFormatManager
: アプリケーションのピボット・テーブルのヘッダー・セルの書式設定ルールに、カスタムの状態保存を指定する必要がある場合にのみ使用します。
データ・セルには、次のいずれかの属性を使用します。
dataFormat
: データ・セルのコンテンツをカスタマイズする書式設定ルールの作成に使用します。
dataFormatManager
: アプリケーションのピボット・テーブルのデータ・セルの書式設定ルールに、カスタムの状態保存を指定する必要がある場合にのみ使用します。
データ・セルのコンテンツのカスタマイズを指定するには、oracle.dss.adf.view.faces.bi.component.pivotTable.CellFormat
のインスタンスを返すメソッド式をコーディングする必要があります。
データ・セルにCellFormatオブジェクトのインスタンスを作成する手順:
書式設定するデータ・セルに対し、oracle.adf.view.faces.bi.component.pivotTable.DataCellContext
オブジェクトを作成します。DataCellContext
メソッドは、コンストラクタに次のパラメータを必要とします。
model
: ピボット・テーブルで使用されるdataModel
の名前。
row
: 操作対象のデータ・セルを含むゼロベースの行を指定する整数。
column
: 書式設定対象のデータ・セルを含むゼロベースの列を指定する整数。
qdr
: 書式設定対象のデータ・セルの完全修飾参照であるQDR
。
value
: 書式設定対象のデータ・セルの値を含むjava.lang.Object
。
ピボット・テーブルのdataFormat
属性のメソッド式にDataCellContext
を渡します。
メソッド式に、ピボット・テーブルのデータ・セルに適用する書式を指定するコードを記述します。このメソッド式はCellFormat
オブジェクトを返す必要があります。
CellFormat
オブジェクトのインスタンスには次の引数を指定できます。
コンバータ: javax.faces.convert.Converter
のインスタンスで、セルのRAW値の数値、日付またはテキストの書式設定に使用されます。
CSSスタイル: セルのCSSスタイルの変更に使用されます。たとえば、この引数を使用して、セルの背景色を変更します。
CSSテキスト・スタイル: セルのテキストのCSSスタイルの変更に使用されます。たとえば、この引数を使用してテキストをボールドに設定します。
新規のRAW値: データ・モデルから返されたセルの基礎となる値の変更に使用されます。たとえば、州名の略記をフル・ネームに変更するよう選択できます。このケースでは、略記NYがNew Yorkに変更されます。
書式とテキスト・スタイルを適用して、ピボット・テーブルに表示されるデータの特徴を強調表示することができます。図27-14に、製品および製品カテゴリについて生成された売上げ合計のピボット・テーブルを示します。このピボット・テーブルでは、合計を含む行のテキストが太字(テキスト・スタイルの変更)で、背景が影付き(スタイルの変更)で表示されます。この変更は、ピボット・テーブルの行ヘッダー・セルとデータ・セルの両方に表示されます。合計の行ヘッダーには、「Sales Total」というテキストが含まれています。
ピボット・テーブルには、データ・セルのストップライト書式設定と条件付き書式設定も示されています。詳細は、27.11.4項「ピボット・テーブルでのストップライトおよび条件付き書式設定の作成方法」を参照してください。
例27-5に、売上げ合計に必要で、ストップライトの書式設定には必要ないカスタム書式を作成するサンプル・コードを示します。この例には、dvt:pivotTable
タグのdataFormat
属性とheaderFormat
属性の両方にメソッド式のコードが含まれています。ピボット・テーブルにストップライトの書式設定も含める場合は、例27-6のコードを含めます。
例27-5 ピボット・テーブルのスタイルおよびテキスト・スタイルを変更するサンプル・コード
public CellFormat getDataFormat(DataCellContext cxt) { CellFormat cellFormat = new CellFormat(null, null, null); QDR qdr = cxt.getQDR(); //Obtain a reference to the product category column. Object productCateg = qdr.getDimMember("ProductCategory"); //Obtain a reference to the product column. Object product = qdr.getDimMember("ProductId"); if (productCateg != null && productCateg.toString().equals("Sales Total")) { cellFormat.setTextStyle("font-weight:bold") cellFormat.setStyle("background-color:#C0C0C0"); } else if (product != null && product.toString().equals("Sales Total") { cellFormat.setTextStyle("font-weight:bold"); cellFormat.setStyle("background-color:#C0C0C0"); } return cellFormat; } public CellFormat getHeaderFormat(HeaderCellContext cxt) { if (cxt.getValue() != null) { String header = cxt.getValue().toString(); if (header.equals("Sales Total")) { return new CellFormat(null, "background-color:#C0C0C0", "font-weight:bold"); } } return null; }
ピボット・テーブルのセルのストップライト書式設定と条件付き書式設定は、セルのコンテンツをカスタマイズする一例です。この種のカスタマイズでは、ユーザーはストップライト書式設定に関連付ける高値と低値を指定するようアプリケーションから要求されることがあります。通常、3つの色が次のように使用されます。
高値以上の値は緑に色付けされ、問題がないことを示します。
高値と低値の間の値は黄色に色付けされ、高度な基準に達していないことが警告されます。
低値以下の値は赤に色付けされ、最低限許容されるレベルに達していないことを示します。
図27-14に、最低限、許容範囲および基準以下の州の売上げに対するストップライト書式設定付きのデータ・セルを示します。
例27-6に、合計を表示しないピボット・テーブルでストップライト書式設定を行うコードを示します。合計を表示するピボット・テーブルでストップライト書式設定を行う場合は、(合計の行を扱う)例27-5のコードとストップライト書式設定と条件付き書式設定のコードを組み合せます。
例27-6 ストップライト書式設定と条件付き書式設定のサンプル・コード
public CellFormat getDataFormat(DataCellContext cxt) { //Use low and high values provided by the application. double low = m_rangeValues.getMinimum().doubleValue() * 100; double high = m_rangeValues.getMaximum().doubleValue() * 100; CellFormat cellFormat = new CellFormat(null, null, null); // Create stoplight format if (isStoplightingEnabled()) { String color = null; Object value = cxt.getValue(); if (value != null && value instanceof Number) { double dVal = ((Number)value).doubleValue(); if (dVal <= low) { color = "background-color:" + ColorUtils.colorToHTML(m_belowColor) + ";"; } else if (dVal > low && dVal <= high) { color = "background-color:" + ColorUtils.colorToHTML(m_goodColor) + ";"; } else if (dVal > high) { color = "background-color:" + ColorUtils.colorToHTML(m_aboveColor) + ";"; } } cellFormat.setStyle(color); } return cellFormat; }
ピボット・テーブル・データ・セルのコンテンツは、dvt:dataCell
子コンポーネントを使用してスタンプ設定して、読取り専用コンポーネントまたは入力コンポーネントを各データ・セルに配置できます。スタンプを使用する場合、子コンポーネントは、ピボット・テーブルのすべてのデータ・セルに作成されるわけではありません。正しくは、dvt:dataCell
コンポーネントのコンテンツが、ピボット・テーブルの行などのデータ属性ごとに1回、繰り返しレンダリング(スタンプ)されます。アクティビティのないすべてのコンポーネント、およびEditableValueHolder
またはActionSource
インタフェースを実装する大半のコンポーネントなど、特定のタイプのコンポーネントのみがサポートされます。スタンプ設定を使用して、データ・セルのカスタムCSSスタイルを指定することもできます。
子コンポーネントにスタンプが設定されるたびに、現在のセルのデータがEL式のデータ・セル・コンポーネントによって使用されるvar
プロパティにコピーされます。ピボット・テーブルのレンダリングが完了したら、var
プロパティは削除されるか前の値に戻ります。
データ・セルの編集は、dvt:dataCell
の子コンポーネントとして入力コンポーネントを使用することによって有効化されます。ユーザーは、編集可能なセルでクリックすることで、セル内の特定の場所を指定し、矢印キーを使用してそのセル内で移動できます。
例27-7に、データ・セルのスタンプ設定のサンプル・コードを示します。
例27-7 データ・セルのスタンプ設定のサンプル・コード
<dvt:pivotTable var="cellData" varStatus="cellStatus"> <dvt:dataCell> <af:switcher defaultFacet="default" facetName="#{cellStatus.members.MeasDim.value}"> <f:facet name="Sales"> <af:inputText value="#{cellData.dataValue}" /> </f:facet> <f:facet name="Weight"> <af:outputText value="#{cellData.dataValue}" inlineStyle="#{cellStatus.cellFormat.textStyle}"/> </f:facet> <f:facet name="Available"> <af:selectBooleanCheckbox id="idselectbooleancheckbox" label="Availability" text="Item Available" autoSubmit="true" value="#{cellData.dataValue}"/> </f:facet> <f:facet name="default"> <af:outputText value="#{cellData.dataValue}" /> </f:facet> </af:switcher> </dvt:dataCell> </dvt:pivotTable>
図27-15に、結果のピボット・テーブルを示します。
注意: キューブ内のセルのセットに値を一時的または完全に書き戻す操作(書戻しと呼ばれる)を行うには、ピボット・テーブルが書戻し操作をサポートするデータ・コントロールまたはデータ・モデルにバインドされている必要があります。行セット・ベースのデータ・コントロールはキューブに変換されるため、書戻し操作をサポートできません。 |
データ・セルのスタンプ設定では、dvt:dataCell
タグを使用し、af:image
、af:icon
またはaf:commandImageLink
を子タグとして使用してデータ・セルのカスタム・イメージを指定できます。例27-8に、ピボット・テーブル・データ・セルで、af:commandImageLink
をカスタム・イメージとして使用するサンプル・コードを示します。
例27-8 データ・セルへのカスタム・イメージの使用
<dvt:pivotTable var="cellData" varStatus="cellStatus"> <!-- This is the default data cell that will be used for all data attributes--> <dvt:dataCell> <af:commandImageLink text="Go" icon="/images/go.gif" actionListener="#{pivotTableBean.imageLinkClick}"/> <af:outputText value="#{cellData.dataValue}" /> </dvt:dataCell> </dvt:pivotTable>
イメージに関連するアクションは登録されたリスナー、actionListener
を使用して処理されます。Beanクラスでは、イメージ・リンクがクリックされると呼び出されるメソッドを次のように指定します。
public void imageLinkClick (javax.faces.event.ActionEvent.action)
データ・セルでスタンプ設定を使用する場合と同様に、dvt:headerCell
子コンポーネントでヘッダー・セルのコンテンツをカスタマイズして、各ヘッダー・セルに読取り専用コンポーネントを配置できます。af:outputText
、af:image
、af:icon
、af:commandImageLink
およびaf:commandLink
などの読取り専用コンポーネントまたは編集不可コンポーネントのみがサポートされます。
デフォルトでは、ヘッダー・セルの長いテキスト文字列の折返しはサポートされません。dvt:headerCell
コンポーネントのwhiteSpace
属性を使用して、この設定をデフォルトのnoWrap
からnormal
に変更することにより、ヘッダー・セルの折返しを指定できます。
例27-9に、ピボット・テーブルのヘッダー・セルで、af:outputText
に折返しを使用し、af:commandImageLink
とaf:icon
をそれぞれカスタム・イメージおよびカスタム・アイコンとして使用するサンプル・コードを示します。
例27-9 ヘッダー・セルでのカスタム・コンポーネントの使用
<dvt:pivotTable id="goodPT" binding="#{pivotTableHeaderCellDemo.pivotTable}" contentDelivery="immediate" value="#{pivotTableHeaderCellDemo.dataModel}" var="cellData" varStatus="cellStatus"> <!-- header cell components --> <dvt:headerCell whiteSpace="normal"> <af:switcher defaultFacet="default" facetName="#{cellData.layerName}"> <f:facet name="Geography"> <af:outputText value="#{cellData.label}" shortDesc="#{cellData.label}"/> <af:icon name="info" shortDesc="#{cellData.indent}" /> </f:facet> <f:facet name="Channel"> <af:outputText value="#{cellData.label}" /> <af:commandImageLink shortDesc="Sample commandImageLink" icon="/resources/images/pivotTableCSVDemo/smily-normal.gif" hoverIcon="/resources/images/pivotTableCSVDemo/smily-glasses.gif" /> <af:commandButton text="Go to Tag Guide page" immediate="true" action="guide" /> </f:facet> <f:facet name="Product"> <af:outputText value="#{cellData.label}" /> <af:commandButton text="Go to Tag Guide page" immediate="true" action="guide" /> </f:facet> <f:facet name ="default"> <af:commandLink text="#{cellData.label}" immediate="true" action="guide"/> </f:facet> </af:switcher> </dvt:headerCell> ... </dvt:pivotTable>
図27-16に、結果のピボット・テーブルを示します。
ピボット・テーブルおよびピボット・フィルタ・バーのスキニング・キーの完全なリストは、Oracle Fusion Middleware Documentation Oracleデータ視覚化ツール・スキン・セレクタ・タグ・リファレンスを参照してください。JDeveloperのヘルプ・センターからリストにアクセスするには、「ドキュメント・ライブラリ」、「Fusion MiddlewareリファレンスとAPI」の順に選択します。スキンを使用したアプリケーションのカスタマイズの詳細は、第20章「スタイルおよびスキンを使用した外観のカスタマイズ」を参照してください。
ピボット・フィルタ・バーを追加することにより、ピボット・テーブルでのデータ・フィルタ処理能力を強化できます。ピボット・テーブルの行エッジまたは列エッジですでに表示されなくなったゼロ以上のデータのレイヤーは、ページ・エッジでは表示されます。図27-17に、ピボット・テーブルに表示されるデータのフィルタ処理に使用可能なレイヤー(コンポーネントおよび地理上の位置)を含むピボット・フィルタ・バーを示します。
行、列またはページ・エッジ間でレイヤーをピボットすることにより、ピボット・テーブルでのデータの表示を変更することもできます。目的に応じてエッジ間でレイヤーをドラッグするには、ピボット・ハンドルを使用します。図27-18に、Channelデータ・レイヤーをページ・エッジに対してピボットして変更されたピボット・テーブルとピボット・フィルタ・バーを示します。
ピボット・フィルタ・バー・コンポーネントdvt:pivotFilterBar
と、ピボット・テーブル・コンポーネントdvt:pivotTable
を関連付けるには、両方のコンポーネントが連携するようにデータ・モデルと関連するプロパティを構成します。図27-10に、ピボット・フィルタ・バーとピボット・テーブルを関連付けるサンプル・コードを示します。
例27-10 ピボット・フィルタ・バーのサンプル・コード
<dvt:pivotFilterBar id="pf1" value="#{binding.pt.pivotFilterBarModel}" modelName="pt1Model"/> <dvt:pivotTable id="pt1" value="#{binding.pt.dataModel}" modelName="pt1Model" partialTriggers="pf1"/>
ピボット・フィルタ・バーは、次のどの方法でもピボット・テーブルに関連付けることができます。
データ・コントロール・パネルを使用してピボット・テーブルを作成します。
データ・コントロール・パネルからデータ・コレクションをドラッグして、ページ上にピボット・テーブルを作成する場合、「ピボット・テーブルの作成」ウィザードの「表示属性の選択」ページで、ピボット・テーブルと関連付けるピボット・フィルタ・バーを作成するためのオプションが表示されます。ページ・エッジでデータ・レイヤーを表すゼロ以上の属性を指定することを選択できます。データ・モデルおよび関連付けられたプロパティは自動的に構成されます。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたピボット・テーブルの作成に関する項を参照してください。
データにバインドされたピボット・テーブルにピボット・フィルタ・バーを追加します。
コンポーネント・パレットの「ADFデータ視覚化」ページで、データ・コレクションにバインドされているdvt:pivotTable
要素の上にdvt:pivotFilterBar
要素をドラッグできます。この場合、ピボット・フィルタ・バーがピボット・テーブルと連係するように、データ・モデルと関連プロパティを構成する必要があります。
データにバインドされていないピボット・テーブルにピボット・フィルタ・バーを追加します。
コンポーネント・パレットの「ピボット・テーブル」パネルの「ADFデータ視覚化」ページで、データ・コレクションにバインドされていないdvt:pivotTable
要素の上にdvt:pivotFilterBar
要素をドラッグできます。この場合、ピボット・フィルタ・バーがピボット・テーブルと連係するように、データ・モデルと関連プロパティを構成する必要があります。