Skip to content

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

This content is not available in your language yet.

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

既知課題は、システムで発生することが判明している不具合・エラーを台帳化するウィンドウです。ログエンジン名・クラス名・メソッド名・行番号という発生箇所の座標を保持し、同じエラーが再発したときに「既知の課題」として識別できるようにします。

📌 ポイント: このウィンドウは iDempiere 13 標準では無効化されています(AD_Window_ID: 369、標準メニュー未登録)。旧 Compiere の自動課題レポート(Issue Reporting)基盤の一部で、レポート送信を担う MIssue.report() は iDempiere 13 で @Deprecated(since="13", forRemoval=true) かつ未実装(常に null を返す)となっています。新規の業務設計では リクエスト(Request) をご利用ください。

  • 判明済みの不具合をリリース番号(ReleaseNo)単位で台帳化
  • 課題要約(IssueSummary)による一覧上の識別
  • ログエンジン・クラス・メソッド・行番号による発生箇所の特定情報の記録
  • 課題ステータスマスタ(R_IssueStatus)による進捗区分の付与
  • 「現在ステータス」欄(2000文字)への調査経過の自由記述
  • 推奨対処(R_IssueRecommendation)および リクエスト との紐づけ

⚠️ 注意: 「リリースNo」と「課題要約」は必須項目です。発生箇所(クラス・メソッド・行番号)はすべて任意のため、空欄でも保存できます。

既知課題は単一タブの台帳型ウィンドウです。

タブ名テーブル項目数役割
既知課題R_IssueKnown15項目課題の要約・発生箇所・ステータス・関連レコード
graph TD
    A["🐞 エラー発生<br/>ログにクラス・メソッド・行番号が出力"] --> B["🔎 既知課題を検索<br/>(クラス名・メソッド名で照合)"]
    B --> C{既に登録済み?}
    C -->|あり| D["📝 現在ステータスを更新<br/>(調査経過を追記)"]
    C -->|なし| E["➕ 新規登録<br/>リリースNo・課題要約を入力"]
    E --> F["🧭 発生箇所を記録<br/>ログエンジン / クラス / メソッド / 行番号"]
    F --> G["🏷 課題ステータスを選択<br/>(R_IssueStatus マスタ)"]
    G --> H["🔗 推奨対処・リクエストを紐づけ"]
    D --> I["💾 保存"]
    H --> I

エラー発生 ログにクラス・メソッド・行番号が出力 既知課題を検索 (クラス名・メソッド名で照合) 現在ステータスを更新 (調査経過を追記) 新規登録 リリースNo・課題要約を入力 発生箇所を記録 ログエンジン / クラス / メソッド / 行番号 課題ステータスを選択 (R_IssueStatus マスタ) 推奨対処・リクエストを紐づけ 保存 既に登録済み? あり なし

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

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

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

💡 ヒント: 先に 課題ステータス で進捗区分を登録しておくと、既知課題の「課題ステータス」項目から選択できるようになります。

  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • リリースNo: 対象リリースの内部リリース番号(10文字まで。例: 13
    • 課題要約: 課題の1行要約(255文字まで)
  3. 発生箇所を記録(任意・いずれも60文字、行番号は整数):
    • ログエンジン: CLogger のロガー名
    • クラス: 例外が発生したクラス名
    • メソッド: 例外が発生したメソッド名
    • 行番号: スタックトレース上の行番号
  4. 課題ステータスを選択し、必要に応じて 現在ステータス(2000文字)に経過を記述
  5. 推奨課題R_IssueRecommendation)や リクエスト を紐づけ
  6. 保存」をクリック

📌 ポイント: 発生箇所の4項目(ログエンジン・クラス・メソッド・行番号)は、自動収集された課題(AD_Issue)と突き合わせるためのキー情報です。エラーログからそのまま転記してください。

