Skip to content

iDempiere 課題システムの使い方|取引先管理 操作マニュアル・技術仕様

This content is not available in your language yet.

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

課題システムは、自動課題レポート(Issue Reporting)で課題が発生した稼働環境そのものを識別するマスタです。DBサーバアドレス(JDBC URL)をキーに MIssueSystem.get() が自動で検索・作成し、システムステータスや統計情報・プロファイル情報を課題側の値で同期します。

📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 372、標準メニュー未登録)。開発環境・検証環境・本番環境を JDBC URL で自動的に区別する仕組みで、テーブルは削除不可(IsDeleteable=N)です。

  • 稼働環境を DBサーバアドレス(JDBC URL・255文字)で一意に識別
  • システムステータス(評価中/導入中/本番稼働)による環境区分の保持
  • 資産(Asset) との紐づけによるサーバ資産の特定
  • 統計情報(60文字)・プロファイル情報(4000文字)の保持
  • 課題(AD_Issue)からの発生環境トレース

⚠️ 注意: 「DBサーバアドレス」「統計情報」「プロファイル」はいずれも更新不可項目IsUpdateable=N)です。画面から編集できるのは「システムステータス」「資産」「有効」のみで、統計・プロファイルはコード側からのみ更新されます。

課題システムは単一タブの構成です。

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

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

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

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

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

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

Section titled “新規登録(手動で登録する場合)”
  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • DBサーバアドレス: データベースの JDBC URL(255文字まで)
    • システムステータス: 評価中(E) / 導入中(I) / 本番稼働(P) から選択
  3. 必要に応じて 資産 を選択(サーバ資産との紐づけ)
  4. 保存」をクリック

💡 ヒント: DBサーバアドレスは自動照合のキーです。同じ JDBC URL の環境は1レコードに集約されるため、開発・検証・本番でそれぞれ別レコードが自動生成される想定です。

項目名必須説明
クライアント必須Table Direct対象クライアント(テナント)
組織必須Table Direct対象組織
DBサーバアドレス必須文字列(255)データベースの JDBC URL。更新不可・自動照合キー
システムステータス必須リスト評価中(E) / 導入中(I) / 本番稼働(P)
資産-Searchサーバ資産(A_Asset
統計情報-文字列(60)障害分析用の統計情報。更新不可
プロファイル-文字列(4000)障害分析用のプロファイル情報。更新不可
有効必須チェックレコードが有効かどうか

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

Q. DBサーバアドレスを画面から修正できません

Section titled “Q. DBサーバアドレスを画面から修正できません”

DBAddressIsUpdateable=N(更新不可)として定義されています。自動照合のキーであるため、後から変更すると課題履歴との対応が崩れるためです。誤登録の場合は無効化し、新規レコードを作成してください。

Q. 「統計情報」「プロファイル」が入力できません

Section titled “Q. 「統計情報」「プロファイル」が入力できません”

この2項目も IsUpdateable=N です。MIssueSystem.get() が課題(MIssue)から取得した値で毎回セットする設計のため、画面からの編集は想定されていません。

Q. 資産(Asset)はどのタイミングで更新されますか?

Section titled “Q. 資産(Asset)はどのタイミングで更新されますか?”

MIssueSystem.get() では2段階で扱われます。新規作成時は system.setA_Asset_ID(issue.getA_Asset_ID()) で課題の資産をコピーします。既存レコードの場合も、課題側の資産が 0 以外かつレコードの資産と異なるときに上書きされます。保存後、レコードに資産があれば逆に課題側へ書き戻されます。

Q. 課題プロジェクトとの違いは何ですか?

Section titled “Q. 課題プロジェクトとの違いは何ですか?”

課題プロジェクト は課題の**名称(Name)**をキーに導入案件を識別するのに対し、課題システムは DBサーバアドレスをキーに稼働環境(インスタンス)を識別します。1つの導入案件に複数の環境がぶら下がる関係です。

Q. システムステータスの既定値は何ですか?

Section titled “Q. システムステータスの既定値は何ですか?”

課題側が未設定の場合、MIssue.getSystemStatus()SYSTEMSTATUS_Evaluation"E" = 評価中)を返すため、課題システムにも「評価中」がセットされます。

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

課題システムは R_IssueSystem テーブルに格納され、MIssueSystem クラス(147行、X_R_IssueSystem(257行)を継承)が JDBC URL をキーとする自動照合・自動生成を担います。

