コンテンツにスキップ

iDempiere プロジェクトタイプの使い方|プロジェクト管理 操作マニュアル・技術仕様

📖 プロジェクト管理の全体像: プロジェクト管理の全体図 も合わせてご覧ください。

プロジェクトタイプは、プロジェクトの「ひな形(テンプレート)」を定義するマスタです。標準フェーズ・標準タスクをあらかじめ登録しておくと、サービスプロジェクトの作成時にフェーズ・タスクがプロジェクトへ自動コピーされ、案件ごとの工程登録を省力化できます。

📌 ポイント: フェーズ・タスクの自動コピーが働くのは、プロジェクトカテゴリが**サービスプロジェクト(S)**の場合のみです(MProject.setProjectType() の実装仕様)。一般・作業指示・資産プロジェクトではフェーズはコピーされません。

プロジェクトタイプでできること

Section titled “プロジェクトタイプでできること”
  • プロジェクトの分類(プロジェクトカテゴリ)の定義
  • 標準フェーズのテンプレート登録(実行順序・標準数量・紐付け品目)
  • 標準タスクのテンプレート登録(フェーズ配下の作業単位)
  • サービスプロジェクト作成時のフェーズ・タスク自動コピー
  • 実績測定(パフォーマンスゴール)のプロジェクト集計軸としての利用

プロジェクトタイプは 3 階層のタブ構成です。

タブ名テーブル項目数役割
プロジェクトタイプC_ProjectType約7項目タイプ名・プロジェクトカテゴリの定義
標準フェーズC_Phase約10項目フェーズのテンプレート(順序・品目・標準数量)
標準タスクC_Task約10項目フェーズ配下のタスクテンプレート
graph TD
    A["🚀 メニューから開く<br/>プロジェクト管理 > プロジェクトタイプ"] --> B["➕ 新規でタイプを登録<br/>(名称・プロジェクトカテゴリ)"]
    B --> C["🗂️ 標準フェーズタブで<br/>フェーズを順に登録<br/>(シーケンスNo・品目・標準数量)"]
    C --> D["✅ 標準タスクタブで<br/>各フェーズのタスクを登録"]
    D --> E["💾 保存"]
    E --> F["🔗 プロジェクト画面で<br/>プロジェクトタイプセットボタンを実行<br/>→ サービスプロジェクトなら<br/>フェーズ・タスクが自動コピー"]

メニューから開く プロジェクト管理 > プロジェクトタイプ 新規でタイプを登録 (名称・プロジェクトカテゴリ) 標準フェーズタブで フェーズを順に登録 (シーケンスNo・品目・標準数量) 標準タスクタブで 各フェーズのタスクを登録 保存 プロジェクト画面で プロジェクトタイプセットボタンを実行 → サービスプロジェクトなら フェーズ・タスクが自動コピー

メニューから「プロジェクト管理 > プロジェクトタイプ」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: プロジェクトタイプ名(例: システム導入
    • プロジェクトカテゴリ: プロジェクトの分類(フェーズ管理を使う場合はサービスプロジェクト)
    • 説明・コメント: 任意
  3. 保存」をクリック

標準フェーズ・標準タスクの登録

Section titled “標準フェーズ・標準タスクの登録”
  1. 標準フェーズ」タブに移動し、フェーズを登録:
    • シーケンスNo: 実行順序(自動で 10, 20, 30… と採番)
    • 名称: フェーズ名(例: 要件定義
    • 品目: フェーズを請求に使う場合、対応するサービス品目
    • 標準数量: 標準の数量(デフォルト 1)
  2. 標準タスク」タブに移動し、各フェーズ配下のタスクを同じ要領で登録

💡 ヒント: シーケンスNoは SELECT MAX(SeqNo)+10 の SQL デフォルト値により自動採番されます。あとからフェーズを挿入したい場合は 15, 25 など中間値を手入力してください。

項目名必須説明
名称必須文字列(60)プロジェクトタイプ名
説明-文字列(255)補足説明
コメント-テキストヒント・備考
プロジェクトカテゴリ必須リストプロジェクトの分類(デフォルト: 一般 N)
有効必須チェック有効フラグ
項目名必須説明
プロジェクトタイプ必須選択親のプロジェクトタイプ
シーケンスNo必須整数フェーズの実行順序(自動採番: MAX+10)
名称必須文字列(60)フェーズ名
品目-検索フェーズに対応する品目・サービス
標準数量必須数量標準数量(デフォルト 1)

標準タスクタブも同構成(親が標準フェーズになる点のみ異なる)です。全項目は 画面リファレンス を参照してください。

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_ProjectTypeMProjectType: 367行)・C_PhaseMProjectTypePhase: 121行)・C_TaskMProjectTypeTask: 80行)の 3 テーブルで構成されます。MProjectTypemarkImmutable() を持ち、MProjectType.get() によるキャッシュ参照をサポートします。Document 型ではありません。

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