項目名必須説明
クライアント必須Table Direct対象クライアント(テナント)
組織必須Table Direct対象組織
リリースNo必須文字列(10)内部リリース番号
課題要約必須文字列(255)課題の要約(一覧の識別子)
説明-文字列(255)補足説明
ログエンジン-文字列(60)ロガー名(CLogger のロガー)
クラス-文字列(60)発生元クラス名
メソッド-文字列(60)発生元メソッド名
行番号-整数発生行
課題ステータス-Table DirectR_IssueStatus への参照
現在ステータス-テキスト(2000)現況の自由記述
課題推薦-SearchR_IssueRecommendation への参照
リクエスト-SearchR_Request への参照
処理中-チェック処理中フラグ
有効必須チェックレコードが有効かどうか

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

Q. 既知課題は自動で登録されますか?

Section titled “Q. 既知課題は自動で登録されますか?”

iDempiere 13 標準では自動登録されません。課題の自動レポート送信を担っていた MIssue.report() は 13 で非推奨(forRemoval=true)となり、実装が空(常に null を返す)になっています。既知課題は手入力での台帳運用が前提です。

「クライアント」「組織」「リリースNo」「課題要約」「有効」の5つです。発生箇所(ログエンジン・クラス・メソッド・行番号)とステータス系はすべて任意のため、要約だけでも登録できます。

Q. 「課題ステータス」と「現在ステータス」の違いは何ですか?

Section titled “Q. 「課題ステータス」と「現在ステータス」の違いは何ですか?”

「課題ステータス」(R_IssueStatus_ID)は 課題ステータスマスタ を参照する選択項目で、集計・絞り込みに使えます。「現在ステータス」(IssueStatus)は 2000 文字のテキスト項目で、調査経過を自由に書くための欄です。両者は別カラムのため、併用してください。

Q. 登録件数が増えても大丈夫ですか?

Section titled “Q. 登録件数が増えても大丈夫ですか?”

R_IssueKnown は大量データテーブル(IsHighVolume=Y)として定義されています。そのため一覧を開いた際は、iDempiere が自動で検索ダイアログを先に表示します。リリースNo やクラス名で絞り込んでから開いてください。

Q. 既知課題を削除できますか?

Section titled “Q. 既知課題を削除できますか?”

R_IssueKnown は削除可能テーブル(IsDeleteable=Y)です。ただし過去の調査履歴が失われるため、通常は「有効」チェックを外して無効化する運用を推奨します。

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

既知課題は R_IssueKnown テーブルに格納されます。専用のビジネスロジッククラス(M クラス)は存在せず、AD から自動生成された X_R_IssueKnown(395行)のみが提供されます。自動収集側の課題本体は別テーブル AD_IssueMIssue・476行)で、既知課題はその参照先カタログという位置づけです。

