ヘッダーをスキップ
Oracle® Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発
12c (12.1.2)
E48096-02
  目次へ移動
目次

前
 
次
 

26 ガント・チャート・コンポーネントの使用方法

この章では、ADFデータ可視化コンポーネントのprojectGanttresourceUtilizationGanttおよびschedulingGanttを使用し、簡単なUI優先開発を使用してガント・チャートにデータを表示する方法を説明します。この章では、データ要件、タグ構造、およびコンポーネントの見え方や動作をカスタマイズするためのオプションを定義します。

アプリケーションでテクノロジ・スタックを使用する場合、データ・コントロールを使用してガント・チャートを作成することもできます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・バインドされたガント・チャートおよび時系列コンポーネントの作成」の章を参照してください。

この章では、次の項目について説明します。

26.1 ガント・チャート・コンポーネントについて

ガント・チャートは横棒グラフの一種で、プロジェクトの計画および進捗管理に使用します。リソースまたはタスクを、開始と終了が明確なタイム・フレームに示します。ガント・チャート・コンポーネントは、ガント・チャートを表に表示する領域と、ガント・チャートをグラフィカルに表示する領域の2つの領域で構成され、その間にサイズ変更スプリッタがあります。表とチャートの領域は、同じデータと選択モデルを共有し、2つの領域間でスクロール、行の展開および縮小がサポートされ、同期化されます。

実行時に、ガント・チャートでは表領域にデータの入力、行の展開および縮小、列の表示および非表示、行へのナビゲート、および列のソートおよび合計の表示などの対話機能がユーザーに提供されます。表領域で、ユーザーはタスクを新しい日付にドラッグし、複数のタスクを選択して依存性を作成し、タスクの日付を拡張または縮小できます。ガント・チャートのツールバーは、データの表示の変更またはフィルタ処理、およびタスクの作成、削除、切取り、コピーおよび貼付けなどのユーザー操作のサポートに使用します。

ガント・チャートの領域は、両方ともADF Facesのツリー表コンポーネントに基づいています。行の仮想化など、ADFツリー表の詳細は、第12章「表、ツリー、およびその他のコレクションベースのコンポーネントの使用」を参照してください。

ADF Ganttチャート・コンポーネントには、プロジェクト・ガント・チャート(projectGantt)、リソース使用率ガント・チャート(resourceUtlizationGantt)およびスケジュール・ガント・チャート(schedulingGantt)があります。

26.1.1 ガント・チャート・コンポーネントのユースケースおよび例

ガント・チャートには、次のタイプがあります。

  • プロジェクト・ガント・チャート: プロジェクト・ガント・チャートはプロジェクト管理に使用されます。このチャートでは、タスクを縦にリストし、横向きの予定表に各タスクの期間を棒で示します。図26-1に示すように各タスクを別の線で示します。

    図26-1 ソフトウェア・アプリケーション用プロジェクト・ガント・チャート

    ソフトウェア・アプリケーション用プロジェクト・ガント・チャート
  • リソース使用率ガント・チャート: リソース使用率ガント・チャートでは、リソースのメトリック、たとえばリソースが割当てを上回っているか下回っているかをグラフィカルに示します。リソースを縦に示し、横方向の時間軸に割当てとキャパシティなどのメトリックを示します。図26-2に、指定した期間の特定の開発者リソースに割り当てられ、利用されている時間を表示するリソース使用率ガント・チャートを示します。

    図26-2 ソフトウェア・アプリケーション用リソース使用率ガント・チャート

    アプリケーション用リソース使用率ガント・チャート

    リソース使用率ガント・チャートのメトリックが積上げ棒または横線として表示されるように構成することもできます。図26-3に示すリソース使用率ガント・チャートでは、2つのメトリックとして利用された時間を示す積上げ棒、割り当てられた時間を示す縦棒、およびチャートを通過するしきい値メトリックを示す横線が表示されています。

    図26-3 積上げ棒および段付きの線として表示されているリソース・メトリック

    積上げ棒および段付きの線としてのリソース・メトリック
  • スケジュール・ガント・チャート: スケジュール・ガント・チャートはリソースのスケジュールに使用されます。このチャートは手動のスケジュール表をベースにし、リソースを縦に表示し、対応するアクティビティを横方向の時間軸に表示します。リソースの例には、人、機械、部屋などがあります。スケジュール・ガント・チャートでは、図26-4に示すように、リソースに割り当てられている全タスクが1つの線で示されます。

    図26-4 ソフトウェア・アプリケーション用スケジュール・ガント・チャート

    ソフトウェア・アプリケーション用スケジュール・ガント・チャート

26.1.2 エンド・ユーザー機能およびプレゼンテーション機能

ガント・チャートをどのように使用し、どのようにカスタマイズできるかを理解するには、次の要素と機能について復習すると役に立ちます。

26.1.2.1 ガント・チャートの領域

ガント・チャートは、次の2つの領域で構成されます。

  • ガント・チャート・データ属性を表の列に表示する表領域。表領域には最低1つの列が必要ですが、必要な数の列に属性を定義できます。表領域には、データ・バインドされたガント・チャートの作成時に定義したすべての列がデフォルトで表示されます。ただし、これらの列の1つ以上を選択して非表示にすることもできます。

  • ガント・チャート・データの棒グラフを横方向の時間軸に沿って表示するチャート領域。時間軸にはズーム用の主設定と副設定があります。主設定はより大きな時間単位用で、副設定はより小さな時間単位用です。

たとえば、図26-4では、スケジュール・ガント・チャートの表領域には、タスク名およびリソースの列が含まれており、チャート領域では、月内の週を示す時間軸においてタスクがグラフ化されています。

図26-5 プロジェクト・ガント・チャート領域

プロジェクト・ガント・チャート領域

26.1.2.2 情報パネル

オプションの情報パネルには、選択したタスクに関するテキスト、または選択したリソースに関するメトリックを表示する情報領域と、ガント・チャートの下の領域にタスク・タイプを表示するオプションの凡例の両方が表示されます。情報パネルを有効にするには、ガント・チャートの凡例を構成する必要があります。図26-6に、図26-4のスケジュール・ガント・チャートの情報パネルを示します。このパネルには、チャート領域で選択したタスクに関する情報、およびガント・チャートの凡例が含まれています。

図26-6 スケジュール・ガント・チャートの情報パネル

スケジュール・ガント・チャートの情報パネル

26.1.2.3 ツールバー

ユーザーは、ガント・チャートのツールバーを使用して、ガント・チャートを操作できます。ツールバーはデフォルトでガント・チャートに表示されます。

ツールバーは、次の2つのセクションで構成されます。

  • メニュー・バー:ツールバーの左側の部分には、ガント・チャートに対するメニューのセットが含まれます。各ガント・チャート・タイプには、デフォルトのオプションのセットがあります。図26-7に、ガント・チャートにデフォルトで表示されるメニュー・バーを示します。メニュー・バーの可視性を変更すること、およびメニュー項目をカスタマイズすることができます。

    図26-7 ガント・チャートのサンプル・メニュー・バー

    ガント・チャート・メニュー・バー

    デフォルトでは、ガント・チャートの「表示」メニューの項目は、次の1つ以上の操作をサポートしています。

    • 表領域での列の可視性の構成。

    • 表領域での階層データの表示の展開および縮小。

    • チャート領域でのタスク間の依存性行の非表示と表示の切り替え。

    • ガント・チャートの凡例の非表示と表示の切り替え。

    • ガント・チャートでの特定日付の指定。図26-8に、「表示」メニューの「日付へ移動」ダイアログを示します。

      図26-8 「日付へ移動」ダイアログ

      「日付へ移動」ダイアログ
    • ガント・チャートのタイム・スケールの変更。図26-9に、「表示」メニューの「タイム・スケール」ダイアログを示します。

      図26-9 「タイム・スケール」ダイアログ

      「タイム・スケール」ダイアログ

    注意:

    メニュー・バーの「表示」メニューの項目では、それらの項目を機能させるためのアプリケーション・コードを記述する必要はありません。ただし、他のメニューで使用する項目にはアプリケーション・コードが必要です。


  • ツールバー・ボタン:ツールバーの右側の部分には、ガント・チャートを操作するためのアクション・ボタンのセットが表示されます。各ガント・チャート・タイプには、デフォルトのオプションのセットがあります。図26-10に、プロジェクト・ガント・チャートのサンプル・ツールバーを示します。

    図26-10 プロジェクト・ガント・チャートのサンプル・ツールバー

    プロジェクト・ガント・チャート・ツールバー

    注意:

    右から左への表示を使用するロケールでは、方向アイコンが逆の順番で表示されます。


    ツールバーを使用して、ガント・チャートでの時間表示を変更できます。時間軸にズーム・インおよびズーム・アウトして、異なる時間単位でチャート領域を表示できます。

    ズームして合せる特殊な機能を使用すると、グラフをスクロールする必要なく、チャート領域で表示可能な時間の量を選択することもできます。「表示」メニューのガント・チャートのタイム・スケールは、選択した日付に合わせて自動的に調整されます。図26-11に、プロジェクト・ガント・チャートで展開された「ズームしてあわせる」ツールバー・オプションを示します。

    図26-11 「ズームしてあわせる」ツールバー・オプション

    「ズームしてあわせる」ツールバー・オプション

26.1.2.4 スクロール、ズームおよびパン

ガント・チャートの設計により、表領域とチャート領域の横方向のスクロールを別々に行えます。これは、表領域で特定のタスクまたはリソース情報を保持しつつ、チャート領域でスクロールして複数期間の情報を得る場合に特に有用です。

スクロールバーのかわりとして、ユーザーが複数ページのガント・チャートを選択およびナビゲートできる水平ページ・コントロールを表示することもできます。図26-12に、水平ページ・コントロールが構成されたリソース使用率ガント・チャートを示します。

図26-12 リソース使用率ガント・チャートのページ・コントロール

リソース使用率ガント・チャートのページ・コントロール

ユーザーは、ツールバーのズーム・コントロールに加えて、[Ctrl]キーを押しながらマウスのスクロール・ホイールを使用することでも、ガント・チャートのタイム・スケールにズーム・インおよびズーム・アウトできます。複数のレベルを一度にズームする際、ユーザーが現在のレベルを把握できるように、ツールチップが表示されます。これは特にユーザーがクリック機能のないスクロール・ホイールを使用する場合に便利です。

プロジェクトおよびスケジュール・ガント・チャートでは、ユーザーはカーソルを使用してチャート領域を縦横にドラッグすることにより、チャート領域パンすることができます。移動カーソルは、ユーザーがタスク以外のチャート領域内をクリックすると表示されます。

またガント・チャートには、2つの領域間の垂直スペースで使用できるアイコンを使用して、表の表示を縮小および拡張するユーザー・オプションもあります。

26.1.2.5 依存関係の表示

タスク間の依存関係が指定されている場合、プロジェクトおよびスケジュール・ガント・チャートでは、チャート領域に依存関係線をオプションで表示できます。依存関係線を表示するオプションは、「表示」メニューの項目として使用できます。さらに、プロジェクト・ガント・チャートでは、依存関係のあるタスクの開始時または終了時にドロップダウン・メニューを使用して、先行タスクまたは後続タスクのメニュー・オプションとして依存関係を表示できます。図26-13に、依存関係を線、メニュー項目として表示するオプション、または依存関係を表示しないオプションを含む、プロジェクト・ガント・チャートの「表示」メニューを示します。

図26-13 プロジェクト・ガント・チャートの「依存性の表示」オプション

プロジェクト・ガント・チャートの「依存性の表示」オプション

