コンテンツにスキップ

iDempiere 課題ユーザーの使い方|取引先管理 操作マニュアル・技術仕様

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

課題ユーザーは、自動課題レポート(Issue Reporting)で課題を報告した利用者を記録するマスタです。ユーザー名をキーに MIssueUser.get() が自動で検索・作成し、同じ文字列がユーザーマスタのメールアドレスと一致すれば内部ユーザーへ自動リンクします。

📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 371、標準メニュー未登録)。レコードはコード側から自動生成される想定で、テーブルは削除不可(IsDeleteable=N)です。担当者・連絡先の管理には 取引先マスタ の連絡先タブをご利用ください。

  • 課題を報告したユーザー名(60文字)の記録
  • ユーザー名がメールアドレスの場合、AD_User への自動リンク
  • 説明欄への補足メモの記載
  • 「有効」フラグによる無効化
  • 課題(AD_Issue)からの報告者トレース

⚠️ 注意: 「ユーザー名」は更新不可項目IsUpdateable=N)です。登録後に画面から変更できないため、初回登録時の値が確定値になります。

課題ユーザーは単一タブのシンプルな構成です。

タブ名テーブル項目数役割
課題ユーザーR_IssueUser6項目ユーザー名・ユーザーマスタ参照・説明
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

課題が発生 MIssue が生成される 課題の UserName が 設定されているか ⏹ 何もしない (null を返す) R_IssueUser を UserName で検索 既存レコードを使用 (更新はしない) 新規レコードを作成 UserName をセット AD_User を EMail で照合 一致すれば AD_User_ID をセット 保存 課題側に R_IssueUser_ID を書き戻し ヒットしたか あり なし

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

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

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

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

Section titled “新規登録(手動で登録する場合)”
  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • ユーザー名: 報告者を表す文字列(60文字まで。メールアドレス推奨)
  3. 必要に応じて ユーザーAD_User)を手動で選択
  4. 説明(255文字まで)を入力
  5. 保存」をクリック

💡 ヒント: ユーザー名にメールアドレスを入れておくと、自動生成時に AD_User.EMail と照合されて内部ユーザーへのリンクが自動で張られます。運用上はメールアドレス統一を推奨します。

項目名必須説明
クライアント必須Table Direct対象クライアント(テナント)
組織必須Table Direct対象組織
ユーザー名必須文字列(60)報告者の識別文字列。更新不可
ユーザー-SearchAD_User への参照。メール照合で自動設定
説明-文字列(255)補足説明
有効必須チェックレコードが有効かどうか

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

Q. ユーザー名を修正できません

Section titled “Q. ユーザー名を修正できません”

UserNameIsUpdateable=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 に存在しない報告者も記録できます。

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

課題ユーザーは 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
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"

get(issue) EMail match +get(MIssue) MIssueUser$ +setAD_User_ID() void +toString() String <> +getUserName() String +setUserName(String) +getAD_User_ID() int <> > X_R_IssueUser X_R_IssueUser --

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

カラム名必須説明備考
R_IssueUser_IDID(10)PK課題ユーザーID主キー
R_IssueUser_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント
AD_Org_IDTable DirectY組織
UserNameString(60)Yユーザー名更新不可IsUpdateable=N
AD_User_IDSearchNユーザー/連絡先メール照合で自動設定
DescriptionString(255)N説明
IsActiveYes-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"

reported by matched by EMail reporting system reporting project

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

Section titled “自動照合・自動生成(MIssueUser.get(MIssue))”
  1. issue.getUserName()null なら null を返す
  2. SELECT * FROM R_IssueUser WHERE UserName=? で完全一致検索(trxNamenull
  3. ヒットした場合: 既存インスタンスをそのまま使用(項目更新も save() も行わない)
  4. ヒットしない場合: 新規インスタンスを生成して setUserName()setAD_User_ID()save()。保存に失敗したら null を返す
  5. 最後に 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件を返します

このテーブルにはカラム単位の 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 は伝票型ではないため不要
}
}

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


課題ユーザーのメール照合はクライアント境界を考慮しないため、マルチテナント運用では補正が必要になる場合があります。 As-Link株式会社では、テナント分離を踏まえた照合ロジックの安全な差し替えをご支援します。

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

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