+get(C_ProjectType_ID) MProjectType +getPhases() MProjectTypePhase[] +getSqlPI(restrictions, ...) String +getSqlBarChart(restrictions, ...) String +getQuery(restrictions, ...) MQuery +markImmutable() MProjectType +getTasks() MProjectTypeTask[] <> <> > X_C_ProjectType X_C_ProjectType --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MProjectType.java / MProjectTypePhase.java / MProjectTypeTask.java

C_ProjectType(プロジェクトタイプ)

Section titled “C_ProjectType(プロジェクトタイプ)”
カラム名必須説明備考
C_ProjectType_IDIDPKプロジェクトタイプID主キー
AD_Client_ID / AD_Org_IDTableDirectYクライアント / 組織
NameString(60)Y名称識別子
DescriptionString(255)N説明
HelpText(2000)Nコメント
ProjectCategoryList(1)Yプロジェクトカテゴリデフォルト N
IsActiveYesNoY有効デフォルト Y
カラム名必須説明備考
C_Phase_IDIDPK標準フェーズID主キー
C_ProjectType_IDTableDirectY親プロジェクトタイプ親リンク
SeqNoIntegerY実行順序デフォルト @SQL=MAX(SeqNo)+10
NameString(60)Yフェーズ名
M_Product_IDSearchN品目フェーズ請求用
StandardQtyQuantityY標準数量デフォルト 1
カラム名必須説明備考
C_Task_IDIDPK標準タスクID主キー
C_Phase_IDTableDirectY親標準フェーズ親リンク
SeqNoIntegerY実行順序デフォルト @SQL=MAX(SeqNo)+10
NameString(60)Yタスク名
M_Product_IDSearchN品目
StandardQtyQuantityY標準数量デフォルト 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"

standard phases standard tasks template for copied to linked to cycle step

プロジェクトへのフェーズコピー(MProject.setProjectType)

Section titled “プロジェクトへのフェーズコピー(MProject.setProjectType)”

プロジェクト側の「プロジェクトタイプセット」ボタン実行時の流れ:

  1. C_ProjectType_IDProjectCategory をプロジェクトへセット
  2. カテゴリが PROJECTCATEGORY_ServiceChargeProject(S)の場合のみ copyPhasesFrom(type) を実行
  3. copyPhasesFromMProjectType.getPhases() で全標準フェーズを取得し、MProjectPhase として複製保存。各フェーズごとに copyTasksFrom() で標準タスクも MProjectTask へ複製
  4. コピー件数が一致しない場合は SEVERE ログを出力

MProjectType はパフォーマンスゴール(PA)のデータソースとしても機能し、getSqlPI() / getSqlBarChart()C_Project を集計する SQL を生成します。プロジェクトタイプ単位で計画金額・委託金額等の達成度を測定できます。

MProjectType.get(C_ProjectType_ID)ImmutableIntPOCache 系のキャッシュ経由で取得され、markImmutable() で不変化されます。繰り返し参照する処理ではこの static メソッドを使用してください。

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”

タイプ・フェーズ・タスクに独自制約を追加する例:

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 デフォルト値で実現されています。

本ウィンドウ固有のプロセスはありません。フェーズのコピーはプロジェクト側の「プロジェクトタイプセット」ボタン(C_ProjectType_ID Button カラム)から起動されます。


プロジェクトタイプのテンプレート運用は、Model Validator による命名規則・必須項目の強制や、業種別フェーズテンプレートの自動生成プロセスなど、コア改変なしで拡張できます。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら