iDempiere 課題ユーザーの使い方|取引先管理 操作マニュアル・技術仕様
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
課題ユーザーは、自動課題レポート(Issue Reporting)で課題を報告した利用者を記録するマスタです。ユーザー名をキーに MIssueUser.get() が自動で検索・作成し、同じ文字列がユーザーマスタのメールアドレスと一致すれば内部ユーザーへ自動リンクします。
📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 371、標準メニュー未登録)。レコードはコード側から自動生成される想定で、テーブルは削除不可(
IsDeleteable=N)です。担当者・連絡先の管理には 取引先マスタ の連絡先タブをご利用ください。
課題ユーザーでできること
Section titled “課題ユーザーでできること”- 課題を報告したユーザー名(60文字)の記録
- ユーザー名がメールアドレスの場合、
AD_Userへの自動リンク - 説明欄への補足メモの記載
- 「有効」フラグによる無効化
- 課題(
AD_Issue)からの報告者トレース
⚠️ 注意: 「ユーザー名」は更新不可項目(
IsUpdateable=N)です。登録後に画面から変更できないため、初回登録時の値が確定値になります。
課題ユーザーは単一タブのシンプルな構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 課題ユーザー | R_IssueUser | 6項目 | ユーザー名・ユーザーマスタ参照・説明 |
基本操作手順
Section titled “基本操作手順”graph TD
A["🐞 課題が発生<br/>MIssue が生成される"] --> B{"課題の UserName が<br/>設定されているか"}
B -->|null| C["⏹ 何もしない<br/>(null を返す)"]
B -->|あり| D["🔎 R_IssueUser を<br/>UserName で検索"]
D --> E{ヒットしたか}
E -->|あり| F["📄 既存レコードを使用<br/>(更新はしない)"]
E -->|なし| G["➕ 新規レコードを作成<br/>UserName をセット"]
G --> H["📧 AD_User を EMail で照合<br/>一致すれば AD_User_ID をセット"]
H --> I["💾 保存"]
F --> J["🔗 課題側に<br/>R_IssueUser_ID を書き戻し"]
I --> J
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”iDempiere 13 標準ではメニューに登録されていません。参照が必要な場合は、システム管理者が「システム管理 > 一般ルール > システムルール > メニュー」で AD_Window_ID 371(Issue User)のメニュー項目を追加し、ロールにウィンドウアクセス権を付与します。
新規登録(手動で登録する場合)
Section titled “新規登録(手動で登録する場合)”- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- ユーザー名: 報告者を表す文字列(60文字まで。メールアドレス推奨)
- 必要に応じて ユーザー(
AD_User)を手動で選択 - 説明(255文字まで)を入力
- 「保存」をクリック
💡 ヒント: ユーザー名にメールアドレスを入れておくと、自動生成時に
AD_User.EMailと照合されて内部ユーザーへのリンクが自動で張られます。運用上はメールアドレス統一を推奨します。
項目リファレンス
Section titled “項目リファレンス”課題ユーザー タブ
Section titled “課題ユーザー タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | Table Direct | 対象クライアント(テナント) |
| 組織 | 必須 | Table Direct | 対象組織 |
| ユーザー名 | 必須 | 文字列(60) | 報告者の識別文字列。更新不可 |
| ユーザー | - | Search | AD_User への参照。メール照合で自動設定 |
| 説明 | - | 文字列(255) | 補足説明 |
| 有効 | 必須 | チェック | レコードが有効かどうか |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. ユーザー名を修正できません
Section titled “Q. ユーザー名を修正できません”UserName は IsUpdateable=N(更新不可)として定義されているため、保存後は画面から変更できません。誤登録した場合は当該レコードを無効化し、正しいユーザー名で新規登録してください。
Q. 「ユーザー」欄が自動でセットされる条件は?
Section titled “Q. 「ユーザー」欄が自動でセットされる条件は?”MIssueUser.setAD_User_ID() が SELECT AD_User_ID FROM AD_User WHERE EMail=? をユーザー名で実行し、ヒットした場合のみ設定します。ヒットしなければ空欄のままです。したがってユーザー名がメールアドレス形式で、かつ同じアドレスがユーザーマスタに登録されている必要があります。
Q. 既存の課題ユーザーの情報は自動更新されますか?
Section titled “Q. 既存の課題ユーザーの情報は自動更新されますか?”されません。MIssueUser.get() は既存レコードがヒットした場合、そのまま課題側へ ID を書き戻すだけで、save() を呼びません。新規作成時のみ保存が行われます(この点が 課題プロジェクト や 課題システム と異なります)。
Q. 課題ユーザーを削除できません
Section titled “Q. 課題ユーザーを削除できません”R_IssueUser は削除不可テーブル(IsDeleteable=N)です。課題履歴からの参照を守るための仕様のため、「有効」チェックを外して無効化してください。
Q. 取引先の連絡先(AD_User)と重複しませんか?
Section titled “Q. 取引先の連絡先(AD_User)と重複しませんか?”R_IssueUser は課題報告者を文字列ベースで受け止めるための中間マスタです。実在ユーザーが特定できた場合のみ AD_User_ID でリンクする設計なので、社外からの報告など AD_User に存在しない報告者も記録できます。
- 課題プロジェクト(Issue Project)の使い方
- 課題システム(Issue System)の使い方
- 既知課題(Known Issue)の使い方
- 取引先マスタ(Business Partner)の使い方
- 画面リファレンス: 課題ユーザー
🛠 技術仕様(開発者向け)
課題ユーザーは R_IssueUser テーブルに格納され、MIssueUser クラス(150行、X_R_IssueUser(211行)を継承)が自動照合・自動生成とメール照合を担います。
| 項目 | 値 |
|---|---|
| テーブル | R_IssueUser |
| ウィンドウ | AD_Window_ID: 371(Issue User、iDempiere 13 では無効化) |
| モデルクラス | MIssueUser(150行) / X_R_IssueUser(211行) |
| インターフェース | I_R_IssueUser |
| テーブル説明 | User who reported issues |
| アクセスレベル | 6(システム+クライアント) |
| 削除可否 | 不可(IsDeleteable=N) |
| 大量データ | はい(IsHighVolume=Y) |
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MIssueUser {
+get(MIssue) MIssueUser$
+setAD_User_ID() void
+toString() String
}
class X_R_IssueUser {
<<generated>>
+getUserName() String
+setUserName(String)
+getAD_User_ID() int
}
class PO {
<<abstract>>
}
MIssueUser --|> X_R_IssueUser
X_R_IssueUser --|> PO
MIssue --> MIssueUser : "get(issue)"
MIssueUser --> AD_User : "EMail match"
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MIssueUser.java
関連DBテーブル
Section titled “関連DBテーブル”R_IssueUser(課題ユーザー)
Section titled “R_IssueUser(課題ユーザー)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| R_IssueUser_ID | ID(10) | PK | 課題ユーザーID | 主キー |
| R_IssueUser_UU | UUID(36) | N | UUID | |
| AD_Client_ID | Table Direct | Y | クライアント | |
| AD_Org_ID | Table Direct | Y | 組織 | |
| UserName | String(60) | Y | ユーザー名 | 更新不可(IsUpdateable=N) |
| AD_User_ID | Search | N | ユーザー/連絡先 | メール照合で自動設定 |
| Description | String(255) | N | 説明 | |
| IsActive | Yes-No(1) | Y | 有効 |
erDiagram
AD_Issue ||--o| R_IssueUser : "reported by"
R_IssueUser ||--o| AD_User : "matched by EMail"
AD_Issue ||--o| R_IssueSystem : "reporting system"
AD_Issue ||--o| R_IssueProject : "reporting project"
ビジネスロジック
Section titled “ビジネスロジック”自動照合・自動生成(MIssueUser.get(MIssue))
Section titled “自動照合・自動生成(MIssueUser.get(MIssue))”issue.getUserName()がnullなら 即nullを返すSELECT * FROM R_IssueUser WHERE UserName=?で完全一致検索(trxNameはnull)- ヒットした場合: 既存インスタンスをそのまま使用(項目更新も
save()も行わない) - ヒットしない場合: 新規インスタンスを生成して
setUserName()→setAD_User_ID()→save()。保存に失敗したらnullを返す - 最後に
issue.setR_IssueUser_ID()で課題側へ ID を書き戻す
メールアドレス照合(setAD_User_ID())
Section titled “メールアドレス照合(setAD_User_ID())”public void setAD_User_ID (){ int AD_User_ID = DB.getSQLValue(null, "SELECT AD_User_ID FROM AD_User WHERE EMail=?", getUserName()); if (AD_User_ID != 0) super.setAD_User_ID (AD_User_ID);}- 引数を取らず、自身の
UserNameをメールアドレスとみなしてAD_Userを検索します - 結果が
0の場合は 何も設定しません(既存値も維持) AD_Client_IDによる絞り込みはなく、システム全体のAD_Userが検索対象です- 同一メールアドレスの
AD_Userが複数存在する場合、DB.getSQLValue()は最初の1件を返します
拡張ポイント
Section titled “拡張ポイント”このテーブルにはカラム単位の Callout は定義されていません。照合ロジックを社内ルールに合わせたい場合は、OSGi プラグインの Model Validator で補完します。
public class IssueUserLinker implements ModelValidator { @Override public String modelChange(PO po, int type) throws Exception { if (po instanceof MIssueUser && type == TYPE_BEFORE_NEW) { MIssueUser u = (MIssueUser) po; if (u.getAD_User_ID() == 0) { // 例: メールではなくログイン名(AD_User.Name)でも照合する int userId = DB.getSQLValue(po.get_TrxName(), "SELECT AD_User_ID FROM AD_User WHERE Name=? AND AD_Client_ID=?", u.getUserName(), u.getAD_Client_ID()); if (userId > 0) u.setAD_User_ID(userId); } } return null; }
@Override public String docValidate(PO po, int timing) { return null; // R_IssueUser は伝票型ではないため不要 }}関連プロセス
Section titled “関連プロセス”このウィンドウに紐づく標準プロセス・レポートはありません(標準メニュー未登録)。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”課題ユーザーのメール照合はクライアント境界を考慮しないため、マルチテナント運用では補正が必要になる場合があります。 As-Link株式会社では、テナント分離を踏まえた照合ロジックの安全な差し替えをご支援します。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。