項目
テーブルR_IssueSystem
ウィンドウAD_Window_ID: 372(Issue System、iDempiere 13 では無効化)
モデルクラスMIssueSystem(147行) / X_R_IssueSystem(257行)
インターフェースI_R_IssueSystem
アクセスレベル6(システム+クライアント)
削除可否不可IsDeleteable=N
大量データはい(IsHighVolume=Y
classDiagram
    class MIssueSystem {
        +get(MIssue) MIssueSystem$
        +toString() String
    }
    class X_R_IssueSystem {
        <<generated>>
        +getDBAddress() String
        +getSystemStatus() String
        +getStatisticsInfo() String
        +getProfileInfo() String
        +getA_Asset_ID() int
    }
    class PO {
        <<abstract>>
    }
    MIssueSystem --|> X_R_IssueSystem
    X_R_IssueSystem --|> PO
    MIssue --> MIssueSystem : "get(issue)"
    MIssueSystem --> A_Asset : links

get(issue) +get(MIssue) MIssueSystem$ +toString() String <> +getDBAddress() String +getSystemStatus() String +getStatisticsInfo() String +getProfileInfo() String +getA_Asset_ID() int <> > X_R_IssueSystem X_R_IssueSystem --

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

カラム名必須説明備考
R_IssueSystem_IDID(10)PK課題システムID主キー。説明は「System creating the issue」
R_IssueSystem_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント
AD_Org_IDTable DirectY組織
DBAddressString(255)YDBサーバアドレスJDBC URL。更新不可・自動照合キー
SystemStatusList(1)YシステムステータスE/I/P。get() で自動上書き
A_Asset_IDSearchN資産課題側と同期
StatisticsInfoString(60)N統計情報更新不可get() で自動上書き
ProfileInfoString(4000)Nプロファイル更新不可get() で自動上書き
IsActiveYes-No(1)Y有効

X_R_IssueSystem の定数定義(AD_Reference_ID: 374)は次の3種です。

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

reported from system server asset reporting project reporting user matched known issue

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

Section titled “自動照合・自動生成(MIssueSystem.get(MIssue))”
  1. issue.getDBAddress()null なら null を返す
  2. SELECT * FROM R_IssueSystem WHERE DBAddress=? で完全一致検索(trxNamenull
  3. ヒットしなければ新規インスタンスを生成し、setDBAddress()setA_Asset_ID(issue.getA_Asset_ID()) を実行
  4. ヒットの有無にかかわらず setSystemStatus() / setStatisticsInfo() / setProfileInfo() を課題の値で上書き
  5. 課題の資産が 0 以外かつレコードの資産と異なる場合、レコード側の資産を課題の値で更新
  6. save() に失敗した場合は null を返す
  7. 成功時は issue.setR_IssueSystem_ID() を書き戻し、レコードに資産があれば issue.setA_Asset_ID() も書き戻す

検索条件は DBAddress 単独で、AD_Client_ID による絞り込みはありません。同一 DB を共有する複数テナントでは1レコードに集約されます。

課題プロジェクトとの実装差分

Section titled “課題プロジェクトとの実装差分”
観点MIssueSystemMIssueProject
照合キーDBAddressName
資産の初期設定課題の A_Asset_ID をコピー常に 0(引数を無視)
既存レコードの資産更新課題側と不一致なら更新更新しない
ステータス・統計・プロファイル毎回上書き毎回上書き

このテーブルにはカラム単位の Callout は定義されていません。環境の自動識別に社内ルールを加えたい場合は、OSGi プラグインの Model Validator で補完します。

public class IssueSystemEnricher implements ModelValidator {
@Override
public String modelChange(PO po, int type) throws Exception {
if (po instanceof MIssueSystem && type == TYPE_BEFORE_NEW) {
MIssueSystem sys = (MIssueSystem) po;
// 例: JDBC URL のホスト名から本番/検証を自動判定
String db = sys.getDBAddress();
if (db != null && db.contains("prod"))
sys.setSystemStatus(X_R_IssueSystem.SYSTEMSTATUS_Production);
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
return null; // R_IssueSystem は伝票型ではないため不要
}
}

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


課題システムは JDBC URL による環境識別という発想を持ちますが、コンテナ環境やマルチテナント構成では追加の判定ロジックが必要になります。 As-Link株式会社では、稼働環境の識別と障害情報の集約を現代的な運用基盤に接続する設計をご支援します。

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

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