Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド 11gリリース1 (11.1.1.7.0) B52029-11 |
|
![]() 前 |
![]() 次 |
この章では、データ・バインドされたADFガント・チャート・コンポーネントを使用してデータを表示する方法とガント・チャートのカスタマイズ・オプションについて説明します。
この章では、次の項目について説明します。
ADFガント・チャートのデータ・バインディングの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたガント・チャートの作成に関する項を参照してください。
ガント・チャートは、横棒グラフの一種で、プロジェクトの計画と追跡に使用します。リソースまたはタスクを、開始と終了が明確なタイム・フレームに示します。ADFガント・チャート・コンポーネントは2つの領域で構成されます。1つは、表のガント・チャート・データを表示し、もう1つは、サイズ変更可能なスプリッタを使用して2つの領域間のガント・チャート・データをグラフィカルに表示します。表とチャートの領域は、同じデータと選択モデルを共有し、2つの領域間でスクロール、行の展開および縮小がサポートされ、同期化されます。
実行時に、ガント・チャートでは表領域にデータの入力、行の展開および縮小、列の表示および非表示、行へのナビゲート、および列のソートおよび合計の表示などの対話機能がユーザーに提供されます。表領域で、ユーザーはタスクを新しい日付にドラッグし、複数のタスクを選択して依存性を作成し、タスクの日付を拡張できます。ガント・チャートのツールバーは、データの表示の変更またはフィルタ処理、およびタスクの作成、削除、切取り、コピーおよび貼付けなどのユーザー操作のサポートに使用します。
ガント・チャートの領域は、両方ともADF Facesのツリー表コンポーネントに基づいています。行の仮想化など、ADFツリー表の詳細は、第10章「表、ツリー、およびその他のコレクションベースのコンポーネントの使用」を参照してください。
ガント・チャートには次のコンポーネントが用意されています。
プロジェクト・ガント・チャート: プロジェクト・ガント・チャートはプロジェクト管理に使用されます。このチャートでは、タスクを縦にリストし、横向きの予定表に各タスクの期間を棒で示します。図29-1に示すように、各タスクは別の線で示されます。
リソース使用率ガント・チャート: リソース使用率ガント・チャートでは、リソースのメトリック、たとえばリソースが割当てを上回っているか下回っているかをグラフィカルに示します。リソースを縦に示し、横方向の時間軸に割当てとキャパシティなどのメトリックを示します。図29-2に、指定した期間の特定の開発者リソースに割り当てられ、利用されている時間を表示するリソース使用率ガント・チャートを示します。
スケジュール・ガント・チャート: スケジュール・ガント・チャートはリソースのスケジュールに使用されます。このチャートは手動のスケジュール表をベースにし、リソースを縦に表示し、対応するアクティビティを横方向の時間軸に表示します。リソースの例には、人、機械、部屋などがあります。スケジュール・ガント・チャートでは、図29-3に示すように、リソースに割り当てられている全タスクが1つの線で示されます。
ガント・チャートは次の機能領域で構成されます。
表領域:ガント・チャート・データ属性を表の列に表示します。表領域には最低1つの列が必要ですがガント・チャート・データ・バインディング・ダイアログで必要な数の列に属性を定義できます。
たとえば、図29-1では、表領域に、Name(タスクの)、Priority、Orig. Est.、Curr. Est.、Elapsed(日数)、Remaining(日数)およびResourcesの列が含まれています。
チャート領域:ガント・チャート・データの棒グラフを横方向の時間軸に沿って表示します。時間軸にはズーム用の主設定と副設定があります。主設定はより大きな時間単位用で、副設定はより小さな時間単位用です。
たとえば、図29-1のチャート領域には、曜日を示す時間軸にタスクが表示されています。
情報パネル:情報領域(選択されたタスクまたは選択されたリソースに関するメトリックスに関するテキストを表示)とオプションの凡例(タスク・タイプを表示)を表領域とチャート領域の下に表示します。親ガント・チャート・タグ内に凡例子タグを挿入しないかぎり、ガント・チャートの凡例はないことに注意してください。
ツールバー:ユーザーのガント・チャートの操作を可能にします。ツールバーはデフォルトでガント・チャートに表示されます。ガント・チャートのプロパティ・インスペクタの「外観」ページでShowToolbar
属性を設定することにより、ツールバーの可視性を変更できます。
ツールバーは次のセクションで構成されます。
メニュー・バー:ツールバーの左側の部分には、ガント・チャートに対するメニューのセットが含まれます。各ガント・チャート・タイプには、デフォルトのオプションのセットがあります。図29-4に、ガント・チャートにデフォルトで表示されるメニュー・バーを示します。ガント・チャートのプロパティ・インスペクタの「外観」ページでShowMenuBar
属性を設定することにより、メニュー・バーの可視性を変更できます。menubar
ファセットを使用してメニュー項目をカスタマイズできます。
注意: 「表示」メニュー項目には、それらを機能させるためのアプリケーション・コードを書く必要はありません。ただし、他のメニューで使用する項目にはアプリケーション・コードが必要です。 |
ツールバー・ボタン:ツールバーの右側の部分には、ガント・チャートを操作するためのアクション・ボタンのセットが表示されます。各ガント・チャート・タイプには、デフォルトのオプションのセットがあります。図29-5に、プロジェクト・ガント・チャートのサンプル・ツールバーを示します。
toolbar
ファセットを使用してツールバー・ボタンをカスタマイズできます。
ポップアップ・メニュー:ガント・チャート表領域またはチャート領域を右クリックすると、標準のメニュー項目のセットがポップアップ・メニューに表示されます。tablePopupMenu
ファセットまたはchartPopupMenu
ファセットを使用して独自のメニュー項目のセットを使用できます。
印刷サービス:ガント・チャートには、XML Publisherと連動してPDFファイルを生成し、印刷する機能が用意されています。詳細は、29.10項「ガント・チャートの印刷」を参照してください。
プロジェクト・ガント・チャートおよびスケジュール・ガント・チャートでは、チャート領域でのタスクのレンダリング方法を説明する書式設定プロパティのセットが指定された事前定義済タスクが使用されます。すべてのサポートされるタスクには一意の識別子が必要です。次のリストで、サポートされるタスクとガント・チャートでの外観を説明します。
標準:基本的なタスク・タイプ。プレーンな横棒でタスクの開始時期、終了時期および期間を示します。
サマリー:サブタスクのグループの開始日と終了日。サマリー・タスクは移動や伸長できません。サブタスクの日付が変更された場合、アプリケーションで、サマリー・タスクの開始日と終了日をかわりに再計算する必要があります。サマリー・タスクはプロジェクト・ガント・チャートにのみ使用できます。
マイルストン:ガント・チャートの特定の日付。マイルストン・タスクに関連付けられる日付は1つのみです。マイルストン・タスクは伸長できませんが、移動できます。マイルストン・タスクはプロジェクト・ガント・チャートにのみ使用できます。
再帰:ガント・チャートで繰り返されるタスクで、各インスタンスには独自の開始日および終了日が含まれます。個々の再帰タスクにはオプションでサブタイプを含めることができます。個々の再帰タスクのその他すべてのプロパティには、そのタスクが一部となっているタスクのプロパティが使用されます。ただし、個々の再帰タスクにサブタイプがある場合は、このサブタイプがタスク・タイプをオーバーライドします。
分割:2つの横棒に分割されたタスクで、通常は線でつながっています。棒の間の時間は、移動時間または停止時間によるアイドル時間を表します。
スケジュール済:スケジュール・ガント・チャートの基本的なタスク・タイプ。このタスク・タイプはタスクの開始時期、終了時期および期間、および指定されている場合は起動時期を示します。
標準タスク、サマリー・タスクおよびマイルストン・タスクでは、タスクの外観およびアクティビティを変更する追加の属性がサポートされています。次にこれらのスタイル属性を示します。
percentComplete
、completedThrough:
タスクの完了度を示す追加の棒グラフが描画されます。これは標準タスク・タイプおよびサマリー・タスク・タイプに適用されます。
critical:
棒グラフの色が赤に変更され、クリティカルとしてマークされます。これは標準タスク・タイプ、サマリー・タスク・タイプおよびマイルストン・タスク・タイプに適用されます。
actualStart
およびactualEnd:
これらの属性が指定されると、1つの棒グラフではなく2つの棒グラフが描画されます。1つの棒グラフはベース開始日およびベース終了日を示し、もう1つの棒グラフは実際の開始日および終了日を示します。これは標準タスク・タイプおよびマイルストン・タスク・タイプに適用されます。
図29-6に、プロジェクト・ガント・チャートの一般的なタスク・タイプを表示する凡例を示します。
各ガント・チャート・タグ名が接頭辞dvt:
で始まる3つのガント・チャート・コンポーネントは、タグがADF Data Visualization Tools (DVT)タグ・ライブラリの1つであることを示します。
dvt:projectGantt
dvt:resourceUtilizationGantt
dvt:schedulingGantt
すべてのガント・チャート・コンポーネントが子タグdvt:ganttLegend
をサポートして、ガント・チャートの情報パネルにオプションの凡例を提供します。一部のメニュー・バーおよびツールバーの機能は、ガントの凡例が指定されているかどうかによって使用できる場合とできない場合があります。
ガント・チャート表領域では、ADF Faces af:column
タグを使用して、ヘッダー・テキスト、アイコンおよびデータの位置合せ、列の幅、および列にバインドされたデータを指定できます。データを階層構造で表示するには、nodeStamp
ファセットで階層の要素の1次識別子を指定します。たとえば、"Task Name"列をプロジェクト・ガント・チャートのnodeStamp
ファセットとして使用することもできます。例29-1に、"Task Name"をnodeStamp
ファセットとして使用し、Resource、Start DateおよびEnd Dateの列を持つプロジェクト・ガント・チャートのサンプル・コードを示します。
例29-1 プロジェクト・ガント・チャートの列のサンプル・コード
<dvt:projectGantt startTime="2008-04-12" endTime="2009-04-12" value="#{project.model}" var="task"> <f:facet name="major"> <dvt:timeAxis scale="months"/> </f:facet> <f:facet name="minor"> <dvt:timeAxis scale="weeks"/> </f:facet> <f:facet name="nodeStamp"> <af:column headerText="Task Name"> <af:outputText value="#{task.taskName}"/> </af:column> </f:facet> <af:column headerText="Resource"> <af:outputText value="#{task.resourceName}"/> </af:column> <af:column headerText="Start Date"> <af:outputText value="#{task.startTime}"/> </af:column> <af:column headerText="End Date"> <af:outputText value="#{task.endTime}"/> </af:column> </dvt:projectGantt>
nodeStamp
ファセットに加え、他のファセットもガント・チャート・コンポーネントによってカスタマイズに使用されます。表29-1に、ガント・チャート・コンポーネントによってサポートされているファセットを示します。
表29-1 ガント・チャート・コンポーネントによってサポートされているファセット
名前 | 説明 |
---|---|
|
チャート領域のポップアップ・メニューに表示される追加のコントロールの識別に使用するコンポーネントを指定します。 |
|
タスク・プロパティ・ダイアログの「カスタム」タブに表示されるコントロールの識別に使用するコンポーネントを指定します。 |
|
主時間軸の識別に使用するコンポーネントを指定します。 |
|
ガント・メニュー・バーに表示される追加のコントロールの識別に使用するコンポーネントを指定します。 |
|
副時間軸の識別に使用するコンポーネントを指定します。 |
|
ガント・チャートの各要素のスタンプ設定に使用するコンポーネントを指定します。アクティビティのないすべてのコンポーネント、および |
|
表領域のポップアップ・メニューに表示される追加のコントロールの識別に使用するコンポーネントを指定します。 |
|
ガント・ツールバーに表示される追加のコントロールの識別に使用するコンポーネントを指定します。 |
すべてのガント・チャート・タグとその属性の詳細、および有効な値のリストは、DVTタグのドキュメントを参照してください。JDeveloperで特定のタグのドキュメントにアクセスするには、構造ウィンドウでタグを選択し、[F1]キーを押します。JDeveloperのヘルプでADF Data Visualization Toolsタグ・ライブラリにアクセスするには、オンライン・ヘルプの目次でJavadocとタグ・ライブラリ・リファレンスのノードを開き、「JDeveloperタグ・ライブラリ・リファレンス」トピックのタグ・ライブラリへのリンクをクリックします。
実行時に、ユーザーはガント・チャートでナビゲーションと表示、および表領域またはチャート領域でデータを変更するアクションなど、様々な操作を実行できます。
ユーザーとの対話にデータの変更が伴う場合、ガント・チャートでは検証、イベント処理およびデータ・モデルの更新を実行することによって変更が処理されます。検証では、送信されたデータが基本的な要件を満たしていること、たとえば日付が有効で休日の期間に該当しないことなどが確認できます。検証に失敗すると、データ・モデルの更新が省略され、エラー・メッセージが返されます。
ガント・チャートのサーバー側イベントが開始されると、変更に関する検証された情報を含むイベントが登録されたリスナーに送信されます。リスナーは基礎となるデータ・モデルを更新します。カスタマイズされたイベント・ハンドラは、ガント・チャート・コンポーネントのdataChangeListener
属性でメソッド・バインディング式を指定することによって登録できます。
ガント・チャートによってサポートされるサーバー側イベントには、次のものが含まれます。
ガント・チャート表領域における表のセルのデータ更新
タスクの作成、更新、削除、移動、切取り、コピー、貼付け、インデント、アウトデント
タスク・バーを1つの行から別の行にドラッグすることによるリソースの再割当て
別の日付へのタスク・バーのドラッグ
タスクの期間の延長
タスクのリンク付けまたはリンク解除
ガント・チャート表領域での単一の行または複数の行の選択
ユーザー・アクションを元に戻すまたはやり直し
タスク・バーのダブルクリック
ユーザーはツールバーからドロップダウン・リストを使用してガント・チャートのデータをフィルタ処理できます。カスタム・フィルタを作成できます。
スクロールを使用してガント・チャートの領域を移動したり、チャート領域で特定の日付にアクセスできます。表領域の列を表示するかどうかも制御できます。
ガント・チャートの設計により、表領域とチャート領域の横方向のスクロールを別々に行えます。これは、表領域で特定のタスクまたはリソース情報を保持しつつ、チャート領域でスクロールして複数期間の情報を得る場合に特に有用です。
ユーザーは、[Ctrl]キーを押しながら、マウスのスクロール・ホイールを使用することで、ガント・チャートのタイム・スケール上でズーム・インとズーム・アウトができます。
プロジェクトおよびスケジュール・ガント・チャートでは、マウスを使用してチャート領域を縦および横にドラッグすることでその領域をパンすることができます。移動カーソルは、ユーザーがタスク以外のチャート領域内をクリックすると表示されます。
ガント・チャートのチャート領域で特定の日付に移動できます。
ガント・チャートで特定の日付に移動する手順:
「表示」メニューから、日付に移動を選択します。
「日付に移動」ダイアログで、「日付の選択」アイコンをクリックし、カレンダで日付を選択して、目的の日付を指定します。
「OK」をクリックします。
ガント・チャートのチャート領域は、要求した日付から表示されます。
ガント・チャートで階層式のデータ・モデルを使用している場合、ガント・チャート・データを折りたたんだ形式または展開した形式で表示できます。
ガント・チャート・データのリストでの表示を制御する手順:
「表示」メニューから、「リスト・ペイン」を選択します。
次のメニューから、「リストとして表示」(展開されたリストの場合)または「階層として表示」(折りたたんだリストの場合)のいずれかを選択します。
ガント・チャートのタイム・スケールの表示を変更し、時間軸をズーム・インおよびズーム・アウトして、異なる時間単位でチャート領域を表示できます。ズームして合せる特殊な機能を使用すると、グラフをスクロールする必要なく、チャート領域で表示可能な時間の量を選択することもできます。
時間軸の設定を変更する手順:
「表示」メニューから、「タイム・スケール」を選択します。
続く「タイム・スケール」ダイアログの「時間単位」列で、主軸、副軸、または両方に新しい単位の値を選択します。サンプル・ボックスには、選択する時間単位のサンプル設定が表示されています。図29-7に、「タイム・スケール」ダイアログを示します。
「OK」をクリックします。
時間軸を拡大または縮小する手順:
(オプション)より低いレベルの時間単位で時間軸を表示するには、ツールバーで「拡大」アイコンを選択します。
(オプション)より高いレベルの時間単位で時間軸を表示するには、ツールバーで「縮小」アイコンを選択します。
(オプション)ツールバーのズーム・アイコンの次のボックスで、スクロールなしでチャートに表示する時間を表す期間を選択します。
(オプション)スケールを変更する時間軸を右クリックし、サブメニューから使用可能な時間単位を選択します。
ガント・チャートのデータ・モデルは、ツリー(階層)モデル、あるいは行セットまたはオブジェクトのフラット・リストを含むコレクション・モデルのいずれかです。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたガント・チャートの作成に関する項を参照してください。
ガント・チャートをデータ・コントロールにバインドする場合、データ・コントロールのコレクションをガント・チャートのノード定義へマップする方法を指定します。
プロジェクト・ガント・チャートのデータ・モデルは、階層式のデータをサポートし、TreeModel
を使用して基礎となるリストのデータにアクセスします。使用される特定のモデル・クラスはorg.apache.myfaces.trinidad.model.TreeModel
です。
TreeModel
によって返されるオブジェクトのコレクションには、最低限、次のプロパティが必要です。
taskId:
タスクのID
startTime:
タスクの開始時期
endTime:
タスクの終了時期
(オプション)オブジェクトにoracle.adf.view.faces.bi.model.Task
インタフェースを実装して、ガント・チャートに正しいプロパティが提供されていることを確認できます。
ADFデータ・コントロールにデータをバインドする場合、プロジェクト・ガント・チャートでは、次のノード定義を使用できます。
タスク・ノード:タスクのコレクションを表します。タスク・ノード定義には、次のタイプのオプション・アクセッサがあります。
subTask
(プロジェクト・ガント・チャートにのみ使用可能)
splitTask
分割タスク・ノード:分割タスクのコレクションを表します。分割タスク・ノード定義にはアクセッサはありません。
依存性ノード:タスクの依存性のコレクションを表します。依存性ノード定義には、アクセッサはありません。
再帰タスク・ノード:再帰タスクのコレクションを表します。再帰タスク・ノード定義には、アクセッサはありません。
表29-2に、プロジェクト・ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。
表29-2 プロジェクト・ガント・チャートのデータ・オブジェクト・キー
データ・オブジェクト・キー | データ型と説明 |
---|---|
|
Date。標準タスクおよびマイルストン・タスクの実際の終了時期。 |
|
Date。標準タスクおよびマイルストン・タスクの実際の開始時期。 |
|
Date。標準タスクおよびサマリー・タスクの完了。 |
|
Boolean。タスクがすべてのタスクに対してクリティカルかどうかを指定します。 |
依存性(ノード) |
タスクの依存性のリスト。依存性のデータ・オブジェクト・キーには次のものが含まれる。
|
|
Date。すべてのタスクの終了時期。 |
|
String。すべてのタスクのタスク・バーに関連付けられる1番目のアイコン。アイコンは、その他の属性に応じて変わる可能性があります。 |
|
String。すべてのタスクのタスク・バーに関連付けられる2番目のアイコン。 |
|
String。すべてのタスクのタスク・バーに関連付けられる3番目のアイコン。 |
|
String。すべてのタスクのタスク・バーでのアイコンの配置。有効な値は |
|
Boolean。ノード定義がコンテナかどうかを指定します。 |
|
String。すべてのタスクのタスク・バーに関連付けられるラベル。 |
|
String。すべてのタスクのタスク・バーでのラベルの配置。有効な値は |
|
Integer。標準タスクおよびサマリー・タスクが完了した割合。 |
再帰タスク(ノード) |
すべてのタスクに関する再帰タスクのリスト。 |
分割タスク(ノード) |
すべてのタスクに関する連続的な時系列のないタスクのリスト。 |
|
Date。すべてのタスクの開始時期。 |
サブタスク(ノード) |
すべてのタスクに関するサブタスクのオプションのリスト。 |
|
String。すべてのタスクの一意の識別子。 |
|
Sting。すべてのタスクに関するタスクのタイプ。 |
リソース使用率ガント・チャートのデータ・モデルは、階層式のデータをサポートし、TreeModel
を使用して基礎となるリストのデータにアクセスします。使用される特定のモデル・クラスはorg.apache.myfaces.trinidad.model.TreeModel
です。
TreeModel
によって返されるオブジェクトのコレクションには、最低限、次のプロパティが必要です。
resourceId:
タスクのID。
timeBuckets:
このリソースの時間バケット・オブジェクトのコレクション。
(オプション)オブジェクトにoracle.adf.view.faces.bi.model.Resource
インタフェースを実装して、ガント・チャートに正しいプロパティが提供されていることを確認できます。
timeBuckets
プロパティによって返されるオブジェクトのコレクションには、次のプロパティも必要です。
time:
時間バケットによって表される日付。
values:
このリソースのメトリックのリスト。
ADFデータ・コントロールにデータをバインドする場合、リソース使用率ガント・チャートでは、次のノード定義を使用できます。
リソース・ノード:リソースのコレクションを表します。リソース・ノード定義には、現在のリソースのサブリソースのコレクションを返すsubResources
オプション・アクセッサがあります。
時間バケット・ノード:メトリックが定義された時間スロットのコレクションを表します。
表29-3に、リソース使用率ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。
スケジュール・ガント・チャートのデータ・モデルは、階層式のデータをサポートし、TreeModel
を使用して基礎となるリストのデータにアクセスします。使用される特定のモデル・クラスはorg.apache.myfaces.trinidad.model.TreeModel
です。
TreeModel
によって返されるオブジェクトのコレクションには、最低限、次のプロパティが必要です。
resourceId:
タスクのID。
tasks:
このリソースのタスク・オブジェクトのコレクション。
(オプション)オブジェクトにoracle.adf.view.faces.bi.model.ResourceTask
インタフェースを実装して、ガント・チャートに正しいプロパティが提供されていることを確認できます。
tasks
プロパティによって返されるオブジェクトのコレクションには、次のプロパティも必要です。
taskId:
タスクのID
startTime:
タスクの開始時期
endTime:
タスクの終了時期
ADFデータ・コントロールにデータをバインドする場合、スケジュール・ガント・チャートでは、次のノード定義を使用できます。リソース・ノードには、次のタイプのアクセッサがあります。
subResources
: 現在のリソースのサブリソースのコレクションを返します。このアクセッサはオプションです。
tasks
: 現在のリソースのタスクのコレクションを返します。このアクセッサは必須です。タスクに、splitTask
アクセッサを含めることができます。
表29-4に、スケジュール・ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。
表29-4 スケジュール・ガント・チャートのデータ・オブジェクト・キー
データ・オブジェクト・キー | データ型と説明 |
---|---|
依存性(ノード) |
タスクの依存性のリスト。依存性のデータ・オブジェクト・キーには次のものが含まれる。
|
|
Date。すべてのタスクの終了時期。 |
|
String。すべてのタスクのタスク・バーに関連付けられる1番目のアイコン。アイコンは、その他の属性に応じて変わる可能性があります。 |
|
String。すべてのタスクのタスク・バーに関連付けられる2番目のアイコン。 |
|
String。すべてのタスクのタスク・バーに関連付けられる3番目のアイコン。 |
|
String。すべてのタスクのタスク・バーでのアイコンの配置。有効な値は、 |
|
Boolean。ノード定義がコンテナかどうかを指定します。 |
|
String。すべてのタスクのタスク・バーに関連付けられるラベル。 |
|
String。すべてのタスクのタスク・バーでのラベルの配置。有効な値は、 |
再帰タスク(ノード) |
すべてのタスクに関する再帰タスクのリスト。 |
|
String。リソースの一意の識別子。 |
分割タスク(ノード) |
すべてのタスクに関する連続的な時系列のないタスクのコレクション。 |
|
Date。すべてのタスクの開始時期。 |
|
Date。タスクの開始前の起動時期。 |
タスク(ノード)(必須) |
リソースに関連付けられるタスクのリスト。 |
|
String。すべてのタスクに関するタスクの一意の識別子。 |
|
String。すべてのタスクに関するタスクのタイプ。 |
|
Object。その週の営業日のリスト。 |
|
Date。リソースの作業終了時間。 |
|
Date。リソースの作業開始時間。 |
ADF Faceガント・チャート・コンポーネントの作成には次のデータソースを使用できます。
ADFデータ・コントロール: ADFデータ・コントロール・パネルからデータ・コレクションをドラッグ・アンド・ドロップして、データ・バインドされたガント・チャートを宣言的に作成します。『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のデータバインドされたガント・チャートの作成に関する項で説明されているように、行セット・データを持つデータ・コレクションを使用するガント・チャートを作成できます。
データ・モデル: ガント・タグのvalue
属性を使用してバッキングBeanメソッドを参照するEL式を提供することによってプログラムでガント・チャートのデータ・モデルを指定します。
ガント・チャートの下に表示される情報パネルおよび凡例、メニュー・バー・オプションおよびツールバー・ボタン、およびガント・チャート表領域およびチャート領域を右クリックすると表示されるポップアップ・メニューなど、デフォルトのガント・チャート機能を変更することができます。
オプションのガント・チャートの凡例サブコンポーネントには、選択されたタスクまたは選択された時間バケットに関するメトリックに関する詳細情報が表示される領域、およびガント・チャートの各タスク・タイプを表すために使用される記号および色コード・バーが含まれています。実行時に、ツールバー・ボタンを使用して情報パネルを表示または非表示にできます。
凡例エリアを提供するには、ガント・チャート・タグの子としてdvt:ganttLegend
タグを追加する必要があります。凡例エリアのコンテンツは、taskbarFormatManager
で登録された各タスク・タイプのプロパティに基づいて自動的に生成されます。
ガント・チャートの凡例タグでkeys属性およびlabel属性を使用してタスクまたは時間バケットが選択された場合に表示される情報をカスタマイズできます。keys
属性では、表示する値の取得に使用されるデータ・オブジェクト・キーを指定し、labels
属性には、キーで取得した値に対応するラベルが含まれる必要があります。これらの属性が指定されていないと、凡例で情報パネルの領域全体が使用されます。
ガント・チャートの凡例タグでiconKeys
属性およびiconLabels
属性を使用して、凡例にアイコンを追加することもできます。アイコンのサイズが大きすぎる場合は、自動的に縦横12ピクセルにサイズ変更されます。
例29-2に、プロジェクト・ガント・チャートの凡例に保留中タスクに関する情報を表示するサンプル・コードを示します。
ガント・チャート・ツールバー・サブコンポーネントを使用すると、ガント・チャートの操作を実行できます。ツールバーの左側の部分には、各ガント・チャート・タイプに対するデフォルトのメニュー・オプション・セットを含むメニュー・バーがあります。ツールバーの右側の部分には、各ガント・チャート・タイプを操作するためのデフォルトのアクション・ボタンのセットが表示されます。
ガント・チャートのmenu
ファセットおよびtoolbar
ファセットを使用することによって、独自のメニュー項目およびツールバー・ボタンを使用できます。ガント・チャートでは、新しいメニュー項目と標準の項目がマージされます。例29-3に、新しいメニュー項目を指定するサンプル・コードを示します。
例29-3 カスタム・メニュー項目のサンプル・コード
<dvt:projectGantt var="task"> <f:facet name=”menus”> <af:menu text=”My Menu”> <af:commandMenuItem text="Add..." /> <af:commandMenuItem text="Create.." /> </af:menu> </f:facet> </dvt:projectGantt>
例29-4に、新しいツールバー・ボタンを指定するサンプル・コードを示します。
例29-4 カスタム・ツールバー・ボタンのサンプル・コード
<dvt:schedulingGantt var="task"> <f:facet name="toolbar"> <af:toolbar> <af:commandToolbarButton text="Custom" disabled="true"/> </af:toolbar> </dvt:schedulingGantt>
メニュー・バーおよびツールバー・ボタンで開始されるアクションは、登録されたリスナー、DataChangeListener
を使用してガント・チャート・コンポーネント上で処理されます。たとえば、ユーザーがツールバーで削除ボタンを押すと、削除に選択されたタスクのIDを持つDataChangeEvent
がサーバー上で開始されます。登録されたリスナーがタスクの実際の削除を行い、ガント・チャート・データ・モデルは更新された情報を使用して更新されます。
ガント・チャート・タグでdataChangeListener
属性を使用してメソッド・バインディングを指定することによってDataChangeListener
を登録できます。たとえば、バッキングBeanのhandleDataChange
という名前のメソッドにコードを入れる場合、dataChangeListener
属性の設定は、"#{myBackingBean.handleDataChange}"
になります。
例29-5に、バッキングBeanのサンプル・コードを示します。
ユーザーがガント・チャートの表領域またはチャート領域を右クリックすると、ガント・チャートを操作するポップアップ・メニューが表示されます。各領域に標準のオプションのセットが提供されます。
ガント・チャートのtablePopupMenu
ファセットおよびchartPopupMenu
ファセットを使用することによって、独自のメニュー項目を使用できます。ガント・チャートでは、新しいメニュー項目と標準の項目がマージされます。例29-6に、表領域のポップアップ・メニューにカスタム・メニュー項目を指定するサンプル・コードを示します。
例29-6 カスタム・ポップアップ・メニュー項目のサンプル・コード
<dvt:projectGantt startTime="#{test.startTime}" endTime="#{test.endTime}" value="#{test.treeModel}" var="task"> <f:facet name="tablePopupMenu"> <af:popup> <af:commandMenuItem text="Custom" disabled="true"/> </af:popup> </f:facet> </dvt:projectGantt>
実行時にポップアップ・メニューを動的に変更することもできます。例29-7に、プロジェクト・ガント・チャートのチャート領域で選択したタスクに基づいてタスク・バーでカスタム・ポップアップ・メニューを更新するサンプル・コードを示します。
例29-7 動的ポップアップ・メニュー項目のサンプル・コード
<dvt:projectGantt var="task" taskSelectionListener="#{backing.handleTaskSelected}"> <f:facet name="chartPopupMenu"> <af:popup id="p1" contentDelivery="lazyUncached"> <af:menu> </af:menu> </af:popup> </f:facet> </dvt:projectGantt>
handleTaskSelected
メソッドは、バッキングBeanで指定されます。例29-8に、バッキングBeanのサンプル・コードを示します。
例29-8 タスク選択を処理するためのバッキングBean
public void handleTaskSelected(TaskSelectionEvent evt) { JUCtrlHierNodeBinding _task = (JUCtrlHierNodeBinding)evt.getTask(); String _type = _task.getAttribute("TaskType"); RichPopup _popup = m_gantt.getFacet("chartPopupMenu"); if (_popup != null) { RichMenu _menu = (RichMenu)_popup.getChildren().get(0); _menu.getChildren().clear(); if ("Summary".equals(_type)) { RichCommandMenuItem _item = new RichCommandMenuItem(); _item.setId("i1"); _item.setText("Custom Action 1"); _menu.getChildren().add(_item); } else if ("Normal".equals(_type)) { RichCommandMenuItem _item = new RichCommandMenuItem(); _item.setId("i1"); _item.setText("Custom Action 2"); _menu.getChildren().add(_item); } } }
af:popup
コンポーネントの使用方法の詳細は、第13章「ポップアップ・ダイアログ、メニューおよびウィンドウの使用方法」を参照してください。
ガント・チャートのタスクをカスタマイズして新しいタスク・タイプを作成したり、カスタム・データ・フィルタを指定したり、タスク・バーにダブルクリック・イベントを追加したりできます。
タスク・タイプは、視覚的にはガント・チャートのチャート領域の棒として表されます。新しいタスク・タイプは、次の3つのいずれかの方法で作成できます。
.jspx
ファイルまたは別のCSSファイルでのタスク・タイプ・スタイル・プロパティの定義。
TaskbarFormat
オブジェクトの定義およびtaskbarFormatManager
によるオブジェクトの登録。
関連付けられたTaskbarFormat
オブジェクトの取得およびset
メソッドを使用したそのプロパティの更新による、事前定義されたタスク・タイプのプロパティの変更。
TaskBarFormat
オブジェクトでは次のプロパティが公開されます。
塗りつぶしの色
塗りつぶしのイメージ・パターン
枠の色
マイルストン・タスクに使用されるイメージ
サマリー・タスクの開始と終了に使用されるイメージ
分割タスクまたは再帰タスクなど、複数の棒のあるタスクでは、プロパティは個々の棒に定義されます。
例29-9に、.jspx
ファイルでカスタム・タスク・タイプのプロパティを定義するサンプル・コードを示します。
例29-9 カスタム・タスク・タイプのプロパティを定義するサンプル・コード
<af:document> <f:facet name="metaContainer"> <f:verbatim> <![CDATA[ <style type="text/css"> .onhold { background-image:url('images/Bar_Image.png'); background-repeat:repeat-x; height:13px; border:solid 1px #000000; } </style> ]]> </f:verbatim> </f:facet>
ここでは、TaskbarFormat
オブジェクトの塗りつぶしの色と枠の色を定義し、taskbarFormatManager
でオブジェクトを登録するサンプル・コードが示されています。
例29-10 TaskbarFormat Managerを使用して登録されたカスタムTaskbarFormatオブジェクト
TaskbarFormat _custom = new TaskbarFormat("Task on hold", null, "onhold", null); // _gantt.getTaskbarFormatManager().registerTaskbarFormat("FormatId", _custom); TaskbarFormat _custom = new TaskbarFormat("Task on hold", "#FF00FF", null, "#00FFDD", 13); // _gantt.getTaskbarFormatManager().registerTaskbarFormat("FormatId", _custom);
ツールバーからデータ・フィルタ・ドロップダウン・リストを使用してガント・チャートのデータ表示を変更できます。ガント・チャートではFilterManager
を使用して、すべての事前定義済およびユーザー指定のデータ・フィルタを管理できます。フィルタ・オブジェクトには次の情報が含まれます。
フィルタの一意のID
ドロップダウン・リストにフィルタを表示するためのラベル
フィルタが選択されたときに起動するオプションのJavaScriptメソッド
フィルタ・オブジェクトを作成し、FilterManager
でaddFilter
メソッドを使用してオブジェクトを登録して独自のフィルタを定義できます。例29-11に、FilterManager
を使用してResourceフィルタ・オブジェクトを登録するサンプル・コードを示します。
例29-11 FilterManagerを使用して登録されたカスタム・フィルタ・オブジェクト
FilterManager _manager = m_gantt.getFilterManager(); // ID for filter display label javascript callback (optional) _manager.addFilter((new Filter(RESOURCE_FILTER, "Resource...", "showResourceDialog")));
ユーザーがフィルタを選択すると、フィルタ・ロジックを実行する、登録されたFilterListener
にFilterEvent
が送信されます。リスナーの登録には、ガント・チャート・コンポーネントのfilterListener
属性が使用されます。アプリケーションによって実装されると、データ・モデルが更新され、ガント・チャート・コンポーネントにフィルタ処理された結果が表示されます。例29-12に、FilterListener
のサンプル・コードを示します。
例29-12 カスタム・フィルタのFilterListener
public void handleFilter(FilterEvent event) { String _type = event.getType(); if (FilterEvent.ALL_TASKS.equals(_type)) { // update the gantt model as appropriate } }
カスタム・データ・フィルタを指定する手順:
構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタの「動作」カテゴリのFilterListener
フィールドに、定義したFilterListener
を参照するメソッドを入力します。"#{project.handleFilter}"
などです。
ガント・チャート・コンポーネントでは、タスク・バーのダブルクリック・イベントがサポートされています。たとえば、ポップアップ・ウィンドウでタスクに関する詳細な情報が表示されるように設定できます。図29-8に、タスク・バーにダブルクリック・イベントを使用するプロジェクト・ガント・チャートを示します。
例29-13に、タスク・バーにダブルクリック・イベントを追加するサンプル・コードを示します。
例29-13 ダブルクリック・イベントのサンプル・コード
<dvt:projectGantt id="projectGanttDoubleClick" startTime="2008-04-01" endTime="2008-09-30" value="#{projectGanttDoubleClick.model}" var="task" doubleClickListener="#{projectGanttDoubleClick.handleDoubleClick}"> </dvt:projectGantt>
たとえば、次のようにバッキングBeanでhandleDoubleClick
メソッドを実装します。
public void handleDoubleClick(DoubleClick event)
休業日を表示したり、ユーザーとの対話機能を無効にしたり、時間軸を指定するようにガント・チャートをカスタマイズしたりできます。
ガント・チャートで休日を指定できます。休日は、デフォルトでは影付きのグレーで表示されますが、休日に使用するカスタム・カラーを選択できます。
特定の曜日が毎週の休業日である場合、その曜日を休業日のカテゴリとして指定できます。
曜日を休日として指定する手順:
構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタの「外観」カテゴリのNonWorkingDaysOfWeek
フィールドで、各週の休日として指定する曜日の文字列を入力します。たとえば、土曜日と日曜日を休日として指定するには、"sat sun"
と入力します。
または、バッキングBeanにメソッドを作成し、プログラムで休日を指定することもできます。たとえば、バッキングBeanのgetNonWorkingDaysOfWeek
という名前のメソッドにコードを入れる場合、nonWorkingDaysOfWeek
属性の設定は、"#{myBackingBean.nonWorkingDays}"
になります。例29-14に、バッキングBeanのサンプル・コードを示します。
オプションで、NonWorkingDaysColor
フィールドにカスタム・カラーを指定します。この属性に指定する値は、16進の色の文字列です。
個々の曜日では不十分な場合、ガント・チャートで特定の日付を休日として入力できます。
特定の日付を休日として指定する手順:
構造ウィンドウでガント・チャートを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタで、「外観」属性カテゴリを選択します。
nonWorkingDays
フィールドに、休日として指定する日付の文字列を入力します。たとえば、"2008-07-04 2008-11-28 2008-12-25"
です。
または、バッキングBeanにメソッドを作成し、プログラムで休日を指定して、柔軟性を高めることもできます。たとえば、バッキングBeanのgetNonWorkingDays
という名前のメソッドにコードを入れる場合、nonWorkingDays
属性の設定は、"#{myBackingBean.nonWorkingDays}"
になります。
オプションで、nonWorkingDaysColor
フィールドにカスタム・カラーを指定します。この属性に指定する値は、16進の色の文字列です。
ガント・チャートとユーザーとの対話は、featuresOff
プロパティで読取り専用の値を指定するように設定することでカスタマイズして無効にすることができます。表29-5に、ガント・チャート・タイプの有効な値と無効にされた機能を示します。
表29-5 読取り専用属性の有効な値
値 | 無効にされる機能 |
---|---|
|
すべてのガント・チャートでの切取り、コピーおよび貼付け。 |
|
すべてのガント・チャートのデータ・モデルへの変更。 |
|
プロジェクト・ガント・チャートおよびスケジュール・ガント・チャートでのインデントおよびアウトデント・タスク。 |
|
すべてのガント・チャートでの凡例およびタスク情報の表示および非表示。 |
|
スケジュール・ガント・チャートへのリンク付けおよびリンク解除タスク。 |
|
すべてのガント・チャートの印刷タスク。 |
|
すべてのガント¥チャートのプロパティ・ダイアログを表示します。 |
|
プロジェクト・ガントの分割タスク。 |
|
すべてのガント・チャートの元に戻すおよびやり直しタスク。 |
|
すべてのガント・チャートでのリストとして表示、階層として表示、列、展開および縮小タスク。 |
|
すべてのガント・チャートのズーム・レベルへの変更。 |
ガント・チャート機能に読取り専用の値を設定する手順:
構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタの「動作」属性カテゴリで、featuresOff
属性に無効にするガント・チャート機能を指定する1つ以上の文字列値を入力します。
たとえば、データ・モデル編集、印刷またはガント・チャートのズーム・レベル変更のためのユーザーとの対話を無効にするには、featuresOff
属性をedit print zoom
のように設定します。
または、バッキングBeanにメソッドを作成し、プログラムで機能を無効にすることもできます。たとえば、バッキングBeanのwhatToTurnOff
という名前のメソッドにコードを入れる場合、featuresOff
属性の設定は、"#{BackingBean.whatToTurnOff}"
になります。
各ガント・チャートは、主時間軸と副時間軸を使用して作成されます。各時間軸には、時間のレベルを主または副で示すファセットがあります。すべてのガント・チャートのデフォルトの時間軸設定は次のとおりです。
主時間軸: 週
副時間軸: 日
時間軸の設定をカスタマイズできます。ただし、主軸は副軸より高い時間レベルに設定する必要があります。次に、dvt:timeAxis
コンポーネントのscale
の設定値を高いものから順にリストします。
twoyears
year
halfyears
quarters
twomonths
months
twoweeks
weeks
days
sixhours
threehours
hours
halfhours
quarterhours
例29-18に、monthsを主時間軸、weeksを副時間軸として使用するガント・チャートの時間軸を設定するサンプル・コードを示します。
例29-15 monthsとweeksに設定したガント・チャートの時間軸
<f:facet name="major"> <dvt:timeAxis scale="months"/> </f:facet> <f:facet name="minor"> <dvt:timeAxis scale="weeks"/> </f:facet>
主軸および副軸に指定した時間単位は、ガント・チャートの初期表示にのみ適用されます。実行時に、ユーザーは時間軸をズーム・インまたはズーム・アウトして別のレベルの時間単位で表示できます。
ガント・チャートのカスタム時間軸を作成し、その軸をdvt:timeAxis
のscale
属性で指定できます。カスタム時間軸は、実行時に「タイム・スケール」ダイアログに追加されます。
カスタム時間軸を作成し使用する手順:
CustomTimescale.java
インタフェースを実装して、時間軸を作成するためにgetNextDate(Date currentDate)
メソッドをループでコールします。例29-16に、インタフェースのサンプル・コードを示します。
構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。
プロパティ・インスペクタの「その他」の属性カテゴリで、「CustomTimeScales」属性に、カスタム時間軸にインタフェースの実装を登録します。
customTimeScales
属性の値は、java.util.Map
オブジェクトです。指定したマップ・オブジェクトには、キー/値のペアが含まれます。キーはタイム・スケール名(fiveyears
)で、値はCustomTimeScale.java
インタフェースの実装です。次に例を示します。
customTimesScales="#{project.customTimescales}"
また、プロパティ・インスペクタで、主および副時間軸の「スケール」属性を設定し、ズームするための「ZoomOrder」属性をカスタム・タイム・スケールに指定します。例29-17に、threeyears
副時間軸とfiveyears
主時間軸を設定するためのサンプル・コードを示します。
ガント・チャート表領域では、デスクトップ・アプリケーションとタッチ装置のモバイル・ブラウザの両方に対して、縦のスクロール機能のかわりにページ・コントロールを使用できます。このコントロールは、データ・フェッチ・サイズを超える行が存在し、かつコンポーネントがそれを含むレイアウト・コンポーネントによって拡大されない場合にのみ使用できます。ページ・コントロールは、図29-9に示すように、表領域のフッターとして表示されます。
ADF Faces Webアプリケーションを開発している場合、ガント・チャートの表領域ではデフォルトで、フェッチしているデータのサイズを超えるデータを表示するために縦のスクロール・バーが使用されます。schedulingGantt
、projectGantt
またはresourceUtilizationGantt
コンポーネントの表領域に、かわりにページ・コントロールを構成するには、scrollPolicy
属性をpage
に設定します。次に例を示します。
scrollPolicy="page"
ただし、標準ADF Faces Webアプリケーションはモバイル・ブラウザで動作しますが、ユーザーの操作が異なり、スクリーン・サイズが制限されるため、アプリケーションをモバイル・ブラウザで実行する必要がある場合は、タッチ装置に固有のバージョンのページを作成する必要があります。詳細は、付録D「ADF Facesを使用したタッチ装置のWebアプリケーションの作成」を参照してください。
デフォルトでは、モバイル・デバイスにレンダリングする場合、ガント・チャートの表領域には、ユーザーが特定の行のページにジャンプできるページ・コントロールが表示されます。モバイル・デバイスに表示するすべてのガント・チャートには、次の処理が必要です。
ガント・チャート・コンポーネントをフロー・コンテナ(つまり、子を拡大しないコンポーネント)の中に配置します。フロー・コンテナ・コンポーネントの詳細は、第8.2.1項「ジオメトリ管理およびコンポーネントの拡大」を参照してください。
scrollPolicy
属性をauto
(ページがデスクトップ・デバイスでも実行される場合)、またはpage
(ページがモバイル・デバイスのみで実行される場合)に設定します。
ガント・チャートがフロー・コンテナの中にない場合、または属性が正しく設定されていない場合は、ページではなくスクロールバーが表示されます。
ADFのガント・チャートには、書式設定されたオブジェクト(FO)を生成するヘルパー・クラス(GanttPrinter
)が用意されており、XML Publisherと連動してPDFファイルが生成されます。
通常、GanttPrinter
クラスでは、ガント・チャートのコンテンツが画面に表示されたとおりに印刷されます。たとえば、ガント・チャートで凡例を非表示にすると、凡例は印刷されません。同様に、「表示」メニューの「リスト・ペイン」セクションで列を選択解除した場合、その列はガント・チャートで非表示となり、列の可視性印刷オプションを利用しないかぎり、印刷にも表示されません。
GanttPrinter
クラスでは、次の印刷オプションが使用できます。
列の可視性: setColumnVisible
メソッドでは、ガント・チャートのリスト領域の個々の列を印刷出力に表示するかどうかを制御できます。
たとえば、ガント・チャートのリスト領域の最初の列を非表示にするには、_printer.setColumnVisible(o, false);
というコードを使用します。メソッドの最初のパラメータはゼロベースの列の索引で、2番目のパラメータは印刷されたガント・チャートに列を表示するかどうかを示します。
マージン: GanttPrinter
のsetMargin
メソッドでは、次のコードで示すように、上、下、左および右マージンをピクセルで指定できます。ここで、_printer
はGanttPrinter
クラスのインスタンスです。
_printer.setMargin(25, 16, 66, 66);
ページ・サイズ: GanttPrinter
のsetPageSize
メソッドでは、次のコードで示すように、印刷されたページの高さと幅をピクセルで指定できます。ここで、_printer
はGanttPrinter
のインスタンスです。
_printer.setPageSize (440, 600);
期間: GanttPrinter
クラスのsetStartTime
およびsetEndTime
では、印刷するガント・チャートの期間を指定できます。
例29-18に、ガント・チャートの特定の期間を印刷用に設定するサンプル・コードを示します。startDate
とendDate
は日付を表す変数で、_printer
はGanttPrinter
クラスのインスタンスです。
ガント・チャートのツールバーには印刷ボタンがあり、印刷アクションが開始されます。ガント・チャートを印刷するには、印刷イベントを処理するActionListener
を作成する必要があります。ActionListener
のコードには、次のプロセスを含める必要があります。
サーブレットの出力ストリームへのアクセス。
FOの生成。このプロセスには、GanttPrinter
のインスタンスの作成と、使用する印刷オプションのコードの記述が含まれます。
PDFの生成。
例29-19に、印刷イベントを処理するActionListener
のコードを示します。このリスナーには、GanttPrinter
ヘルパー・クラスで使用できるすべての印刷オプションの設定が含まれます。
例29-19 ガント・チャートの印刷イベントを処理するサンプルActionListener
public void handleAction(GanttActionEvent evt) { if (GanttActionEvent.PRINT == evt.getActionType()) { FacesContext _context = FacesContext.getCurrentInstance(); ServletResponse _response = (ServletResponse) _context.getExternalContext().getResponse(); _response.setContentType("application/pdf"); ServletOutputStream _sos = _response.getOutputStream(); // Generate FO. GanttPrinter _printer = new GanttPrinter(m_gantt); // Set column visibility by column index. _printer.setColumnVisible(0, false); // Set start and end date. _printer.setStartTime(startDate); _printer.setEndTime(endDate); // Set top, bottom, left, and right margins in pixels. _printer.setMargin(25, 16, 66, 66); // Set height and width in pixels. _printer.setPageSize(440, 660); File _file = File.createTempFile("gantt", "fo"); OutputStream _out = new FileOutputStream(_file); _printer.print(_out); _out.close(); // generate PDF. FOProcessor _processor = new FOProcessor(); _processor.setData(new FileInputStream(_file),"UTF-8")); _processor.setOutputFormat(FOProcessor.FORMAT_PDF); _processor.setOutput(_sos); _processor.generate(); _context.responseComplete(); } }
ユーザーがコレクションからアイテム(表から行など)をドラッグし、ツリーなどの別のコレクション・コンポーネントにドロップできるドラッグ・アンド・ドロップ機能を追加できます。プロジェクト・ガント・チャート・コンポーネントおよびスケジュール・ガント・チャート・コンポーネントは、ADFの表またはツリー表コンポーネントのドラッグ・ソースおよびドロップ・ターゲットとして有効にできます。リソース使用率ガント・チャート・コンポーネントは、ドロップ・ターゲットとしてのみ有効にできます。
アプリケーションでは、af:collectionDragSource
動作タグまたはaf:collectionDropTarget
動作タグをガント・タグの子として追加して、ドラッグ・ソースまたはドロップ・ターゲットとしてガント・チャート・コンポーネントを登録する必要があります。たとえば、af:collectionDragSource
を使用して、プロジェクト・ガント・チャート・タスクが表領域から別の表にドラッグされたときに起動されるドロップ・リスナーを登録し、表領域からタスクの表にドラッグされたタスクのあるプロジェクト・ガント・チャートを表示できます。
表29-20に、プロジェクト・ガント・チャートにドラッグ・アンド・ドロップ機能を追加するサンプル・コードを示します。
例29-20 ドラッグ・アンド・ドロップ機能を追加するサンプル・コード
<dvt:projectGantt value="#{test.treeModel}" ............. <af:collectionDragSource actions="COPY MOVE" modelName="treeModel" /> </dvt:projectGantt>
例29-21に、ドロップ・イベントを処理するリスナー・メソッドのサンプル・コードを示します。
例29-21 コレクションのdropListenerのイベント・ハンドラ・コード
public DnDAction onTableDrop(DropEvent evt) { Transferable _transferable = evt.getTransferable(); // Get the drag source, which is a row key, to identify which row has been dragged. RowKeySetImpl _rowKey = (RowKeySetImpl)_transferable.getTransferData(DataFlavor.ROW_KEY_SET_FLAVOR).getData(); // Set the row key on the table model (source) to get the data. // m_tableModel is the model for the Table (the drag source). object _key = _rowKey.iterator().next(); m_tableModel.setRowKey(_key); // See on which resource this is dropped (specific for scheduling Gantt chart). String _resourceId = _transferable.getData(String.class); Resource _resource = findResourceById(_resourceId); // See on what time slot did this dropped. Date _date = _transferable.getData(Date.class); // Add code to update your model here. // Refresh the table and the Gantt chart. RequestContext.getCurrentInstance().addPartialTarget(_evt.getDragComponent()); RequestContext.getCurrentInstance().addPartialTarget(m_gantt); // Indicate the drop is successful. return DnDAction.COPY; }
コレクションのドラッグ・アンド・ドロップ機能の追加の詳細は、34.4項「コレクションのドラッグ・アンド・ドロップ機能の追加」を参照してください。