項目
テーブルR_IssueKnown
ウィンドウAD_Window_ID: 369(Known Issue、iDempiere 13 では無効化)
モデルクラスX_R_IssueKnown(生成クラスのみ・395行)
インターフェースI_R_IssueKnown
アクセスレベル6(システム+クライアント)
削除可否可(IsDeleteable=Y
大量データはい(IsHighVolume=Y
classDiagram
    class X_R_IssueKnown {
        <<generated>>
        +getIssueSummary() String
        +getReleaseNo() String
        +getSourceClassName() String
        +getSourceMethodName() String
        +getLineNo() int
        +getR_IssueStatus_ID() int
    }
    class MIssue {
        +create(LogRecord) MIssue
        +process() String
        +createAnswer() String
        +getSystemStatus() String
        +report() String
    }
    class PO {
        <<abstract>>
    }
    X_R_IssueKnown --|> PO
    MIssue --|> X_AD_Issue
    X_AD_Issue --|> PO
    MIssue --> X_R_IssueKnown : refers known issue
    X_R_IssueKnown --> X_R_IssueStatus : R_IssueStatus_ID

<> +getIssueSummary() String +getReleaseNo() String +getSourceClassName() String +getSourceMethodName() String +getLineNo() int +getR_IssueStatus_ID() int +create(LogRecord) MIssue +process() String +createAnswer() String +getSystemStatus() String +report() String <> > PO MIssue --

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

カラム名必須説明備考
R_IssueKnown_IDID(10)PK既知課題ID主キー
R_IssueKnown_UUUUID(36)NUUID
AD_Client_IDTable DirectYクライアント
AD_Org_IDTable DirectY組織
ReleaseNoString(10)YリリースNo識別子
IssueSummaryString(255)Y課題要約識別子
DescriptionString(255)N説明
LoggerNameString(60)Nログエンジン名
SourceClassNameString(60)N発生元クラス
SourceMethodNameString(60)N発生元メソッド
LineNoInteger(10)N行番号
R_IssueStatus_IDTable DirectN課題ステータスR_IssueStatus 参照
IssueStatusText(2000)N現在ステータス自由記述
R_IssueRecommendation_IDSearchN課題推薦R_IssueRecommendation 参照
R_Request_IDSearchNリクエストR_Request 参照
ProcessingYes-No(1)N処理中
IsActiveYes-No(1)Y有効
erDiagram
    R_IssueKnown ||--o| R_IssueStatus : "status"
    R_IssueKnown ||--o| R_IssueRecommendation : "recommendation"
    R_IssueKnown ||--o| R_Request : "linked request"
    AD_Issue ||--o| R_IssueKnown : "matched known issue"
    AD_Issue ||--o| R_IssueSystem : "reporting system"
    AD_Issue ||--o| R_IssueProject : "reporting project"
    AD_Issue ||--o| R_IssueUser : "reporting user"

linked request matched known issue reporting system reporting project reporting user

R_IssueKnown 自体には M クラスが無く、保存時のロジックは基底クラス PO の標準処理のみです。関連する課題本体 MIssue 側には次のメソッドが定義されています(MIssue.java・476行)。

メソッド役割
create(LogRecord)Java の LogRecord から課題レコードを生成
create(Properties, String hexInput)HEX エンコードされた入力から課題を復元
setIssueSummary(String) / setStackTrace(String) / setErrorTrace(String)要約・スタックトレースの設定
addComments(String) / setComments(String)コメントの追記・設定
process() / createAnswer()課題の処理・回答文の生成
getRequest() / getRequestDocumentNo()紐づくリクエストの取得
getSystemStatus()未設定時は SYSTEMSTATUS_Evaluation"E")を返す
report()非推奨・未実装@Deprecated(since="13", forRemoval=true)、常に null

report() が空実装であることが、この一連の課題レポート機能が iDempiere 13 で無効化されている技術的な根拠です。

このテーブルにはカラム単位の Callout は定義されていません。既知課題の照合を自動化したい場合は、OSGi プラグインの Model Validator でエラー捕捉時に突き合わせる実装が有効です。

public class KnownIssueMatcher implements ModelValidator {
@Override
public String modelChange(PO po, int type) throws Exception {
if (po instanceof MIssue && type == TYPE_BEFORE_NEW) {
MIssue issue = (MIssue) po;
// 例: クラス名・メソッド名で既知課題を照合し、既知なら通知を抑止
String sql = "SELECT R_IssueKnown_ID FROM R_IssueKnown"
+ " WHERE SourceClassName=? AND SourceMethodName=? AND IsActive='Y'";
int knownId = DB.getSQLValue(po.get_TrxName(), sql,
issue.getSourceClassName(), issue.getSourceMethodName());
if (knownId > 0) {
// 既知課題として扱う処理
}
}
return null;
}
@Override
public String docValidate(PO po, int timing) {
return null; // R_IssueKnown は伝票型ではないため不要
}
}

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


既知課題の台帳は、エラーログ監視や社内チケットシステムと連携させることで初めて価値が出ます。 As-Link株式会社では、Model Validator によるエラー捕捉と外部チケット連携の実装をご支援します。

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

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