コンテンツにスキップ

iDempiere 課題プロジェクトの使い方|取引先管理 操作マニュアル・技術仕様

📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。

課題プロジェクトは、自動課題レポート(Issue Reporting)が課題の発生元となる導入プロジェクトを記録するマスタです。課題が報告されるたびに MIssueProject.get()名称をキーに自動で検索・作成するため、原則としてユーザーが手入力する画面ではありません。

📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 370、標準メニュー未登録)。レコードはコード側から自動生成される想定で、テーブル定義も削除不可(IsDeleteable=N)です。案件・工数の管理には プロジェクト(Project) をご利用ください。

課題プロジェクトでできること

Section titled “課題プロジェクトでできること”
  • 課題の発生元プロジェクトを名称(120文字)で識別
  • システムステータス(評価中/導入中/本番稼働)の保持
  • 資産(Asset) との紐づけによる導入環境の特定
  • プロジェクト(Project) との紐づけによる会計プロジェクトへの接続
  • 統計情報(60文字)・プロファイル情報(4000文字)の保持
  • 説明欄への運用メモの記載

⚠️ 注意: レコードは MIssueProject.get(MIssue) によって自動作成・自動更新されます。手動で「システムステータス」「統計情報」「プロファイル」を編集しても、次に同名の課題が報告された時点で課題側の値に上書きされます。

課題プロジェクトは単一タブの構成です。

タブ名テーブル項目数役割
課題プロジェクトR_IssueProject10項目プロジェクト名・システムステータス・資産/プロジェクト紐づけ
graph TD
    A["🐞 課題が発生<br/>MIssue が生成される"] --> B{"課題の Name が<br/>設定されているか"}
    B -->|null| C["⏹ 何もしない<br/>(null を返す)"]
    B -->|あり| D["🔎 R_IssueProject を<br/>Name で検索"]
    D --> E{ヒットしたか}
    E -->|あり| F["📄 既存レコードを読み込み"]
    E -->|なし| G["➕ 新規レコードを作成<br/>Name をセット"]
    F --> H["🔄 システムステータス・統計情報<br/>プロファイルを課題の値で更新"]
    G --> H
    H --> I["💾 保存"]
    I --> J["🔗 課題側に<br/>R_IssueProject_ID と<br/>A_Asset_ID を書き戻し"]

課題が発生 MIssue が生成される 課題の Name が 設定されているか ⏹ 何もしない (null を返す) R_IssueProject を Name で検索 既存レコードを読み込み 新規レコードを作成 Name をセット システムステータス・統計情報 プロファイルを課題の値で更新 保存 課題側に R_IssueProject_ID と A_Asset_ID を書き戻し ヒットしたか あり なし

アクセス方法(メニューパス)

Section titled “アクセス方法(メニューパス)”

iDempiere 13 標準ではメニューに登録されていません。内容を確認したい場合は、システム管理者が「システム管理 > 一般ルール > システムルール > メニュー」で AD_Window_ID 370(Issue Project)のメニュー項目を追加し、ロールにウィンドウアクセス権を付与します。

新規登録(手動で登録する場合)