図26-14に、後続タスクおよび先行タスクの依存関係タスク・メニュー項目を含むプロジェクト・ガント・チャートを示します。

図26-14 プロジェクト・ガント・チャートの依存関係タスクのメニュー項目

プロジェクト・ガント・チャートの依存関係タスクのメニュー項目

26.1.2.6 コンテキスト・メニュー

ガント・チャートの表領域またはチャート領域を右クリックすると、メニュー項目の標準セットを含むコンテキスト・メニューが表示されます。tablePopupMenuファセットまたはchartPopupMenuファセットを使用して独自のメニュー項目のセットを使用できます。詳細は、26.4.6項「ガント・チャートのコンテキスト・メニューのカスタマイズ」を参照してください。

図26-15に、スケジュール・ガント・チャートのタスクのプロパティに対して表示されるカスタム・コンテキスト・メニュー項目を示します。

図26-15 タスクのカスタム・コンテキスト・メニュー

タスクのカスタム・コンテキスト・メニュー

26.1.2.7 行の選択

rowSelection属性を使用して、ガント・チャートのチャート領域で、選択が行なし、単一行または複数行になるように構成できます。プロジェクト・ガント・チャートのタスク、あるいはスケジュールまたはリソース使用率ガント・チャートのリソースを選択できます。この設定により、選択したタスクまたはリソースに対してロジックを実行できます。たとえば、ユーザーがリソースを選択し、そのリソースに基づきカレンダを表示できるようにすることが必要な場合があります。

表領域で選択されている行が変更されると、コンポーネントにより選択イベントがトリガーされます。このイベントにより、どの行が選択または選択解除されたか報告されます。コンポーネントにより選択が宣言的に処理される際、選択された行でロジックを実行する必要がある場合は、それらの行にアクセスしてロジックを実行するコードを実装する必要があります。これは、マネージドBeanの選択リスナー・メソッドで実行できます。詳細は、26.5.1項「選択されたタスクまたはリソースでのアクションの実行」を参照してください。


注意:

複数の選択を実行できるようにコンポーネントを構成した場合、ユーザーが行を1つ選択し、[Shift]キーを押して別の行を選択すると、間にあるすべての行が選択されます。この選択は、選択が複数のデータ・フェッチ・ブロックにまたがる場合でも保持されます。同様に、[Ctrl]キーを使用して、隣接していない行を選択することもできます。

たとえば、一度に25行のみフェッチするようにガント・チャートの表領域が構成されている場合、ユーザーが100行選択すると、フレームワークにより選択が追跡されます。


26.1.2.8 タスクの編集

プロジェクトおよびスケジュール・ガント・チャートでは、ユーザーは、チャート領域で編集可能タスクのタスク・バーを移動またはサイズ変更できます。編集可能タスクにカーソルを合わせると、移動カーソルが表示され、カーソルの位置に関する情報がポップアップします。チャート内のタスクを再配置するには、関連する開始日および終了日を含むタスク・バーをクリックしてドラッグします。タスクの開始日または終了日が編集可能の場合、タスク・バーの先頭または末尾に両方向の矢印が表示されます。日付をクリックして、目的の場所までドラッグします。図26-16に、プロジェクト・ガント・チャート内の編集可能タスクの移動カーソルおよびサイズ変更カーソルを示します。

図26-16 編集可能タスク・バーの移動カーソルおよびサイズ変更カーソル

編集可能タスク・バーの移動カーソルおよびサイズ変更カーソル

26.1.2.9 サーバー側イベント

ユーザー操作にデータの変更が含まれる場合、ガント・チャートでは、イベント処理およびデータ・モデルの更新を実行することで変更が処理されます。ガント・チャートに対し検証が構成されている場合、検証により、送信されたデータが基本要件を満たしていること(たとえば、日付が有効で休日の期間に該当しないことなど)が確認されます。検証に失敗すると、データ・モデルの更新が省略され、エラー・メッセージが返されます。

ガント・チャートのサーバー側イベントが開始されると、変更に関する検証された情報を含むイベントが登録されたリスナーに送信されます。リスナーは基礎となるデータ・モデルを更新します。カスタマイズされたイベント・ハンドラは、ガント・チャート・コンポーネントのdataChangeListener属性でメソッド・バインディング式を指定することによって登録できます。

ガント・チャートによってサポートされるサーバー側イベントには、次のものが含まれます。

  • ガント・チャート表領域における表のセルのデータ更新

  • タスクの作成、更新、削除、移動、切取り、コピー、貼付け、インデント、アウトデント

  • タスク・バーを1つの行から別の行にドラッグすることによるリソースの再割当て

  • 別の日付へのタスク・バーのドラッグ

  • タスクの期間の延長

  • タスクのリンク付けまたはリンク解除

  • ガント・チャート表領域での単一の行または複数の行の選択

  • ユーザー・アクションを元に戻すまたはやり直し

  • タスク・バーのダブルクリック

ユーザーはツールバーからドロップダウン・リストを使用してガント・チャートのデータをフィルタ処理できます。カスタム・フィルタを作成できます。

26.1.2.10 印刷

ガント・チャートには、ApacheまたはXML Publisherと連動してPDFファイルを生成し、印刷する機能が用意されています。詳細は、26.5.4項「ガント・チャートの印刷」を参照してください。

26.1.2.11 コンテンツの配信

ガント・チャートにデータ・ソースからどのようにデータを配信するかを構成できます。データは、レンダリング直後、データが使用可能になり次第、またはコンポーネントのシェルがレンダリングされた後の遅延フェッチのいずれかで、ガント・チャートに配信できます。データ・ソースが使用可能の場合、ガント・チャートは、デフォルトで、データ・ソースからのコンテンツの配信をサポートします。contentDelivery属性は、デフォルトでwhenAvailableに設定されています。

ガント・チャートは仮想化されています。つまり、サーバーの一部のデータのみがクライアントに配信され、表示されます。日付に関連する値に基づいて、データ・ソースから特定数の行または列を一度にフェッチするようにガント・チャートを構成できます。フェッチ・サイズを構成するには、fetchSizeおよびhorizontalFetchSizeを使用します。

26.1.3 ガント・チャート・コンポーネントの追加機能

ガント・チャート・コンポーネントを実装する前に、その他のADF Faces機能を理解しておくと役に立ちます。また、いったんガント・チャート・コンポーネントをページ追加すると、検証やアクセシビリティなどの機能を追加する必要があることに気付く場合があります。ガント・チャート・コンポーネントで使用できるその他の機能へのリンクは、次のとおりです。

  • 部分ページ・レンダリング: 他のコンポーネントで実行されたアクションに基づく新しいデータをページ上に表示するために、ガント・チャートをリフレッシュできます。詳細は、第8章「部分ページ・コンテンツの再レンダリング」を参照してください。

  • パーソナライズ: ユーザーは実行時にガント・チャートの表示方法を変更できますが、アプリケーションがユーザーのカスタマイズを許可するように構成されていないかぎり、ユーザーがページを終了するとそれらの値は保持されません。詳細は、第35章「JSFページでのユーザー・カスタマイズの許可」を参照してください。

  • アクセシビリティ: ガント・チャート・コンポーネントにはデフォルトでアクセス可能です。アプリケーション・ページにスクリーン・リーダー・ユーザーがアクセスできるようにすることが可能です。詳細は、第33章「アクセス可能なADF Facesページの開発」を参照してください。

  • Excelにエクスポート: af:exportCollectionActionListenerを使用してプロジェクト・ガント・チャートの表領域をエクスポートできます。詳細は、12.12項「表、ツリーまたはツリー表からのデータのエクスポート」を参照してください。

  • コンテンツ配信: ガント・チャートの表領域を、contentDelivery属性を使用して、データ・ソースから特定の行数を一度にフェッチするように構成できます。詳細は、12.2.2項「コンテンツの配信」を参照してください。

  • 自動データ・バインディング: アプリケーションでテクノロジ・スタックを使用する場合、ADFビジネス・コンポーネントの構成方法に基づいて、自動的にバインドされたガント・チャートを作成できます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・バインドされたガント・チャートおよび時系列コンポーネントの作成」の章を参照してください。


    注意:

    最終的にページのUIコンポーネントでADFデータ・バインディングが使用されることがわかっていても、データ・コントロールの準備ができる前にページを開発する必要がある場合、手動でコンポーネントをバインドするのではなく、プレースホルダ・データ・コントロールを使用します。プレースホルダ・データ・コントロールを使用すると、開発済データ・コントロールを使用した場合と同じ宣言的な開発が行われます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「プレースホルダ・データ・コントロールを使用したページの設計」の章を参照してください。


    さらに、データ視覚化コンポーネントでは、データの配信方法、自動部分ページ・レンダリング(PPR)、イメージ形式、そしてデータの表示および編集方法など、同じ機能の大部分が共有されています。詳細は、22.2項「データ視覚化コンポーネントの共通機能」を参照してください。

26.2 ガント・チャート・コンポーネントの使用方法

ガント・チャートのデータ・モデルは、ツリー(階層)モデル、あるいは行セットまたはオブジェクトのフラット・リストを含むコレクション・モデルのいずれかです。ガント・チャートをデータ・コントロールにバインドする場合、データ・コントロールのコレクションをガント・チャートのノード定義へマップする方法を指定します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・バインドされたガント・チャートおよび時系列コンポーネントの作成」の章を参照してください。

26.2.1 プロジェクト・ガント・チャートのデータ

プロジェクト・ガント・チャートのデータ・モデルは、階層式のデータをサポートし、TreeModelを使用して基礎となるリストのデータにアクセスします。使用される特定のモデル・クラスはorg.apache.myfaces.trinidad.model.TreeModelです。

TreeModelによって返されるオブジェクトのコレクションには、最低限、次のプロパティが必要です。

  • taskId: タスクのID

  • startTime: タスクの開始時期

  • endTime: タスクの終了時期

(オプション)オブジェクトにoracle.adf.view.faces.bi.model.Taskインタフェースを実装して、ガント・チャートに正しいプロパティが提供されていることを確認できます。

ADFデータ・コントロールにデータをバインドする場合、プロジェクト・ガント・チャートでは、次のノード定義を使用できます。

  • タスク・ノード:タスクのコレクションを表します。タスク・ノード定義には、次のタイプのオプション・アクセッサがあります。

    • subTask(プロジェクト・ガント・チャートにのみ使用可能)

    • splitTask

  • 分割タスク・ノード:分割タスクのコレクションを表します。分割タスク・ノード定義にはアクセッサはありません。

  • 依存性ノード:タスクの依存性のコレクションを表します。依存性ノード定義には、アクセッサはありません。

  • 再帰タスク・ノード:再帰タスクのコレクションを表します。再帰タスク・ノード定義には、アクセッサはありません。

表26-1に、プロジェクト・ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。

表26-1 プロジェクト・ガントのデータ・オブジェクト・キー

データ・オブジェクト・キー 日付型と説明

actualEnd

Date。標準タスクおよびマイルストン・タスクの実際の終了時期。

actualStart

Date。標準タスクおよびマイルストン・タスクの実際の開始時期。

completedThrough

Date。標準タスクおよびサマリー・タスクの完了。

critical

Boolean。タスクがすべてのタスクに対してクリティカルかどうかを指定します。

依存性(ノード)

タスクの依存性のリスト。依存性のデータ・オブジェクト・キーには次のものが含まれる。

  • fromId: 依存性が開始するタスクのID。

  • toId: 依存性が終了するタスクのID。

  • type: 依存性のタイプ。有効な値は、start-startstart-finishfinish-finishfinish-startstart-beforestart-togetherfinish-afterおよびfinish-togetherです。

editsAllowed

Boolean。チャート領域でタスク・バーを編集可能にするかどうかを指定します。

endTime(必須)

Date。すべてのタスクの終了時期。

icon1

String。すべてのタスクのタスク・バーに関連付けられる1番目のアイコン。アイコンは、その他の属性に応じて変わる可能性があります。

icon2

String。すべてのタスクのタスク・バーに関連付けられる2番目のアイコン。

icon3

String。すべてのタスクのタスク・バーに関連付けられる3番目のアイコン。

iconPlacement

String。すべてのタスクのタスク・バーでのアイコンの配置。有効な値はleft (デフォルト)、rightinsidestartendinnerLeftinnerRightinnerCenterinnerStartinnerEndです。

isContainer

Boolean。ノード定義がコンテナかどうかを指定します。

label

String。すべてのタスクのタスク・バーに関連付けられるラベル。

labelPlacement

String。すべてのタスクのタスク・バーでのラベルの配置。有効な値はleft (デフォルト)、rightinsidestartendinnerLeftinnerRightinnerCenterinnerStartinnerEndです。

percentComplete

Integer。標準タスクおよびサマリー・タスクが完了した割合。

再帰タスク(ノード)

すべてのタスクに関する再帰タスクのリスト。

分割タスク(ノード)

すべてのタスクに関する連続的な時系列のないタスクのリスト。

startTime(必須)

Date。すべてのタスクの開始時期。

サブタスク(ノード)

すべてのタスクに関するサブタスクのオプションのリスト。

taskId(必須)

String。すべてのタスクの一意の識別子。

type

Sting。すべてのタスクに関するタスクのタイプ。


26.2.2 リソース使用率ガント・チャートのデータ

リソース使用率ガント・チャートのデータ・モデルは、階層式のデータをサポートし、TreeModelを使用して基礎となるリストのデータにアクセスします。使用される特定のモデル・クラスはorg.apache.myfaces.trinidad.model.TreeModelです。

TreeModelによって返されるオブジェクトのコレクションには、最低限、次のプロパティが必要です。

  • resourceId: タスクのID。

  • timeBuckets: このリソースの時間バケット・オブジェクトのコレクション。

(オプション)オブジェクトにoracle.adf.view.faces.bi.model.Resourceインタフェースを実装して、ガント・チャートに正しいプロパティが提供されていることを確認できます。

timeBucketsプロパティによって返されるオブジェクトのコレクションには、次のプロパティも必要です。

  • time: 時間バケットによって表される日付。

  • values: このリソースのメトリックのリスト。

ADFデータ・コントロールにデータをバインドする場合、リソース使用率ガント・チャートでは、次のノード定義を使用できます。

  • リソース・ノード:リソースのコレクションを表します。リソース・ノード定義には、現在のリソースのサブリソースのコレクションを返すsubResourcesオプション・アクセッサがあります。

  • 時間バケット・ノード:メトリックが定義された時間スロットのコレクションを表します。

  • 時間バケット詳細ノード: 時間バケット・ノードのオプションの子アクセッサで、時間バケットの他のメトリック値とともにレンダリングされる行のコレクションを表します。

表26-2に、リソース使用率ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。

表26-2 リソース使用率ガントのデータ・オブジェクト・キー

データ・オブジェクト・キー データ型と説明

label

String。タスク・バーに関連付けられるラベル。

labelAlign

String。タスク・バーでのラベルの配置。有効な値は、top (デフォルト)とinsideです。

resourceId(必須)

String。リソースの一意の識別子。

timeBuckets(必須)

List。リソースに関連付けられるタスクのリスト。

timeBucketDetail

List。リソースに関連する属性のリスト。

time(必須)

Date。時間バケットの開始時期。

values(必須)

Double。メトリックの値。


26.2.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アクセッサを含めることができます。

表26-3に、スケジュール・ガント・チャートのデータ・オブジェクト・キーの完全なリストを示します。

表26-3 スケジュール・ガント・チャートのデータ・オブジェクト・キー

データ・オブジェクト・キー データ型と説明

依存性(ノード)

タスクの依存性のリスト。依存性のデータ・オブジェクト・キーには次のものが含まれる。

  • fromId: 依存性が開始するタスクのID。

  • toId: 依存性が終了するタスクのID。

  • type: 依存性のタイプ。有効な値は、start-startstart-finishfinish-finishfinish-startstart-beforestart-togetherfinish-afterおよびfinish-togetherです。

endTime(必須)

Date。すべてのタスクの終了時期。

icon1

String。すべてのタスクのタスク・バーに関連付けられる1番目のアイコン。アイコンは、その他の属性に応じて変わる可能性があります。

icon2

String。すべてのタスクのタスク・バーに関連付けられる2番目のアイコン。

icon3

String。すべてのタスクのタスク・バーに関連付けられる3番目のアイコン。

iconPlacement

String。すべてのタスクのタスク・バーでのアイコンの配置。有効な値は、left (デフォルト)、rightinsideinside_leftinside_rightおよびinside_centerです。右から左への表示を使用するロケールでは、startおよびend値もサポートされます。

isContainer

Boolean。ノード定義がコンテナかどうかを指定します。

label

String。すべてのタスクのタスク・バーに関連付けられるラベル。

labelPlacement

String。すべてのタスクのタスク・バーでのラベルの配置。有効な値は、left (デフォルト)、rightinsideinside_leftinside_rightおよびinside_centerです。右から左への表示を使用するロケールでは、startおよびend値もサポートされます。

再帰タスク(ノード)

すべてのタスクに関する再帰タスクのリスト。

resourceId(必須)

String。リソースの一意の識別子。

分割タスク(ノード)

すべてのタスクに関する連続的な時系列のないタスクのコレクション。

startTime(必須)

Date。すべてのタスクの開始時期。

startupTime

Date。タスクの開始前の起動時期。

タスク(ノード)(必須)

リソースに関連付けられるタスクのリスト。

taskId(必須)

String。すべてのタスクに関するタスクの一意の識別子。

taskType

String。すべてのタスクに関するタスクのタイプ。

workingDaysOfTheWeek

Object。その週の営業日のリスト。

workingEndTime

Date。リソースの作業終了時間。

workingStartTime

Date。リソースの作業開始時間。


26.2.4 ガント・チャートのタスクおよびリソース

プロジェクト・ガント・チャートおよびスケジュール・ガント・チャートでは、チャート領域でのタスクのレンダリング方法を説明する書式設定プロパティのセットが指定された事前定義済タスクが使用されます。すべてのサポートされるタスクには一意の識別子が必要です。次のリストで、サポートされるタスクとガント・チャートでの外観を説明します。

  • 標準:基本的なタスク・タイプ。プレーンな横棒でタスクの開始時期、終了時期および期間を示します。

  • サマリー:サブタスクのグループの開始日と終了日。サマリー・タスクは移動や伸長できません。サブタスクの日付が変更された場合、アプリケーションで、サマリー・タスクの開始日と終了日をかわりに再計算する必要があります。サマリー・タスクはプロジェクト・ガント・チャートにのみ使用できます。

  • マイルストン:ガント・チャートの特定の日付。マイルストン・タスクに関連付けられる日付は1つのみです。マイルストン・タスクは伸長できませんが、移動できます。マイルストン・タスクはプロジェクト・ガント・チャートにのみ使用できます。

  • 再帰:ガント・チャートで繰り返されるタスクで、各インスタンスには独自の開始日および終了日が含まれます。個々の再帰タスクにはオプションでサブタイプを含めることができます。個々の再帰タスクのその他すべてのプロパティには、そのタスクが一部となっているタスクのプロパティが使用されます。ただし、個々の再帰タスクにサブタイプがある場合は、このサブタイプがタスク・タイプをオーバーライドします。

  • 分割:2つの横棒に分割されたタスクで、通常は線でつながっています。棒の間の時間は、移動時間または停止時間によるアイドル時間を表します。

  • スケジュール済:スケジュール・ガント・チャートの基本的なタスク・タイプ。このタスク・タイプはタスクの開始時期、終了時期および期間、および指定されている場合は起動時期を示します。

標準タスク、サマリー・タスクおよびマイルストン・タスクでは、タスクの外観およびアクティビティを変更する追加の属性がサポートされています。次にこれらのスタイル属性を示します。

  • percentCompletecompletedThrough: タスクの完了度を示す追加の棒グラフが描画されます。これは標準タスク・タイプおよびサマリー・タスク・タイプに適用されます。

  • critical: 棒グラフの色が赤に変更され、クリティカルとしてマークされます。これは標準タスク・タイプ、サマリー・タスク・タイプおよびマイルストン・タスク・タイプに適用されます。

  • actualStartおよびactualEnd: これらの属性が指定されると、1つの棒グラフではなく2つの棒グラフが描画されます。1つの棒グラフはベース開始日およびベース終了日を示し、もう1つの棒グラフは実際の開始日および終了日を示します。これは標準タスク・タイプおよびマイルストン・タスク・タイプに適用されます。

図26-17に、プロジェクト・ガント・チャートの一般的なタスク・タイプを表示する凡例を示します。

図26-17 プロジェクト・ガント・チャートのタスク・タイプ用凡例

ガント・チャートのタスク・タイプの凡例

リソース使用率ガント・チャートでは、縦方向にリソースがグラフィカルに表示され、横方向の時間軸に割当てや容量などのメトリックが表示されます。時間バケットでタスクに対して表示されるメトリックは、TaskbarFormatクラスでの指定に従いレンダリングされます。タスクのメトリックとして、次の3つのタイプのいずれかを使用できます。

  • BAR(デフォルト): 縦棒としてタスクをレンダリングします。

  • STACKED: 前のバーにバーを積み上げる形式でタスクをレンダリングします。

  • STEPPED_LINE: 横線としてタスクをレンダリングします。

26.2.5 ガント・チャートの構成

各ガント・チャート・タグ名が接頭辞dvt:で始まる3つのガント・チャート・コンポーネントは、タグがADF Data Visualization Tools (DVT)タグ・ライブラリの1つであることを示します。

  • projectGantt

  • resourceUtilizationGantt

  • schedulingGantt

すべてのガント・チャート・コンポーネントが、ガント・チャートの情報パネルにオプションの凡例を提供するための子タグganttLegendをサポートしています。一部のメニュー・バーおよびツールバーの機能は、ガントの凡例が指定されているかどうかによって使用できる場合とできない場合があります。

ガント・チャート表領域では、ADF Faces af:columnタグを使用して、ヘッダー・テキスト、アイコンおよびデータの位置合せ、列の幅、および列にバインドされたデータを指定できます。データを階層構造で表示するには、nodeStampファセットで階層の要素の1次識別子を指定します。たとえば、"Task Name"列をプロジェクト・ガント・チャートのnodeStampファセットとして使用することもできます。例26-1に、"Task Name"をnodeStampファセットとして使用し、Resource、Start DateおよびEnd Dateの列を持つプロジェクト・ガント・チャートのサンプル・コードを示します。

例26-1 プロジェクト・ガント・チャートの列のサンプル・コード

<dvt:projectGantt id="projectChart1" 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ファセットに加え、他のファセットもガント・チャート・コンポーネントによってカスタマイズに使用されます。表26-4に、ガント・チャート・コンポーネントによってサポートされているファセットを示します。

表26-4 ガント・チャート・コンポーネントによってサポートされているファセット



chartPopupMenu

チャート領域のポップアップ・メニューに表示される追加のコントロールの識別に使用するコンポーネントを指定します。af:popupコンポーネントである必要があります。

customPanel

タスク・プロパティ・ダイアログの「カスタム」タブに表示されるコントロールの識別に使用するコンポーネントを指定します。

