iDempiere プロジェクトタイプの使い方|プロジェクト管理 操作マニュアル・技術仕様
📖 プロジェクト管理の全体像: プロジェクト管理の全体図 も合わせてご覧ください。
プロジェクトタイプは、プロジェクトの「ひな形(テンプレート)」を定義するマスタです。標準フェーズ・標準タスクをあらかじめ登録しておくと、サービスプロジェクトの作成時にフェーズ・タスクがプロジェクトへ自動コピーされ、案件ごとの工程登録を省力化できます。
📌 ポイント: フェーズ・タスクの自動コピーが働くのは、プロジェクトカテゴリが**サービスプロジェクト(S)**の場合のみです(
MProject.setProjectType()の実装仕様)。一般・作業指示・資産プロジェクトではフェーズはコピーされません。
プロジェクトタイプでできること
Section titled “プロジェクトタイプでできること”- プロジェクトの分類(プロジェクトカテゴリ)の定義
- 標準フェーズのテンプレート登録(実行順序・標準数量・紐付け品目)
- 標準タスクのテンプレート登録(フェーズ配下の作業単位)
- サービスプロジェクト作成時のフェーズ・タスク自動コピー
- 実績測定(パフォーマンスゴール)のプロジェクト集計軸としての利用
プロジェクトタイプは 3 階層のタブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| プロジェクトタイプ | C_ProjectType | 約7項目 | タイプ名・プロジェクトカテゴリの定義 |
| 標準フェーズ | C_Phase | 約10項目 | フェーズのテンプレート(順序・品目・標準数量) |
| 標準タスク | C_Task | 約10項目 | フェーズ配下のタスクテンプレート |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>プロジェクト管理 > プロジェクトタイプ"] --> B["➕ 新規でタイプを登録<br/>(名称・プロジェクトカテゴリ)"]
B --> C["🗂️ 標準フェーズタブで<br/>フェーズを順に登録<br/>(シーケンスNo・品目・標準数量)"]
C --> D["✅ 標準タスクタブで<br/>各フェーズのタスクを登録"]
D --> E["💾 保存"]
E --> F["🔗 プロジェクト画面で<br/>プロジェクトタイプセットボタンを実行<br/>→ サービスプロジェクトなら<br/>フェーズ・タスクが自動コピー"]
アクセス方法
Section titled “アクセス方法”メニューから「プロジェクト管理 > プロジェクトタイプ」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称: プロジェクトタイプ名(例:
システム導入) - プロジェクトカテゴリ: プロジェクトの分類(フェーズ管理を使う場合はサービスプロジェクト)
- 説明・コメント: 任意
- 名称: プロジェクトタイプ名(例:
- 「保存」をクリック
標準フェーズ・標準タスクの登録
Section titled “標準フェーズ・標準タスクの登録”- 「標準フェーズ」タブに移動し、フェーズを登録:
- シーケンスNo: 実行順序(自動で 10, 20, 30… と採番)
- 名称: フェーズ名(例:
要件定義) - 品目: フェーズを請求に使う場合、対応するサービス品目
- 標準数量: 標準の数量(デフォルト 1)
- 「標準タスク」タブに移動し、各フェーズ配下のタスクを同じ要領で登録
💡 ヒント: シーケンスNoは
SELECT MAX(SeqNo)+10の SQL デフォルト値により自動採番されます。あとからフェーズを挿入したい場合は 15, 25 など中間値を手入力してください。
項目リファレンス
Section titled “項目リファレンス”プロジェクトタイプタブ
Section titled “プロジェクトタイプタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列(60) | プロジェクトタイプ名 |
| 説明 | - | 文字列(255) | 補足説明 |
| コメント | - | テキスト | ヒント・備考 |
| プロジェクトカテゴリ | 必須 | リスト | プロジェクトの分類(デフォルト: 一般 N) |
| 有効 | 必須 | チェック | 有効フラグ |
標準フェーズタブ
Section titled “標準フェーズタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| プロジェクトタイプ | 必須 | 選択 | 親のプロジェクトタイプ |
| シーケンスNo | 必須 | 整数 | フェーズの実行順序(自動採番: MAX+10) |
| 名称 | 必須 | 文字列(60) | フェーズ名 |
| 品目 | - | 検索 | フェーズに対応する品目・サービス |
| 標準数量 | 必須 | 数量 | 標準数量(デフォルト 1) |
標準タスクタブも同構成(親が標準フェーズになる点のみ異なる)です。全項目は 画面リファレンス を参照してください。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. プロジェクトタイプを設定してもフェーズがコピーされません
Section titled “Q. プロジェクトタイプを設定してもフェーズがコピーされません”プロジェクトカテゴリがサービスプロジェクト(S)以外の場合、MProject.setProjectType() はカテゴリの設定のみを行い、フェーズ・タスクのコピー(copyPhasesFrom)を実行しません。フェーズ管理を使う場合はプロジェクトタイプのカテゴリをサービスプロジェクトにしてください。
Q. 既存プロジェクトに後からフェーズを追加コピーできますか?
Section titled “Q. 既存プロジェクトに後からフェーズを追加コピーできますか?”プロジェクト画面の「プロジェクトタイプセット」ボタンを実行したタイミングでコピーされます。また「詳細コピー」ボタンで他プロジェクトからフェーズ・タスク・明細をコピーすることもできます(MProject.copyDetailsFrom())。
Q. 標準フェーズの「品目」「標準数量」は何に使いますか?
Section titled “Q. 標準フェーズの「品目」「標準数量」は何に使いますか?”フェーズ単位で請求を行う運用(フェーズ完了時にサービス品目を請求)のためのテンプレート値です。プロジェクトへコピーされた後、各プロジェクトフェーズで個別に調整できます。
Q. プロジェクトタイプは削除できますか?
Section titled “Q. プロジェクトタイプは削除できますか?”テーブル定義上は削除可能(IsDeleteable=Y)ですが、既にプロジェクトから参照されている場合は外部キー制約で削除できません。運用を終えたタイプは「有効」チェックを外して無効化してください。
🛠 技術仕様(開発者向け)
プロジェクトタイプはマスタデータ型ウィンドウ(AD_Window_ID: 265)で、C_ProjectType(MProjectType: 367行)・C_Phase(MProjectTypePhase: 121行)・C_Task(MProjectTypeTask: 80行)の 3 テーブルで構成されます。MProjectType は markImmutable() を持ち、MProjectType.get() によるキャッシュ参照をサポートします。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MProjectType {
+get(C_ProjectType_ID) MProjectType
+getPhases() MProjectTypePhase[]
+getSqlPI(restrictions, ...) String
+getSqlBarChart(restrictions, ...) String
+getQuery(restrictions, ...) MQuery
+markImmutable() MProjectType
}
class MProjectTypePhase {
+getTasks() MProjectTypeTask[]
}
class MProjectTypeTask
class X_C_ProjectType {
<<generated>>
}
class PO {
<<abstract>>
}
MProjectType --|> X_C_ProjectType
X_C_ProjectType --|> PO
MProjectType --> MProjectTypePhase : has many
MProjectTypePhase --> MProjectTypeTask : has many
MProjectType ..> MProject : template for
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MProjectType.java / MProjectTypePhase.java / MProjectTypeTask.java
関連DBテーブル
Section titled “関連DBテーブル”C_ProjectType(プロジェクトタイプ)
Section titled “C_ProjectType(プロジェクトタイプ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_ProjectType_ID | ID | PK | プロジェクトタイプID | 主キー |
| AD_Client_ID / AD_Org_ID | TableDirect | Y | クライアント / 組織 | |
| Name | String(60) | Y | 名称 | 識別子 |
| Description | String(255) | N | 説明 | |
| Help | Text(2000) | N | コメント | |
| ProjectCategory | List(1) | Y | プロジェクトカテゴリ | デフォルト N |
| IsActive | YesNo | Y | 有効 | デフォルト Y |
C_Phase(標準フェーズ)
Section titled “C_Phase(標準フェーズ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Phase_ID | ID | PK | 標準フェーズID | 主キー |
| C_ProjectType_ID | TableDirect | Y | 親プロジェクトタイプ | 親リンク |
| SeqNo | Integer | Y | 実行順序 | デフォルト @SQL=MAX(SeqNo)+10 |
| Name | String(60) | Y | フェーズ名 | |
| M_Product_ID | Search | N | 品目 | フェーズ請求用 |
| StandardQty | Quantity | Y | 標準数量 | デフォルト 1 |
C_Task(標準タスク)
Section titled “C_Task(標準タスク)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Task_ID | ID | PK | 標準タスクID | 主キー |
| C_Phase_ID | TableDirect | Y | 親標準フェーズ | 親リンク |
| SeqNo | Integer | Y | 実行順序 | デフォルト @SQL=MAX(SeqNo)+10 |
| Name | String(60) | Y | タスク名 | |
| M_Product_ID | Search | N | 品目 | |
| StandardQty | Quantity | Y | 標準数量 | デフォルト 1 |
erDiagram
C_ProjectType ||--o{ C_Phase : "standard phases"
C_Phase ||--o{ C_Task : "standard tasks"
C_ProjectType ||--o{ C_Project : "template for"
C_Phase ||--o{ C_ProjectPhase : "copied to"
C_Task ||--o{ C_ProjectTask : "copied to"
C_Phase ||--o{ C_CyclePhase : "linked to cycle step"
ビジネスロジック
Section titled “ビジネスロジック”プロジェクトへのフェーズコピー(MProject.setProjectType)
Section titled “プロジェクトへのフェーズコピー(MProject.setProjectType)”プロジェクト側の「プロジェクトタイプセット」ボタン実行時の流れ:
C_ProjectType_IDとProjectCategoryをプロジェクトへセット- カテゴリが
PROJECTCATEGORY_ServiceChargeProject(S)の場合のみcopyPhasesFrom(type)を実行 copyPhasesFromはMProjectType.getPhases()で全標準フェーズを取得し、MProjectPhaseとして複製保存。各フェーズごとにcopyTasksFrom()で標準タスクもMProjectTaskへ複製- コピー件数が一致しない場合は SEVERE ログを出力
実績測定への利用
Section titled “実績測定への利用”MProjectType はパフォーマンスゴール(PA)のデータソースとしても機能し、getSqlPI() / getSqlBarChart() が C_Project を集計する SQL を生成します。プロジェクトタイプ単位で計画金額・委託金額等の達成度を測定できます。
MProjectType.get(C_ProjectType_ID) は ImmutableIntPOCache 系のキャッシュ経由で取得され、markImmutable() で不変化されます。繰り返し参照する処理ではこの static メソッドを使用してください。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”タイプ・フェーズ・タスクに独自制約を追加する例:
public class ProjectTypeValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MProjectTypePhase && type == TYPE_BEFORE_NEW) { MProjectTypePhase phase = (MProjectTypePhase) po; // 例: フェーズには品目の設定を必須化する if (phase.getM_Product_ID() == 0) throw new AdempiereException("標準フェーズには請求用の品目を設定してください"); } return null; }}このテーブル群に標準の Callout は登録されていません(gw_column.tsv 実測)。SeqNo の自動採番は AD の SQL デフォルト値で実現されています。
関連プロセス
Section titled “関連プロセス”本ウィンドウ固有のプロセスはありません。フェーズのコピーはプロジェクト側の「プロジェクトタイプセット」ボタン(C_ProjectType_ID Button カラム)から起動されます。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”プロジェクトタイプのテンプレート運用は、Model Validator による命名規則・必須項目の強制や、業種別フェーズテンプレートの自動生成プロセスなど、コア改変なしで拡張できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。