Section titled “新規登録(手動で登録する場合)”
  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 名称: プロジェクト名(120文字まで)
    • システムステータス: 評価中(E) / 導入中(I) / 本番稼働(P) から選択
  3. 必要に応じて紐づけを設定:
    • 資産: 導入環境を表す資産レコード
    • プロジェクト: 会計プロジェクト(C_Project
  4. 統計情報(60文字)・プロファイル(4000文字)・説明(255文字)を入力
  5. 保存」をクリック

💡 ヒント: 名称は自動照合のキーです。手動登録する場合も、課題側で使われる名称と完全一致させないと自動更新の対象になりません。

項目名必須説明
クライアント必須Table Direct対象クライアント(テナント)
組織必須Table Direct対象組織
名称必須文字列(120)プロジェクト名。自動照合のキー
説明-文字列(255)補足説明
システムステータス必須リスト評価中(E) / 導入中(I) / 本番稼働(P)
資産-Search導入環境を表す資産(A_Asset
プロジェクト-Search会計プロジェクト(C_Project
統計情報-文字列(60)障害分析用の統計情報
プロファイル-文字列(4000)障害分析用のプロファイル情報
有効必須チェックレコードが有効かどうか

全項目一覧はリファレンス参照

Q. 課題プロジェクトを削除できません

Section titled “Q. 課題プロジェクトを削除できません”

R_IssueProject は削除不可テーブル(IsDeleteable=N)として定義されています。課題履歴の参照整合性を守るための仕様です。使わなくなったレコードは「有効」チェックを外して無効化してください。

Q. 資産(Asset)が自動でセットされません

Section titled “Q. 資産(Asset)が自動でセットされません”

MIssueProject.setA_Asset_ID(MIssue) の実装は、内部変数を 0 に初期化してそのまま設定するだけで、課題からの資産の引き当ては行いません。つまり新規作成時に資産は必ず未設定(0)になります。資産を紐づけたい場合は手動で設定してください。なお、既存レコードに資産が設定されている場合は、get() の最後で課題側(MIssue.A_Asset_ID)へ書き戻されます。

Q. システムステータスを手で変えても元に戻ってしまいます

Section titled “Q. システムステータスを手で変えても元に戻ってしまいます”

MIssueProject.get() は、既存レコードを見つけた場合でも setSystemStatus() / setStatisticsInfo() / setProfileInfo() を課題側の値で毎回上書きしてから保存します。この3項目は自動同期される設計です。

Q. システムステータスが空欄の課題はどう扱われますか?

Section titled “Q. システムステータスが空欄の課題はどう扱われますか?”

MIssue.getSystemStatus() は値が未設定または空文字の場合、既定値として SYSTEMSTATUS_Evaluation"E" = 評価中)を返します。したがって課題プロジェクト側にも「評価中」がセットされます。

Q. 会計プロジェクト(C_Project)と何が違いますか?

Section titled “Q. 会計プロジェクト(C_Project)と何が違いますか?”

R_IssueProject は課題レポート専用のマスタで、予算・工数・請求といった機能を一切持ちません。案件管理は プロジェクト を使用し、課題プロジェクトの「プロジェクト」項目でリンクさせる構成になります。

🛠 技術仕様(開発者向け)

課題プロジェクトは R_IssueProject テーブルに格納され、MIssueProject クラス(155行、X_R_IssueProject(302行)を継承)が自動照合・自動生成のロジックを担います。

項目
テーブルR_IssueProject
ウィンドウAD_Window_ID: 370(Issue Project、iDempiere 13 では無効化)
モデルクラスMIssueProject(155行) / X_R_IssueProject(302行)
インターフェースI_R_IssueProject
アクセスレベル6(システム+クライアント)
削除可否不可IsDeleteable=N
大量データはい(IsHighVolume=Y
classDiagram
    class MIssueProject {
        +get(MIssue) MIssueProject$
        +setA_Asset_ID(MIssue) void
        +toString() String
    }
    class X_R_IssueProject {
        <<generated>>
        +getSystemStatus() String
        +getStatisticsInfo() String
        +getProfileInfo() String
        +getC_Project_ID() int
        +getA_Asset_ID() int
    }
    class PO {
        <<abstract>>
    }
    MIssueProject --|> X_R_IssueProject
    X_R_IssueProject --|> PO
    MIssue --> MIssueProject : "get(issue)"
    MIssueProject --> C_Project : links
    MIssueProject --> A_Asset : links

get(issue) +get(MIssue) MIssueProject$ +setA_Asset_ID(MIssue) void +toString() String <> +getSystemStatus() String +getStatisticsInfo() String +getProfileInfo() String +getC_Project_ID() int +getA_Asset_ID() int <> > X_R_IssueProject X_R_IssueProject --

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

R_IssueProject(課題プロジェクト)

Section titled “R_IssueProject(課題プロジェクト)”
カラム名必須説明備考
R_IssueProject_IDID(10)PK課題プロジェクトID主キー。説明は「Implementation Projects」
R_IssueProject_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント
AD_Org_IDTable DirectY組織
NameString(120)Y名称識別子・自動照合キー
DescriptionString(255)N説明
SystemStatusList(1)YシステムステータスE/I/P。get() で自動上書き
A_Asset_IDSearchN資産新規作成時は常に 0
C_Project_IDSearchNプロジェクトC_Project 参照
StatisticsInfoString(60)N統計情報get() で自動上書き
ProfileInfoString(4000)Nプロファイルget() で自動上書き
IsActiveYes-No(1)Y有効

X_R_IssueSystem / X_R_IssueProject で定義される定数(AD_Reference_ID: 374)は次の3種です。

定数意味
ESYSTEMSTATUS_Evaluation評価中(既定値)
ISYSTEMSTATUS_Implementation導入中
PSYSTEMSTATUS_Production本番稼働
erDiagram
    AD_Issue ||--o| R_IssueProject : "reported from project"
    R_IssueProject ||--o| C_Project : "financial project"
    R_IssueProject ||--o| A_Asset : "installed asset"
    AD_Issue ||--o| R_IssueSystem : "reporting system"
    AD_Issue ||--o| R_IssueUser : "reporting user"

reported from project financial project installed asset reporting system reporting user

自動照合・自動生成(MIssueProject.get(MIssue)

Section titled “自動照合・自動生成(MIssueProject.get(MIssue))”

static public MIssueProject get(MIssue issue) の処理順序は次のとおりです。

  1. issue.getName()null なら null を返す(何も作らない)
  2. SELECT * FROM R_IssueProject WHERE Name=? で名称完全一致検索(トランザクションなし=trxNamenull
  3. ヒットしなければ新規インスタンスを生成し、setName(issue.getName())setA_Asset_ID(issue) を実行
  4. ヒットの有無にかかわらず setSystemStatus() / setStatisticsInfo() / setProfileInfo() を課題の値で上書き
  5. save() に失敗した場合は null を返す
  6. 成功時は課題側に setR_IssueProject_ID() を書き戻し、レコードに資産がセットされていれば issue.setA_Asset_ID() も書き戻す

検索は AD_Client_ID で絞り込まず、Name 単独で行われます。マルチテナント環境では同名プロジェクトが混在しうる点に注意してください。

public void setA_Asset_ID (MIssue issue)
{
int A_Asset_ID = 0;
super.setA_Asset_ID (A_Asset_ID);
}

引数 issue を参照せず常に 0 を設定する実装です。新規作成時に資産が自動で引き当てられないのはこのためです。

このテーブルにはカラム単位の Callout は定義されていません。自動生成時の挙動を変えたい場合は、OSGi プラグインの Model Validator で補完するのが安全です。

public class IssueProjectEnricher implements ModelValidator {
@Override
public String modelChange(PO po, int type) throws Exception {
if (po instanceof MIssueProject && type == TYPE_BEFORE_NEW) {
MIssueProject pj = (MIssueProject) po;
// 例: 命名規則から会計プロジェクトを自動で紐づける
int projectId = DB.getSQLValue(po.get_TrxName(),
"SELECT C_Project_ID FROM C_Project WHERE Value=? AND AD_Client_ID=?",
pj.getName(), pj.getAD_Client_ID());
if (projectId > 0)
pj.setC_Project_ID(projectId);
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
return null; // R_IssueProject は伝票型ではないため不要
}
}

このウィンドウに紐づく標準プロセス・レポートはありません(標準メニュー未登録)。


課題プロジェクトは自動生成される一方で、資産や会計プロジェクトとの紐づけはコア実装では補完されません。 As-Link株式会社では、命名規則からの自動リンクなど、運用に合わせた補完ロジックの実装をご支援します。

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

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