major

主時間軸の識別に使用するコンポーネントを指定します。dvt:timeAxisコンポーネントである必要があります。

menuBar

ガント・メニュー・バーに表示される追加のコントロールの識別に使用するコンポーネントを指定します。af:menuコンポーネントである必要があります。

minor

副時間軸の識別に使用するコンポーネントを指定します。dvt:timeAxisコンポーネントである必要があります。

nodeStamp

ガント・チャートの各要素のスタンプ設定に使用するコンポーネントを指定します。アクティビティのないすべてのコンポーネント、およびEditableValueHolderまたはActionSourceインタフェースを実装する大半のコンポーネントなど、特定のタイプのコンポーネントのみがサポートされます。af:columnコンポーネントである必要があります。

tablePopupMenu

表領域のポップアップ・メニューに表示される追加のコントロールの識別に使用するコンポーネントを指定します。af:popupコンポーネントである必要があります。

toolbar

ガント・ツールバーに表示される追加のコントロールの識別に使用するコンポーネントを指定します。af:toolbarコンポーネントを指定する必要があります。


26.2.6 ページへのガント・チャートの追加方法

簡単なUI優先開発を使用してページを設計している場合、「コンポーネント」ウィンドウを使用して、プロジェクト、リソース使用率またはスケジュール・ガント・チャート・コンポーネントをJSFページにドラッグ・アンド・ドロップします。

ページにガント・チャートが追加された後、「プロパティ」ウィンドウを使用してデータ値を指定すること、およびガント・チャートの追加の表示属性を構成することができます。

「プロパティ」ウィンドウで、各属性フィールドのドロップダウン・メニューを使用して、プロパティの説明、およびEL式ビルダーまたはその他の専用ダイアログの表示などのオプションを表示できます。図26-18に、プロジェクト・ガント・チャート・コンポーネントのstartTime属性のドロップダウン・メニューを示します。

図26-18 プロジェクト・ガント・チャートのstartTime属性のドロップダウン・メニュー

プロジェクト・ガント・チャートの「Value」属性のドロップダウン・メニュー

注意:

アプリケーションでFusionテクノロジ・スタックが使用される場合、データ・コントロールを使用してガント・チャートを作成でき、バインドが自動的に行われます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・バインドされたガント・チャートおよび時系列コンポーネントの作成」の章を参照してください。


始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートを追加する手順:

  1. 「コンポーネント」ウィンドウの「ADFデータ視覚化」ページで、ガント・チャート・パネルから「プロジェクト」「リソース使用率」または「スケジュール」ガント・チャートをページにドラッグ・アンド・ドロップし、「ガント・チャートの作成」ダイアログを開きます。

    オプションで、そのダイアログの「データを今すぐバインド」を選択して、ガント・チャートで表示するデータを表すADFデータ・コントロールかADFマネージドBeanを入力するか、そこに移動しするかして、ガント・チャートをバインドします。このオプションを選択すると、ダイアログのデータ・バインディングのフィールドが編集のために使用可能になります。そうでなければ、「OK」をクリックして、ページにコンポーネントを追加します。ダイアログのヘルプを参照するには、[F1]を押すか「ヘルプ」をクリックします。

  2. 「プロパティ」ウィンドウで、ガント・チャートの属性を確認します。ヘルプ・ボタンを使用して、projectGanttresourceUtilizationGanttまたはschedulingGanttコンポーネントの完全なタグ・ドキュメントを表示します。

  3. 「共通」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • StartTime: ガント・チャートの期間のレンダリングに使用する開始時期。

    • EndTime: ガント・チャートの期間のレンダリングに使用する終了時期。

  4. 「ガント・データ」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • Value: EL式を使用してデータ・モデル(org.apache.myfaces.trinidad.model.TreeModelのタイプ)を指定します。

    • Var: ガント・チャート・データ・コレクションの各要素の参照に使用される変数を指定します。このコンポーネントのレンダリングが完了すると、この変数は削除されるか、その前の値に戻ります。

  5. 「外観」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • RowBandingInterval: 色のバンディングの目的で、連続する何行で行グループを形成するかを指定します。デフォルトでは、これは0に設定されており、すべての行が同じ背景色で表示されます。別の色を使用する場合は、これを1に設定します。

    • ShowMenuBar: ガント・チャートにメニュー・バーを表示するかどうかを指定します。この属性をfalseに設定すると、menuBarファセットで指定されたカスタム・メニュー・バー項目も非表示になります。

    • ShowToolbar: ガント・チャートにツールバーを表示するかどうかを指定します。この属性をfalseに設定するとtoolbarファセットで指定したカスタム・ツールバー・ボタンも非表示になります。

    • Summary: ガント・チャートの説明を入力します。この説明は、スクリーン・リーダーのユーザーがアクセスします。

  6. 「動作」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • InitiallyExpandAll: すべての行を最初に展開するかどうかを指定します。

    • FetchSize: 1データ・フェッチ・ブロック内の行数の指定に使用します。デフォルト値は25行です。ガント・チャートへのコンテンツの配信の詳細は、22.2.1項「コンテンツの配信」を参照してください。

    • FeaturesOff: 実行時に無効にするエンド・ユーザー機能の空白区切りリストを入力します。有効な値は、ガント・チャートのタイプによって異なります。

  7. 「その他」セクションを開きます。このセクションを使用して、次の属性を設定します。

    • RowSelection: ガント・チャートのチャート領域で、選択が行なし、単一行または複数行になるように構成するために使用します。

26.2.7 ページにガント・チャートを追加する場合の処理

「コンポーネント」ウィンドウを使用してガント・チャートを作成すると、JDeveloperによりJSFページにコードが挿入されます。例26-2に、プロジェクト・ガント・チャートに対してJSFページで挿入されるコードを示します。

例26-2 プロジェクト・ガント・チャートのサンプル・コード

<dvt:projectGantt startTime="2011-03-20" endTime="2011-06-19" var="row" id="pg1">
  <f:facet name="major">
    <dvt:timeAxis scale="weeks" id="ta5"/>
  </f:facet>
  <f:facet name="minor">
    <dvt:timeAxis scale="days" id="ta6"/>
  </f:facet>
  <f:facet name="nodeStamp">
    <af:column sortable="false" headerText="col1" id="c11">
      <af:outputText value="#{row.col1}" id="ot11"/>
    </af:column>
  </f:facet>
    <af:column sortable="false" headerText="col2" id="c12">
      <af:outputText value="#{row.col2}" id="ot12"/>
    </af:column>
    <af:column sortable="false" headerText="col3" id="c13">
      <af:outputText value="#{row.col3}" id="ot13"/>
    </af:column>
    <af:column sortable="false" headerText="col4" id="c14">
      <af:outputText value="#{row.col4}" id="ot14"/>
    </af:column>
    <af:column sortable="false" headerText="col5" id="c15">
      <af:outputText value="#{row.col5}" id="ot15"/>
    </af:column>
</dvt:projectGantt>

26.3 ガント・チャートのタスクおよびリソースのカスタマイズ

JSFページにガント・チャートを追加した後、新しいタスク・タイプを作成すること、積上げ棒または水平線としてタスクが表示されるように構成すること、およびタスクの属性の詳細を表示することができます。

26.3.1 新しいタスク・タイプの作成

タスク・タイプは、視覚的にはガント・チャートのチャート領域の棒として表されます。新しいタスク・タイプは、次の3つのいずれかの方法で作成できます。

  • JSFページまたは個別のCSSファイルでのタスク・タイプ・スタイル・プロパティの定義。

  • TaskbarFormatオブジェクトの定義およびtaskbarFormatManagerによるオブジェクトの登録。

  • 関連付けられたTaskbarFormatオブジェクトの取得およびsetメソッドを使用したそのプロパティの更新による、事前定義されたタスク・タイプのプロパティの変更。

TaskBarFormatオブジェクトでは次のプロパティが公開されます。

  • 塗りつぶしの色

  • 塗りつぶしのイメージ・パターン

  • 枠の色

  • マイルストン・タスクに使用されるイメージ

  • サマリー・タスクの開始と終了に使用されるイメージ

分割タスクまたは再帰タスクなど、複数の棒のあるタスクでは、プロパティは個々の棒に定義されます。

例26-3に、JSFページでカスタム・タスク・タイプのプロパティを定義するサンプル・コードを示します。

例26-3 カスタム・タスク・タイプのプロパティを定義するサンプル・コード

<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>

例26-4に、TaskbarFormatオブジェクトで塗りつぶしの色と枠の色を定義し、taskbarFormatManagerにオブジェクトを登録するサンプル・コードを示します。

例26-4 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);

26.3.2 リソース使用率ガント・チャートでの積上げ棒の構成

リソース使用率ガント・チャートでは、指定した期間にリソースに割り当てられ使用されている単位が時間バケットに表示されます。デフォルトでは、これらの単位は、チャート領域で縦棒としてレンダリングされます。2つ以上の棒が積み上げられるようにグラフィカル表示を構成することもできます。たとえば、図26-3のリソース使用率ガント・チャートでは、AVAILABLEリソース・メトリック棒の隣の縦棒にRUNおよびSETUPリソース・メトリックが積み上げられています。

リソース使用率ガント・チャートで積上げ棒を構成するには、setDisplayAs()メソッドを使用してTaskbarFormatオブジェクトを更新します。STACK表示を指定すると、前のメトリックにメトリックが積み上げられる形式でタスクがレンダリングされます。例26-5に、RUNメトリックが前のメトリックであるSETUPの上に積み上げられるように構成するマネージドBeanを示します。

例26-5 積上げ棒を構成するためのサンプル・コード

public class ResourceUtilizationGantt
{
    private TreeModel m_model;
    public String[] getMetrics()
    {
        return new String[]{"SETUP", "RUN", "AVAILABLE"};
    }
    
