iDempiere 課題システムの使い方|取引先管理 操作マニュアル・技術仕様
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
課題システムは、自動課題レポート(Issue Reporting)で課題が発生した稼働環境そのものを識別するマスタです。DBサーバアドレス(JDBC URL)をキーに MIssueSystem.get() が自動で検索・作成し、システムステータスや統計情報・プロファイル情報を課題側の値で同期します。
📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 372、標準メニュー未登録)。開発環境・検証環境・本番環境を JDBC URL で自動的に区別する仕組みで、テーブルは削除不可(
IsDeleteable=N)です。
課題システムでできること
Section titled “課題システムでできること”- 稼働環境を DBサーバアドレス(JDBC URL・255文字)で一意に識別
- システムステータス(評価中/導入中/本番稼働)による環境区分の保持
- 資産(Asset) との紐づけによるサーバ資産の特定
- 統計情報(60文字)・プロファイル情報(4000文字)の保持
- 課題(
AD_Issue)からの発生環境トレース
⚠️ 注意: 「DBサーバアドレス」「統計情報」「プロファイル」はいずれも更新不可項目(
IsUpdateable=N)です。画面から編集できるのは「システムステータス」「資産」「有効」のみで、統計・プロファイルはコード側からのみ更新されます。
課題システムは単一タブの構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 課題システム | R_IssueSystem | 7項目 | DBサーバアドレス・システムステータス・統計/プロファイル |
基本操作手順
Section titled “基本操作手順”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 を書き戻し"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”iDempiere 13 標準ではメニューに登録されていません。参照が必要な場合は、システム管理者が「システム管理 > 一般ルール > システムルール > メニュー」で AD_Window_ID 372(Issue System)のメニュー項目を追加し、ロールにウィンドウアクセス権を付与します。
新規登録(手動で登録する場合)
Section titled “新規登録(手動で登録する場合)”- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- DBサーバアドレス: データベースの JDBC URL(255文字まで)
- システムステータス:
評価中(E)/導入中(I)/本番稼働(P)から選択
- 必要に応じて 資産 を選択(サーバ資産との紐づけ)
- 「保存」をクリック
💡 ヒント: DBサーバアドレスは自動照合のキーです。同じ JDBC URL の環境は1レコードに集約されるため、開発・検証・本番でそれぞれ別レコードが自動生成される想定です。
項目リファレンス
Section titled “項目リファレンス”課題システム タブ
Section titled “課題システム タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | Table Direct | 対象クライアント(テナント) |
| 組織 | 必須 | Table Direct | 対象組織 |
| DBサーバアドレス | 必須 | 文字列(255) | データベースの JDBC URL。更新不可・自動照合キー |
| システムステータス | 必須 | リスト | 評価中(E) / 導入中(I) / 本番稼働(P) |
| 資産 | - | Search | サーバ資産(A_Asset) |
| 統計情報 | - | 文字列(60) | 障害分析用の統計情報。更新不可 |
| プロファイル | - | 文字列(4000) | 障害分析用のプロファイル情報。更新不可 |
| 有効 | 必須 | チェック | レコードが有効かどうか |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. DBサーバアドレスを画面から修正できません
Section titled “Q. DBサーバアドレスを画面から修正できません”DBAddress は IsUpdateable=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" = 評価中)を返すため、課題システムにも「評価中」がセットされます。
- 課題プロジェクト(Issue Project)の使い方
- 課題ユーザー(Issue User)の使い方
- 既知課題(Known Issue)の使い方
- 資産(Asset)の使い方
- 画面リファレンス: 課題システム
🛠 技術仕様(開発者向け)
課題システムは 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) |
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MIssueSystem.java
関連DBテーブル
Section titled “関連DBテーブル”R_IssueSystem(課題システム)
Section titled “R_IssueSystem(課題システム)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| R_IssueSystem_ID | ID(10) | PK | 課題システムID | 主キー。説明は「System creating the issue」 |
| R_IssueSystem_UU | UUID(36) | N | UUID | |
| AD_Client_ID | Table Direct | Y | クライアント | |
| AD_Org_ID | Table Direct | Y | 組織 | |
| DBAddress | String(255) | Y | DBサーバアドレス | JDBC URL。更新不可・自動照合キー |
| SystemStatus | List(1) | Y | システムステータス | E/I/P。get() で自動上書き |
| A_Asset_ID | Search | N | 資産 | 課題側と同期 |
| StatisticsInfo | String(60) | N | 統計情報 | 更新不可。get() で自動上書き |
| ProfileInfo | String(4000) | N | プロファイル | 更新不可。get() で自動上書き |
| IsActive | Yes-No(1) | Y | 有効 |
SystemStatus のリスト値
Section titled “SystemStatus のリスト値”X_R_IssueSystem の定数定義(AD_Reference_ID: 374)は次の3種です。
| 値 | 定数 | 意味 |
|---|---|---|
| E | SYSTEMSTATUS_Evaluation | 評価中(既定値) |
| I | SYSTEMSTATUS_Implementation | 導入中 |
| P | SYSTEMSTATUS_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"
ビジネスロジック
Section titled “ビジネスロジック”自動照合・自動生成(MIssueSystem.get(MIssue))
Section titled “自動照合・自動生成(MIssueSystem.get(MIssue))”issue.getDBAddress()がnullなら 即nullを返すSELECT * FROM R_IssueSystem WHERE DBAddress=?で完全一致検索(trxNameはnull)- ヒットしなければ新規インスタンスを生成し、
setDBAddress()とsetA_Asset_ID(issue.getA_Asset_ID())を実行 - ヒットの有無にかかわらず
setSystemStatus()/setStatisticsInfo()/setProfileInfo()を課題の値で上書き - 課題の資産が
0以外かつレコードの資産と異なる場合、レコード側の資産を課題の値で更新 save()に失敗した場合はnullを返す- 成功時は
issue.setR_IssueSystem_ID()を書き戻し、レコードに資産があればissue.setA_Asset_ID()も書き戻す
検索条件は
DBAddress単独で、AD_Client_IDによる絞り込みはありません。同一 DB を共有する複数テナントでは1レコードに集約されます。
課題プロジェクトとの実装差分
Section titled “課題プロジェクトとの実装差分”| 観点 | MIssueSystem | MIssueProject |
|---|---|---|
| 照合キー | DBAddress | Name |
| 資産の初期設定 | 課題の A_Asset_ID をコピー | 常に 0(引数を無視) |
| 既存レコードの資産更新 | 課題側と不一致なら更新 | 更新しない |
| ステータス・統計・プロファイル | 毎回上書き | 毎回上書き |
拡張ポイント
Section titled “拡張ポイント”このテーブルにはカラム単位の 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 は伝票型ではないため不要 }}関連プロセス
Section titled “関連プロセス”このウィンドウに紐づく標準プロセス・レポートはありません(標準メニュー未登録)。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”課題システムは JDBC URL による環境識別という発想を持ちますが、コンテナ環境やマルチテナント構成では追加の判定ロジックが必要になります。 As-Link株式会社では、稼働環境の識別と障害情報の集約を現代的な運用基盤に接続する設計をご支援します。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。