    public TaskbarFormatManager getTaskbarFormatManager()
    {
        TaskbarFormatManager _manager = new TaskbarFormatManager();
        TaskbarFormat _format = TaskbarFormat.getInstance("Run Hours",
            UIResourceUtilizationGantt.MIDNIGHT_BLUE_FORMAT);
        _format.setStacked(true);

        _manager.registerTaskbarFormat("SETUP", TaskbarFormat.getInstance("Setup
            Hours", UIResourceUtilizationGantt.BRICK_RED_FORMAT));
        _manager.registerTaskbarFormat("RUN", _format);
        _manager.registerTaskbarFormat("AVAILABLE",
            TaskbarFormat.getInstance("Available Hours",
            UIResourceUtilizationGantt.TEAL_FORMAT));
        return _manager;      
    }

26.3.3 リソース容量線の構成

リソース使用率ガント・チャートのチャート領域で、リソース・メトリックを縦棒として表示することに加え、チャート領域でメトリックが横線として表示されるように構成できます。これは、リソースのしきい値レベルなど、容量メトリックを表示する場合に便利です。

たとえば、図26-3に示されているリソース使用率ガント・チャートには、積上げRUNおよびSETUPメトリック、およびALLOCATEDメトリック棒に対して、しきい値メトリックを表示する容量線があります。

リソース使用率ガント・チャートでリソース容量線を構成するには、setDisplayAs()メソッドを使用してTaskbarFormatオブジェクトを更新します。STEPPED_LINE表示を指定すると、縦棒の上に水平線が表示され各メトリックを通過するという形式でタスクがレンダリングされます。例26-6に、リソース・メトリックTHRESHOLDが縦棒メトリックを通過するように構成するマネージドBeanを示します。

例26-6 リソース容量線を構成するためのサンプル・コード

public class ResourceUtilizationGanttSteppedLine 
{
    private TreeModel m_model;
    public String[] getMetrics()
    {
        return new String[]{"SETUP", "RUN", "AVAILABLE", "THRESHOLD"};
    }
    public TaskbarFormatManager getTaskbarFormatManager()
    {
        TaskbarFormatManager _manager = new TaskbarFormatManager();
        TaskbarFormat _format = TaskbarFormat.getInstance("Run Hours",
            UIResourceUtilizationGantt.MIDNIGHT_BLUE_FORMAT);
        _format.setStacked(true);
 
        _manager.registerTaskbarFormat("SETUP", TaskbarFormat.getInstance("Setup
            Hours", UIResourceUtilizationGantt.BRICK_RED_FORMAT));
        _manager.registerTaskbarFormat("RUN", _format);
        _manager.registerTaskbarFormat("AVAILABLE",
            TaskbarFormat.getInstance("Available Hours",
            UIResourceUtilizationGantt.TEAL_FORMAT));
 
        MetricFormat _threshold = new MetricFormat("threshold", "#FF0000", null,
            "#FF0000", MetricFormat.Display.STEPPED_LINE);
        _manager.registerTaskbarFormat("THRESHOLD", _threshold);
        return _manager;      
    }

26.3.4 リソース属性の詳細の表示

デフォルトでは、リソース使用率ガント・チャートの時間バケットには、固定サイズのメトリックが表示されます。たとえば、図26-19のガント・チャートでは、会社のリソースの表に対し、積上げRUNおよびSETUPメトリック、およびALLOCATEDメトリック棒が表示されています。

リソースに関連する属性により時間バケット・メトリックの詳細を取得することが必要な場合があります。たとえば、図26-19のリソース使用率ガント・チャートでは、各製品に使用された時間の実際の値によってBUDGETメトリックの詳細値が示されています。

図26-19 リソース使用率ガント・チャートのメトリック属性の詳細

リソース使用率ガント・チャートのメトリック属性の詳細

リソースの属性詳細の表示を構成するには、ページ定義ファイルに子timeBucketDetailsアクセッサを追加する必要があります。例26-7に、ページ定義ファイルにアクセッサを追加するためのサンプル・コードを示します。

例26-7 ページ定義ファイルのサンプル・コード

<nodeDefinition DefName="model.GanttRugResourceAppView" type="Resources">
  <AttrNames>
    <Item Value="ResourceId" type="resourceId"/>
  </AttrNames>
  <Accessors>
    <Item Value="GanttRugTimebucketAppView" type="timeBuckets"/>
  </Accessors>
</nodeDefinition>
<nodeDefinition type="TimeBuckets" DefName="model.GanttRugTimebucketAppView">
  <AttrNames>
    <Item type="time" Value="StartDate"/>
    <Item type="metric" Value="Budget"/>
  </AttrNames>
  <Accessors>
    <Item Value="GanttRugProductAppView" type="timeBucketDetails"/>
  </Accessors>
</nodeDefinition>
<nodeDefinition type="TimeBucketDetails">
  <AttrNames>
    <Item type="metric" Value="Actual"/>
    <Item type="format" Value="Product"/>
  </AttrNames>
</nodeDefinition>

リソース使用率ガント・チャートでリソースの属性詳細を構成するには、setDisplayAs()メソッドを使用してTaskbarFormatオブジェクトを更新します。例26-8に、BUDGETリソース棒に対し属性詳細メトリックを構成するマネージドBeanを示します。

例26-8 メトリック属性の詳細を構成するためのサンプル・コード

public class ResourceUtilizationGanttAttributeDetail 
{
    private TreeModel m_model;
    
    public String[] getMetrics()
    {
        return new String[] {};
    }
    
    public TaskbarFormatManager getTaskbarFormatManager()
    {
        TaskbarFormatManager _manager = new TaskbarFormatManager();
 
        _manager.registerTaskbarFormat("Wilson", 
            TaskbarFormat.getInstance("Wilson",
            UIResourceUtilizationGantt.MIDNIGHT_BLUE_FORMAT));
        _manager.registerTaskbarFormat("Umbro", TaskbarFormat.getInstance("Umbro",
            UIResourceUtilizationGantt.BRICK_RED_FORMAT));
        _manager.registerTaskbarFormat("Rbk", TaskbarFormat.getInstance("Rbk",
            UIResourceUtilizationGantt.LAVENDER_FORMAT));
        _manager.registerTaskbarFormat("Puma", TaskbarFormat.getInstance("Puma",
            UIResourceUtilizationGantt.TEAL_FORMAT));
        ...
        return _manager;      
    }
 
    public TreeModel getModel()
    {
        if (m_model == null)
            m_model =
             SampleModelFactory.getResourceUtilizationGanttAttributeDetailModel();
        
        return m_model;
    }
}

26.4 ガント・チャートの表示要素のカスタマイズ

ガント・チャートをカスタマイズして、休日を表示すること、ユーザー操作機能をオフにすること、時間軸を指定すること、ガント・チャートの凡例を追加およびカスタマイズすること、ツールバーおよびコンテキスト・メニューをカスタマイズすること、およびカスタム・データ・フィルタを構成することができます。

26.4.1 ガント・チャートでの休日の指定

ガント・チャートで休日を指定できます。休日は、デフォルトでは影付きのグレーで表示されますが、休日に使用するカスタム・カラーを選択できます。

26.4.1.1 曜日を休日として指定する方法

特定の曜日が毎週の休業日である場合、その曜日を休業日のカテゴリとして指定できます。

始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートが存在する必要があります。存在しない場合は、この章の指示に従い、ガント・チャートを作成します。詳細は、26.2.6項「ページへのガント・チャートの追加方法」を参照してください。

曜日を休日として指定する手順:

  1. 「構造」ウィンドウで、ガント・チャート・コンポーネントを右クリックし、「プロパティに移動」を選択します。

  2. 「プロパティ」ウィンドウの「外観」カテゴリで、NonWorkingDaysOfWeekフィールドに、各週の休日として指定する曜日の文字列を入力します。たとえば、土曜日と日曜日を休日として指定するには、"sat sun"と入力します。

    または、バッキングBeanにメソッドを作成し、プログラムで休日を指定することもできます。たとえば、バッキングBeanのgetNonWorkingDaysOfWeekという名前のメソッドにコードを入れる場合、nonWorkingDaysOfWeek属性の設定は、"#{myBackingBean.nonWorkingDays}"になります。例26-9に、バッキングBeanのサンプル・コードを示します。

    例26-9 休日を指定するためのバッキングBean

    public int[] getNonWorkingDaysOfWeek(){  if (locale == Locale.EN_US
        return new int[] {Calendar.SATURDAY, Calendar.SUNDAY};  else    .......}
    
  3. オプションで、NonWorkingDaysColorフィールドにカスタム・カラーを指定します。この属性に指定する値は、16進の色の文字列です。

26.4.1.2 特定の日付を休日として指定する方法

個々の曜日では不十分な場合、ガント・チャートで特定の日付を休日として入力できます。

始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートが存在する必要があります。存在しない場合は、この章の指示に従い、ガント・チャートを作成します。詳細は、26.2.6項「ページへのガント・チャートの追加方法」を参照してください。

特定の日付を休日として指定する手順:

  1. 「構造」ウィンドウで、ガント・チャート・コンポーネントを右クリックし、「プロパティに移動」を選択します。

  2. 「プロパティ」ウィンドウで、「外観」属性カテゴリを選択します。

  3. nonWorkingDaysフィールドに、休日として指定する日付の文字列を入力します。たとえば、"2008-07-04 2008-11-28 2008-12-25"です。

    または、バッキングBeanにメソッドを作成し、プログラムで休日を指定して、柔軟性を高めることもできます。たとえば、バッキングBeanのgetNonWorkingDaysという名前のメソッドにコードを入れる場合、nonWorkingDays属性の設定は、"#{myBackingBean.nonWorkingDays}"になります。

  4. オプションで、nonWorkingDaysColorフィールドにカスタム・カラーを指定します。この属性に指定する値は、16進の色の文字列です。

26.4.2 ガント・チャート機能に読取り専用の値を適用する方法

ガント・チャートとユーザーとの対話は、featuresOffプロパティで読取り専用の値を指定するように設定することでカスタマイズして無効にすることができます。表26-5に、ガント・チャート・タイプの有効な値と無効にされた機能を示します。

表26-5 読取り専用属性の有効な値

無効にされる機能

asListMenu

すべてのガント・チャートの「リストとして表示」メニュー項目。

asHierMenu

すべてのガント・チャートの「階層として表示」メニュー項目。

clipboard

すべてのガント・チャートのタスクの切取り、コピーおよび貼付け。

clipboardMenu

すべてのガント・チャートの「切取り」、「コピー」および「貼付け」メニュー項目。

clipboardToolbar

すべてのガント・チャートの「切取り」、「コピー」および「貼付け」ツールバー項目。

clipboardRightMenu

すべてのガント・チャートの「切取り」、「コピー」および「貼付け」右メニュー項目。

collapseAllBelowMenu

すべてのガント・チャートの「下をすべて縮小」メニュー項目。

collapseAllMenu

すべてのガント・チャートの「すべて縮小」メニュー項目。

columnsMenu

すべてのガント・チャートの「列」メニュー項目。

createResourceMenu

リソース使用率およびスケジュール・ガント・チャートの「リソースの作成」メニュー項目。

createResourceMT

リソース使用率およびスケジュール・ガント・チャートの「リソースの作成」メニュー項目およびツールバー項目。

createResourceToolbar

リソース使用率およびスケジュール・ガント・チャートの「リソースの作成」ツールバー項目。

createTaskMenu

プロジェクトおよびスケジュール・ガント・チャートの「タスクの作成」メニュー。

createTaskMT

プロジェクトおよびスケジュール・ガント・チャートの「タスクの作成」メニューおよびツールバー。

createTaskToolbar

プロジェクトおよびスケジュール・ガント・チャートの「タスクの作成」ツールバー。

deleteMenu

プロジェクトおよびスケジュール・ガント・チャートの「削除」メニュー項目。

deleteMenu

プロジェクトおよびスケジュール・ガント・チャートの「削除」メニュー、右メニューおよびツールバー項目。

deleteRightMenu

プロジェクトおよびスケジュール・ガント・チャートの「削除」右メニュー項目。

deleteToolbar

プロジェクトおよびスケジュール・ガント・チャートの「削除」ツールバー項目。

dependencyLines

プロジェクトおよびスケジュール・ガント・チャートの依存関係線の表示および非表示。これには、プロジェクト・ガント・チャートの「依存性」メニュー・オプションが含まれます。

edit

すべてのガント・チャートのデータ・モデルへの変更。

editMenu

すべてのガント・チャートの「編集」メニュー項目。

expandAllBelowMenu

すべてのガント・チャートの「下をすべて展開」メニュー項目。

expandAllMenu

すべてのガント・チャートの「すべて展開」メニュー項目。

expandMenu

すべてのガント・チャートの「展開」メニュー項目。

filter

すべてのガント・チャートのツールバーのデータ・フィルタ操作の非表示。

goToDateMenu

すべてのガント・チャートの「日付へ移動」メニュー項目。

indenting

プロジェクトおよびスケジュール・ガント・チャートのタスクのインデントおよびアウトデント。

indentingMenu

「インデント」および「アウトデント」メニュー項目: プロジェクト・ガント・チャートのタスク、およびスケジュール・ガント・チャートとリソース使用率ガント・チャートのリソース。

indentingMenus

すべてのガント・チャートの「インデント」および「アウトデント」メニュー、ツールバーおよび右メニュー項目。

indentingRightMenu

すべてのガント・チャートの「インデント」および「アウトデント」右メニュー項目。

indentingToolbar

すべてのガント・チャートの「インデント」および「アウトデント」ツールバー項目。

legend

すべてのガント・チャートの凡例およびタスク情報の非表示および表示。

legendMenu

すべてのガント・チャートの「凡例の非表示」および「凡例の表示」メニュー項目。

legendToolbar

すべてのガント・チャートの「凡例の非表示」および「凡例の表示」ツールバー項目。

linking

プロジェクトおよびスケジュール・ガント・チャートのタスクのリンクおよびリンク解除。

linkingMenu

プロジェクトおよびスケジュール・ガント・チャートの「リンク」および「リンク解除」メニュー項目。

linkingMenus

プロジェクトおよびスケジュール・ガント・チャートの「リンク」および「リンク解除」メニュー、右メニューおよびツールバー項目。

linkingRightMenu

プロジェクトおよびスケジュール・ガント・チャートの「リンク」および「リンク解除」右メニュー項目。

linkingToolbar

プロジェクトおよびスケジュール・ガント・チャートの「リンク」および「リンク解除」ツールバー項目。

listPaneMenu

すべてのガント・チャートの「リスト・ペイン」メニュー項目。

print

すべてのガント・チャートの印刷タスク。

printMenu

すべてのガント・チャートの「印刷」メニュー項目。

printToolbar

すべてのガント・チャートの「印刷」ツールバー項目。

properties

すべてのガント¥チャートのプロパティ・ダイアログを表示します。

propertiesMenu

すべてのガント・チャートの「プロパティ」メニュー項目。

propertiesRightMenu

すべてのガント・チャートの「プロパティ」右メニュー項目。

resourceMenu

リソース使用率およびスケジュール・ガント・チャートの「リソース」メニュー項目。

snapToMenu

スケジュール・ガント・チャートの「スナップ」メニュー項目。

snapToRightMenu

スケジュール・ガント・チャートの「スナップ」右メニュー項目。

split

プロジェクト・ガント・チャートのタスクの分割およびマージ。

splittingMenu

プロジェクト・ガント・チャートの「分割」および「マージ」メニュー項目。

splittingMenus

プロジェクト・ガント・チャートの「分割」および「マージ」メニュー、右メニューおよびツールバー項目。

splittingRightMenu

プロジェクト・ガント・チャートの「分割」および「マージ」右メニュー項目。

splittingToolbar

プロジェクト・ガント・チャートの「分割」および「マージ」ツールバー項目。

taskMenu

プロジェクトおよびスケジュール・ガントの「タスク」メニュー。

timeAxisMenu

すべてのガント・チャートの「時間軸」メニュー項目。

timeBucketMenu

リソース使用率ガント・チャートの「時間バケット」メニュー項目。

undo

すべてのガント・チャートの元に戻すおよびやり直しタスク。

undoMenu

すべてのガント・チャートの「元に戻す」および「やり直し」メニュー項目。

updateResourceMenu

スケジュール・ガント・チャートの「リソースの更新」メニュー項目。

updateTaskMenu

プロジェクトおよびスケジュール・ガント・チャートの「タスクの更新」メニュー項目。

updateTaskMT

プロジェクトおよびスケジュール・ガントの「タスク編集の更新」項目、「タスクの更新」ツールバー項目および右メニュー項目。

updateTaskRightMenu

プロジェクトおよびスケジュール・ガント・チャートの「タスクの更新」右メニュー項目。

updateTaskToolbar

プロジェクトおよびスケジュール・ガント・チャートの「タスクの更新」ツールバー項目。

undoToolbar

すべてのガント・チャートの「元に戻す」および「やり直し」ツールバー項目。

view

すべてのガント・チャートでのリストとして表示、階層として表示、列、展開および縮小タスク。

viewMenu

すべてのガント・チャートの「表示」メニュー項目。

zoom

すべてのガント・チャートのズーム・レベルへの変更。

zoomToolbar

すべてのガント・チャートの「ズーム」メニュー項目。

zoomToToolbar

すべてのガント・チャートの「ズームしてあわせる」メニュー・ツールバー項目。


始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートが存在する必要があります。存在しない場合は、この章の指示に従い、ガント・チャートを作成します。詳細は、26.2.6項「ページへのガント・チャートの追加方法」を参照してください。

ガント・チャート機能に読取り専用の値を設定する手順:

  1. 構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。

  2. 「プロパティ」ウィンドウの「動作」属性カテゴリで、featuresOff属性に1つ以上の文字列値を入力して、無効にするガント・チャート機能を指定します。

    たとえば、データ・モデル編集、印刷またはガント・チャートのズーム・レベル変更のためのユーザーとの対話を無効にするには、featuresOff属性をedit print zoomのように設定します。

    または、バッキングBeanにメソッドを作成し、プログラムで機能を無効にすることもできます。たとえば、バッキングBeanのwhatToTurnOffという名前のメソッドにコードを入れる場合、featuresOff属性の設定は、"#{BackingBean.whatToTurnOff}"になります。

26.4.3 ガント・チャートの時間軸のカスタマイズ方法

各ガント・チャートは、主時間軸と副時間軸を使用して作成されます。各時間軸には、時間のレベルを主または副で示すファセットがあります。すべてのガント・チャートのデフォルトの時間軸設定は次のとおりです。

  • 主時間軸: 週

  • 副時間軸: 日

時間軸の設定をカスタマイズできます。ただし、主軸は副軸より高い時間レベルに設定する必要があります。次に、dvt:timeAxisコンポーネントのscaleの設定値を高いものから順にリストします。

  • twoyears

  • year

  • halfyears

  • quarters

  • twomonths

  • months

  • twoweeks

  • weeks

  • days

  • sixhours

  • threehours

  • hours

  • halfhours

  • quarterhours

例26-26に、monthsを主時間軸、weeksを副時間軸として使用するように、ガント・チャートの時間軸を設定するサンプル・コードを示します。

例26-10 monthsとweeksに設定したガント・チャートの時間軸

<f:facet name="major">
  <dvt:timeAxis scale="months"/>
</f:facet>
<f:facet name="minor">
  <dvt:timeAxis scale="weeks"/>
</f:facet>

主軸および副軸に指定した時間単位は、ガント・チャートの初期表示にのみ適用されます。実行時に、ユーザーは時間軸をズーム・インまたはズーム・アウトして別のレベルの時間単位で表示できます。

ガント・チャートのカスタム時間軸を作成し、その軸をdvt:timeAxisscale属性で指定できます。カスタム時間軸は、実行時に「タイム・スケール」ダイアログに追加されます。

始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートが存在する必要があります。存在しない場合は、この章の指示に従い、ガント・チャートを作成します。詳細は、26.2.6項「ページへのガント・チャートの追加方法」を参照してください。

カスタム時間軸を作成し使用する手順:

  1. CustomTimescale.javaインタフェースを実装して、時間軸を作成するためにgetNextDate(Date currentDate)メソッドをループでコールします。例26-11に、インタフェースのサンプル・コードを示します。

    例26-11 カスタム日付を作成するインタフェース

    public interface CustomTimescale
    {
        public String getScaleName();
        public Date getPreviousDate(Date ganttStartDate);
        public Date getNextDate(Date currentDate);
        public String getLabel(Date date);
    }
    
  2. 構造ウィンドウでガント・チャートのノードを右クリックし、「プロパティに移動」を選択します。

  3. 「プロパティ」ウィンドウの「その他」属性カテゴリで、「CustomTimeScales」属性に、カスタム時間軸にインタフェースの実装を登録します。

    customTimeScales属性の値は、java.util.Mapオブジェクトです。指定したマップ・オブジェクトには、キー/値のペアが含まれます。キーはタイム・スケール名(fiveyears)で、値はCustomTimeScale.javaインタフェースの実装です。次に例を示します。

    customTimesScales="#{project.customTimescales}"
    
  4. また「プロパティ」ウィンドウで、主時間軸および副時間軸のScale属性を設定し、カスタム時間軸にズームするためのZoomOrder属性を指定します。例26-12に、threeyears副時間軸とfiveyears主時間軸を設定するためのサンプル・コードを示します。

    例26-12 カスタム時間軸

    <f:facet name="major">
      <dvt:timeAxis scale="fiveyears" id="ta1" zoomOrder="fiveyears threeyears years halfyears quarters months weeks days hours"/>
    </f:facet>
    <f:facet name="minor">
      <dvt:timeAxis scale="threeyears" id="ta2"/>
    </f:facet>
    

26.4.4 ガント・チャートの凡例の作成およびカスタマイズ

オプションのガント・チャートの凡例サブコンポーネントには、選択されたタスクまたは選択された時間バケットに関するメトリックに関する詳細情報が表示される領域、およびガント・チャートの各タスク・タイプを表すために使用される記号および色コード・バーが含まれています。実行時に、ツールバー・ボタンを使用して情報パネルを表示または非表示にできます。

凡例エリアを用意するには、ガント・チャート・タグの子としてganttLegendタグを追加する必要があります。凡例エリアのコンテンツは、taskbarFormatManagerで登録された各タスク・タイプのプロパティに基づいて自動的に生成されます。

ガント・チャートの凡例タグでkeys属性およびlabel属性を使用してタスクまたは時間バケットが選択された場合に表示される情報をカスタマイズできます。keys属性では、表示する値の取得に使用されるデータ・オブジェクト・キーを指定し、labels属性には、キーで取得した値に対応するラベルが含まれる必要があります。これらの属性が指定されていないと、凡例で情報パネルの領域全体が使用されます。

ガント・チャートの凡例タグでiconKeys属性およびiconLabels属性を使用して、凡例にアイコンを追加することもできます。アイコンのサイズが大きすぎる場合は、自動的に縦横12ピクセルにサイズ変更されます。

例26-13に、プロジェクト・ガント・チャートの凡例に保留中タスクに関する情報を表示するサンプル・コードを示します。

例26-13 ガント・チャートの凡例の追加

<dvt:projectGantt var="task">
   <dvt:ganttLegend id="gl" keys="TaskName StartTime EndTime" labels="Name Start Finish" icons="images/wait.png" iconLabels="OnHold"/>
</dvt:projectGantt>

26.4.5 ガント・チャートのツールバーのカスタマイズ

ガント・チャート・ツールバー・サブコンポーネントを使用すると、ガント・チャートの操作を実行できます。ツールバーの左側の部分には、各ガント・チャート・タイプに対するデフォルトのメニュー・オプション・セットを含むメニュー・バーがあります。ツールバーの右側の部分には、各ガント・チャート・タイプを操作するためのデフォルトのアクション・ボタンのセットが表示されます。

ガント・チャートのmenuファセットおよびtoolbarファセットを使用することによって、独自のメニュー項目およびツールバー・ボタンを使用できます。ガント・チャートでは、新しいメニュー項目と標準の項目がマージされます。例26-14に、新しいメニュー項目を指定するサンプル・コードを示します。

例26-14 カスタム・メニュー項目のサンプル・コード

<dvt:projectGantt var="task">
<f:facet name=”menuBar”>
  <af:menu text=”My Menu”>
    <af:commandMenuItem text="Add..." />
    <af:commandMenuItem text="Create.." />
  </af:menu>
</f:facet>
</dvt:projectGantt>

例26-15に、新しいツールバー・ボタンを指定するサンプル・コードを示します。

例26-15 カスタム・ツールバー・ボタンのサンプル・コード

<dvt:schedulingGantt var="task">
<f:facet name="toolbar">
  <af:toolbar>
    <af:button text="Custom" disabled="true"/>
  </af:toolbar>
</dvt:schedulingGantt>

メニュー・バーおよびツールバー・ボタンで開始されるアクションは、登録されたリスナー、DataChangeListenerを使用してガント・チャート・コンポーネント上で処理されます。たとえば、ユーザーがツールバーで削除ボタンを押すと、削除に選択されたタスクのIDを持つDataChangeEventがサーバー上で開始されます。登録されたリスナーがタスクの実際の削除を行い、ガント・チャート・データ・モデルは更新された情報を使用して更新されます。

ガント・チャート・タグでdataChangeListener属性を使用してメソッド・バインディングを指定することによってDataChangeListenerを登録できます。たとえば、バッキングBeanのhandleDataChangeという名前のメソッドにコードを入れる場合、dataChangeListener属性の設定は、"#{myBackingBean.handleDataChange}"になります。

例26-16に、バッキングBeanのサンプル・コードを示します。

例26-16 データ変更を処理するためのバッキングBean

public void handleDataChanged(DataChangeEvent evt)
{
if (DataChangeEvent.DELETE == evt.getActionType())
            …………
}

注意:

アプリケーションでFusionテクノロジ・スタックが使用される場合、データ・コントロールを使用してガント・チャートを作成できます。デフォルトでは、dataChangeListenerには自動的にイベントが提供されます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ変更イベント処理に関する必知事項を参照してください。


26.4.6 ガント・チャートのポップアップ・メニューのカスタマイズ

ユーザーがガント・チャートの表領域またはチャート領域を右クリックすると、ガント・チャートを操作するポップアップ・メニューが表示されます。各領域に標準のオプションのセットが提供されます。

ガント・チャートのtablePopupMenuファセットおよびchartPopupMenuファセットを使用することによって、独自のメニュー項目を使用できます。ガント・チャートでは、新しいメニュー項目と標準の項目がマージされます。例26-17に、表領域のポップアップ・メニューにカスタム・メニュー項目を指定するサンプル・コードを示します。

例26-17 カスタム・ポップアップ・メニュー項目のサンプル・コード

<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>

実行時にポップアップ・メニューを動的に変更することもできます。例26-18に、プロジェクト・ガント・チャートのチャート領域で選択したタスクに基づいてタスク・バーでカスタム・コンテキスト・メニューを更新するサンプル・コードを示します。

例26-18 動的ポップアップ・メニュー項目のサンプル・コード

<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で指定されます。例26-19に、バッキングBeanのサンプル・コードを示します。

例26-19 タスク選択を処理するためのバッキング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コンポーネントの使用方法の詳細は、第15章「ポップアップ・ダイアログ、メニューおよびウィンドウの使用方法」を参照してください。

26.4.7 カスタム・データ・フィルタの指定方法

ツールバーからデータ・フィルタ・ドロップダウン・リストを使用してガント・チャートのデータ表示を変更できます。ガント・チャートではFilterManagerを使用して、すべての事前定義済およびユーザー指定のデータ・フィルタを管理できます。フィルタ・オブジェクトには次の情報が含まれます。

  • フィルタの一意のID

  • ドロップダウン・リストにフィルタを表示するためのラベル

  • フィルタが選択されたときに起動するオプションのJavaScriptメソッド

フィルタ・オブジェクトを作成し、FilterManageraddFilterメソッドを使用してオブジェクトを登録して独自のフィルタを定義できます。例26-20に、FilterManagerを使用してResourceフィルタ・オブジェクトを登録するサンプル・コードを示します。

例26-20 FilterManagerを使用して登録されたカスタム・フィルタ・オブジェクト

FilterManager _manager = m_gantt.getFilterManager();
 
// ID for filter display label   javascript callback (optional)
_manager.addFilter((new Filter(RESOURCE_FILTER, "Resource...", "showResourceDialog")));

ユーザーがフィルタを選択すると、フィルタ・ロジックを実行する、登録されたFilterListenerFilterEventが送信されます。リスナーの登録には、ガント・チャート・コンポーネントのfilterListener属性が使用されます。アプリケーションによって実装されると、データ・モデルが更新され、ガント・チャート・コンポーネントにフィルタ処理された結果が表示されます。例26-21に、FilterListenerのサンプル・コードを示します。

例26-21 カスタム・フィルタのFilterListener

public void handleFilter(FilterEvent event)
    {
        String _type = event.getType();
        if (FilterEvent.ALL_TASKS.equals(_type))
        {
            // update the gantt model as appropriate
        }
    }

始める前に:

ガント・チャートの属性やガント・チャートの子コンポーネントが機能にどのような影響を与えるかについて理解しておくと役立ちます。詳細は、26.2.5項「ガント・チャートの構成」を参照してください。

他のADF Faces機能を使用して追加できる機能について理解することが役立つ場合もあります。詳細は、26.1.3項「ガント・チャート・コンポーネントの追加機能」を参照してください。

ページにガント・チャートが存在する必要があります。存在しない場合は、この章の指示に従い、ガント・チャートを作成します。詳細は、26.2.6項「ページへのガント・チャートの追加方法」を参照してください。

カスタム・データ・フィルタを指定する手順:

  1. 「構造」ウィンドウで、ガント・チャート・コンポーネントを右クリックし、「プロパティに移動」を選択します。

  2. 「プロパティ」ウィンドウの「動作」カテゴリのFilterListenerフィールドに、定義したFilterListenerを参照するメソッドを入力します。"#{project.handleFilter}"などです。

26.5 ガント・チャートへのインタラクティブ機能の追加

スクロールバー、同期スクロールのかわりとしてページ・コントロールを追加する、タスク・バーにダブルクリック・イベントを追加する、ガント・チャートを印刷するなど、ガント・チャートにインタラクティブ機能を追加できます。

26.5.1 選択したタスクまたはリソースでのアクションの実行

ガント・チャートでは、ユーザーは、タスクまたはリソースを表すガント・チャートの表領域で1つ以上の行を選択し、それらの行に対しアクションを実行できます。ガント・チャートの選択状態が変更されると、選択イベントがトリガーされます。selectionEventイベントは、選択解除された行と選択された行をレポートします。

ガント・チャートで選択イベントをリスニングするために、selectionListener属性を使用することで、またはaddselectionListener()メソッドを使用してガント・チャートにリスナーを追加することで、ガント・チャートにリスナーを登録できます。これにより、リスナーは選択された行にアクセスし、それらの行に対してアクションを実行できます。

現在の選択内容(選択された1つ以上の行)はRowKeySetオブジェクトであり、このオブジェクトは、ガント・チャートに対しgetSelectedRowKeys()メソッドをコールして取得します。プログラムを使用して選択内容を変更するには、次のいずれかを実行します。

  • RowKeySetオブジェクトでrowKeyオブジェクトを追加するか、rowKeyオブジェクトを削除します。

  • ガント・チャートに対しsetRowIndex()またはsetRowKey()メソッドをコールして、特定の行を現在行にします。その後、RowKeySetオブジェクトに対してadd()またはremove()メソッドをコールして、その行を選択内容に追加するか、選択内容から削除できます。

例26-22に表の一部を示します(この部分では、ユーザーが複数の行を選択し、「削除」ボタンをクリックしてそれらの行を削除できます)。アクション・リスナーは、mybeanマネージドBeanのperformDeleteメソッドにバインドされます。

例26-22 行の選択

<af:table binding="#{mybean.table}" rowselection="multiple" ...>
  ...
</af:table>
<af:button text="Delete" actionListener="#{mybean.performDelete}"/>

例26-23に、選択されたすべての行を反復し、それぞれにmarkForDeletionメソッドをコールするアクション・メソッドperformDeleteを示します。

例26-23 rowKeyオブジェクトの使用

public void performDelete(ActionEvent action)
{
  UIXTable table = getTable();
  Iterator selection = table.getSelectedRowKeys().iterator();
  Object oldKey = table.getRowKey();
  try
  {
    while(selection.hasNext())
    {
      Object rowKey = selection.next();
      table.setRowKey(rowKey);
      MyRowImpl row = (MyRowImpl) table.getRowData();
      //custom method exposed on an implementation of Row interface.
      row.markForDeletion();
    }
  }
  finally
  {
    // restore the old key:
    table.setRowKey(oldKey);
  }
}
 

26.5.2 ガント・チャートでのページ・コントロールの使用方法

ガント・チャートの表領域では、デスクトップ・アプリケーションとタッチ装置のモバイル・ブラウザの両方に対して、横のスクロール機能のかわりにページ・コントロールを使用できます。このコントロールは、データ・フェッチ・サイズを超える行が存在し、かつコンポーネントがそれを含むレイアウト・コンポーネントによって拡大されない場合にのみ使用できます。ページ・コントロールは、図26-20に示すように、表領域のフッターとして表示されます。

図26-20 ガント・チャートのページ・コントロール

ガント・チャートのページ・コントロール

ADF Faces Webアプリケーションを開発する場合、ガント・チャートの表領域では、フェッチ対象のデータのサイズを超える列を表示するために、横のスクロールバーがデフォルトで使用されます。schedulingGanttprojectGanttまたはresourceUtilizationGanttコンポーネントの表領域に、かわりにページ・コントロールを構成するには、scrollPolicy属性をpageに設定します。次に例を示します。

scrollPolicy="page"

ただし、標準ADF Faces Webアプリケーションはモバイル・ブラウザで動作しますが、ユーザーの操作が異なり、スクリーン・サイズが制限されるため、アプリケーションをモバイル・ブラウザで実行する必要がある場合は、タッチ装置に固有のバージョンのページを作成する必要があります。詳細は、付録D「ADF Facesを使用したタッチ装置のWebアプリケーションの作成」を参照してください。

デフォルトでは、モバイル・デバイスにレンダリングする場合、ガント・チャートの表領域には、ユーザーが特定の行のページにジャンプできるページ・コントロールが表示されます。モバイル・デバイスに表示するすべてのガント・チャートには、次の処理が必要です。

  • ガント・チャート・コンポーネントをフロー・コンテナ(つまり、子を拡大しないコンポーネント)の中に配置します。フロー・コンテナ・コンポーネントの詳細は、第9.2.1項「ジオメトリ管理およびコンポーネントの拡大」を参照してください。

  • scrollPolicy属性をauto(ページがデスクトップ・デバイスでも実行される場合)、またはpage(ページがモバイル・デバイスのみで実行される場合)に設定します。

ガント・チャートがフロー・コンテナの中にない場合、または属性が正しく設定されていない場合は、ページではなくスクロールバーが表示されます。

26.5.3 ガント・チャート間の同期スクロールの構成

2つのガント・チャートのチャート側間で横方向の同期スクロールを構成できます。たとえば、図26-21に示されているように、プロジェクト・ガント・チャートとリソース使用率ガント・チャートのスクロールバーを同期して、同じプロジェクトのタスクとリソースが表示されるようにすることが必要な場合があります。

図26-21 ガント・チャート間で同期されたスクロール

ガント・チャート間で同期されたスクロール

ガント・チャート間で同期されたスクロールを構成するには、af:clientListenerコンポーネントを使用して、スクロール対象のガント・チャートのチャート側でchartHorizontalScrollイベントをリスニングし、他のガント・チャートでスクロール位置を設定します。

この例では、インラインJavaScriptを使用して、af:resourceタグ内で同期スクロールのためのメソッドを定義しています。例26-24に、同期スクロール・メソッドのコードを示します。詳細は、4.2項「JavaScriptのページへの追加」を参照してください。

例26-24 同期スクロール・メソッドのサンプル・コード

<af:resource type="javascript">
  var gantt1ScrollStart = null;
  var gantt2ScrollStart = null;
  //called when the top gantt component is scrolled
  function handleTopScroll(event)
    {
      var eventScrollStart = event.getScrollStart();
      if (gantt2ScrollStart == null || gantt2ScrollStart == eventScrollStart)
        {
          // clear synced gantt scroll start
          gantt2ScrollStart = null;
          // find the corresponding gantt component
          var gantt = AdfPage.PAGE.findComponent("demo:gantt2");
          if (gantt1ScrollStart != event.getScrollStart())
            {
              // set the scrollStart position of the synced gantt to match the
                 event's value
              var scrollStart = gantt.getChartScrollStart();
              if (scrollStart != eventScrollStart)
              {
                //save the scrollStart value to stop feedback
                gantt1ScrollStart = eventScrollStart;
                gantt.setChartScrollStart(eventScrollStart);
              }
            }
          }
          event.cancel();
        }
        
        // called when the bottom gantt component is scrolled
        function handleBottomScroll(event)
        {
          var eventScrollStart = event.getScrollStart();
          if (gantt1ScrollStart == null || gantt1ScrollStart == eventScrollStart)
          {
            // clear synced gantt scroll start
            gantt1ScrollStart = null;
            // find the corresponding gantt component
            var gantt = AdfPage.PAGE.findComponent("demo:gantt1");
            if (gantt2ScrollStart != event.getScrollStart())
            {
              // set the scrollStart position of the synced gantt to match the
                 event's value
              var scrollStart = gantt.getChartScrollStart();
              if (scrollStart != eventScrollStart)
              {
                //save the scrollStart value to stop feedback
                gantt2ScrollStart = eventScrollStart;
                gantt.setChartScrollStart(eventScrollStart);
              }
            }
          }
          event.cancel();
        } 
      </af:resource

例26-25に示されている両方のガント・チャートのコードでは、ガント・チャートのchartHorizontalScrollタイプのscrollEventをリスニングするclientListenerを指定し、例26-24af:resourceコンポーネントで定義されているhandleTopScrollメソッドおよびhandleBottomScrollメソッドを呼び出しています。

例26-25 ガント・チャートで同期スクロールを使用するためのJSFページのサンプル・コード

<dvt:projectGantt id="gantt1" var="task" startTime="2008-04-22"
                  endTime="2008-09-31" inlineStyle="height:400px;"
                  value="#{projectGantt.model}"
                        tooltipKeys="#{projectGantt.tooltipKeys}"
                        tooltipKeyLabels="#{projectGantt.tooltipLabels}"
                        summary="Project Gantt">
  <f:facet name="major">
    <dvt:timeAxis scale="weeks" id="ta1"/>
  </f:facet>
  <f:facet name="minor">
    <dvt:timeAxis scale="days" id="ta2"/>
  </f:facet>
  <f:facet name="nodeStamp">
    <af:column headerText="Task Name" id="c1">
      <af:outputText value="#{task.taskName}" id="ot1"/>
    </af:column>
  </f:facet>
    <af:column headerText="Resource" id="c2">
      <af:outputText value="#{task.resourceName}" id="ot2"/>
    </af:column>
    <af:column headerText="Start Date" id="c3">
      <af:outputText value="#{task.startTime}" id="ot3"/>
    </af:column>
    <af:column headerText="End Date" id="c4">
      <af:outputText value="#{task.endTime}" id="ot4"/>
    </af:column>
  <dvt:ganttLegend keys="#{projectGantt.legendKeys}"
                         labels="#{projectGantt.legendLabels}"
                         id="gl1"/>
  <af:clientListener type="chartHorizontalScroll" method="handleTopScroll"/>
</dvt:projectGantt>
<dvt:schedulingGantt id="gantt2" startTime="2006-12-21 01:00"
                     endTime="2006-12-22 23:00"
                     value="#{schedulingGantt.model}" var="resourceObj"
                     inlineStyle="height:400px;"
                     tooltipKeyLabels="#{schedulingGantt.tooltipLabels}"
                     tooltipKeys="#{schedulingGantt.tooltipKeys}" 
                     summary="Scheduling Gantt Demo">
<f:facet name="major">
  <dvt:timeAxis scale="days" id="ta3"/>
</f:facet>
<f:facet name="minor">
  <dvt:timeAxis scale="hours" id="ta4"/>
</f:facet>
<f:facet name="nodeStamp">
  <af:column headerText="Employee Name" id="c5">
    <af:outputText value="#{resourceObj.resourceName}" id="ot5"/>
  </af:column>
</f:facet>
  <af:column headerText="Department" id="c6">
    <af:outputText value="#{resourceObj.department}" id="ot6"/>
  </af:column>
<dvt:ganttLegend keys="#{schedulingGantt.legendKeys}"
                 labels="#{schedulingGantt.legendLabels}"
                 id="gl2"/>
  <af:clientListener type="chartHorizontalScroll" method="handleBottomScroll"/>
</dvt:schedulingGantt>

26.5.4 ガント・チャートの印刷

ADFのガント・チャートには、書式設定されたオブジェクト(FO)を生成できるヘルパー・クラス(GanttPrinter)が用意されており、ApacheまたはXML Publisherと連動してPDFファイルが生成されます。

26.5.4.1 印刷オプション

通常、GanttPrinterクラスでは、ガント・チャートのコンテンツが画面に表示されたとおりに印刷されます。たとえば、ガント・チャートで凡例を非表示にすると、凡例は印刷されません。同様に、「表示」メニューの「リスト・ペイン」セクションで列を選択解除した場合、その列はガント・チャートで非表示となり、列の可視性印刷オプションを利用しないかぎり、印刷にも表示されません。

GanttPrinterクラスでは、次の印刷オプションが使用できます。

  • 列の可視性: setColumnVisibleメソッドでは、ガント・チャートのリスト領域の個々の列を印刷出力に表示するかどうかを制御できます。

    たとえば、ガント・チャートのリスト領域の最初の列を非表示にするには、_printer.setColumnVisible(o, false);というコードを使用します。メソッドの最初のパラメータはゼロベースの列の索引で、2番目のパラメータは印刷されたガント・チャートに列を表示するかどうかを示します。

  • マージン: GanttPrintersetMarginメソッドでは、次のコードで示すように、上、下、左および右マージンをピクセルで指定できます。ここで、_printerGanttPrinterクラスのインスタンスです。

    _printer.setMargin(25, 16, 66, 66);

  • ページ・サイズ: GanttPrintersetPageSizeメソッドでは、次のコードで示すように、印刷されたページの高さと幅をピクセルで指定できます。ここで、_printerGanttPrinterのインスタンスです。

    _printer.setPageSize (440, 600);

  • 期間: GanttPrinterクラスのsetStartTimeおよびsetEndTimeでは、印刷するガント・チャートの期間を指定できます。

    例26-26に、ガント・チャートの特定期間を印刷対象として設定するサンプル・コードを示します。startDateendDateは対象の日付を表す変数で、_printerGanttPrinterクラスのインスタンスです。

例26-26 ガント・チャートを印刷するための期間オプションを設定するコード

_printer.setStartTime(startDate);
_printer.setEndTime(endDate);

26.5.4.2 印刷イベントを処理するアクション・リスナー

ガント・チャートのツールバーには印刷ボタンがあり、印刷アクションが開始されます。ガント・チャートを印刷するには、印刷イベントを処理するActionListenerを作成する必要があります。ActionListenerのコードには、次のプロセスを含める必要があります。

  1. サーブレットの出力ストリームへのアクセス。

  2. FOの生成。このプロセスには、GanttPrinterのインスタンスの作成と、使用する印刷オプションのコードの記述が含まれます。

  3. PDFの生成。

例26-27に、印刷イベントを処理するActionListenerのコードを示します。このリスナーには、GanttPrinterヘルパー・クラスで使用できるすべての印刷オプションの設定が含まれます。

例26-27 ガント・チャートの印刷イベントを処理するサンプル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();
     response.setHeader("Cache-Control", "no-cache");
   } 
} 

26.5.5 タスク・バーへのダブルクリック・イベントの追加

ガント・チャート・コンポーネントでは、タスク・バーのダブルクリック・イベントがサポートされています。たとえば、ポップアップ・ウィンドウでタスクに関する詳細な情報が表示されるように設定できます。図26-22に、タスク・バーにダブルクリック・イベントを使用するプロジェクト・ガント・チャートを示します。

図26-22 ダブルクリック・イベントを使用したタスク・バー

タスクにダブルクリックが表示されたガント・チャート

例26-28に、タスク・バーにダブルクリック・イベントを追加するサンプル・コードを示します。

例26-28 ダブルクリック・イベントのサンプル・コード

<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)

26.5.6 ドロップ・ターゲットまたはドラッグ・ソースとしてのガント・チャートの使用

ユーザーがコレクションからアイテム(表から行など)をドラッグし、ツリーなどの別のコレクション・コンポーネントにドロップできるドラッグ・アンド・ドロップ機能を追加できます。プロジェクト・ガント・チャート・コンポーネントおよびスケジュール・ガント・チャート・コンポーネントは、ADFの表またはツリー表コンポーネントのドラッグ・ソースおよびドロップ・ターゲットとして有効にできます。リソース使用率ガント・チャート・コンポーネントは、ドロップ・ターゲットとしてのみ有効にできます。

アプリケーションでは、af:collectionDragSource動作タグまたはaf:collectionDropTarget動作タグをガント・タグの子として追加して、ドラッグ・ソースまたはドロップ・ターゲットとしてガント・チャート・コンポーネントを登録する必要があります。たとえば、af:collectionDragSourceを使用して、プロジェクト・ガント・チャート・タスクが表領域から別の表にドラッグされたときに起動されるドロップ・リスナーを登録できます。図26-23に、表領域からタスクの表にドラッグされるタスクがあるプロジェクト・ガント・チャートを示します。

図26-23 ドラッグ元としてのプロジェクト・ガント・チャート

ドラッグ・ソースとしてのプロジェクト・ガント・チャート

表26-29に、プロジェクト・ガント・チャートにドラッグ・アンド・ドロップ機能を追加するサンプル・コードを示します。

例26-29 ドラッグ・アンド・ドロップ機能を追加するサンプル・コード

<dvt:projectGantt id="projectGanttDragSource"
                  startTime="2008-04-01" endTime="2008-09-30"
                  value="#{projectGanttDragSource.model}"
                  var="task"
                  summary="Project Gantt Drag Source Demo">
  <f:facet name="major">
    <dvt:timeAxis scale="months" id="ta1"/>
  </f:facet>
  <f:facet name="minor">
    <dvt:timeAxis scale="weeks" id="ta2"/>
  </f:facet>
    <af:collectionDragSource actions="COPY MOVE" modelName="treeModel"/>
  <f:facet name="nodeStamp">
    <af:column headerText="Task Name" id="c1">
      <af:outputText value="#{task.taskName}" id="ot1"/>
    </af:column>
  </f:facet>
    <af:column headerText="Resource" id="c2">
      <af:outputText value="#{task.resourceName}" id="ot2"/>
    </af:column>
    <af:column headerText="Start Date" id="c3">
      <af:outputText value="#{task.startTime}" id="ot3"/>
    </af:column>
    <af:column headerText="End Date" id="c4">
      <af:outputText value="#{task.endTime}" id="ot4"/>
    </af:column>
      </dvt:projectGantt>

例26-30に、ドロップ・イベントを処理するリスナー・メソッドのサンプル・コードを示します。

例26-30 コレクションの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;
}

コレクションのドラッグ・アンド・ドロップ機能の追加の詳細は、36.4項「コレクションのドラッグ・アンド・ドロップ機能の追加」を参照してください。