コンテンツにスキップ

iDempiere リクエストステータスの使い方|取引先管理 操作マニュアル・技術仕様

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

リクエストステータスは、問い合わせ・要望・障害報告の進行状態(受付中、調査中、完了など)を定義するマスタです。ステータスカテゴリという親の括りを持ち、リクエストの種類ごとに別々のステータス体系を用意できます。タイムアウト日数を設定すれば、一定期間動きのないリクエストを次のステータスへ自動遷移させることもできます。

📌 ポイント: このウィンドウは親タブが「ステータスカテゴリ」、子タブが「リクエストステータス」です。個々のステータスを登録する前に、必ずカテゴリ(ステータス体系の名前)を作成してください。

リクエストステータスでできること

Section titled “リクエストステータスでできること”
  • リクエストの進行状態(受付中・調査中・保留・完了 など)の定義
  • ステータスカテゴリによる複数のステータス体系の並行運用
  • 表示順(シーケンスNo)の制御
  • オープン/クローズ/最終クローズの属性設定
  • タイムアウト日数による次ステータスへの自動遷移
  • Web(セルフサービス)からの更新可否と、更新後ステータスの自動変更
  • カテゴリ単位・体系単位のデフォルトステータスの指定

リクエストステータスは、カテゴリを親とする2階層構成です。

タブ名テーブル項目数役割
ステータスカテゴリR_StatusCategory7項目ステータス体系の定義(名称・デフォルト)
リクエストステータスR_Status18項目個々のステータス(順序・開閉属性・自動遷移)
graph TD
    subgraph "リクエストステータス(Window ID: 349)"
        T1["🗂 ステータスカテゴリ<br/>R_StatusCategory<br/>7項目"]
        T2["&nbsp;&nbsp;└ リクエストステータス<br/>&nbsp;&nbsp;&nbsp;&nbsp;R_Status<br/>&nbsp;&nbsp;&nbsp;&nbsp;18項目"]
    end
    T1 --> T2

リクエストステータス(Window ID: 349) ステータスカテゴリ R_StatusCategory 7項目   └ リクエストステータス     R_Status     18項目

💡 ヒント: 標準のステータス体系が未整備の環境では、システムが「Standard」という名前のデフォルトカテゴリを自動生成し、カテゴリ未設定のステータスをそこに割り当てる仕組みがあります(MStatusCategory.createDefault())。

graph TD
    A["🚀 メニューから開く<br/>取引先管理 > リクエスト管理 > リクエストステータス"] --> B["➕ ステータスカテゴリを作成<br/>(名称・デフォルト)"]
    B --> C["➕ 子タブでステータスを登録<br/>(検索キー・名称・シーケンスNo)"]
    C --> D{ステータスの性質}
    D -->|進行中| E["🟢 オープンステータスに<br/>チェック"]
    D -->|完了| F["🔴 クローズステータスに<br/>チェック"]
    F --> G{再オープン禁止?}
    G -->|はい| H["🔒 最終クローズにチェック"]
    G -->|いいえ| I["💾 保存"]
    E --> J{放置時に自動遷移?}
    J -->|はい| K["⏱ タイムアウト日数と<br/>次のステータスを設定"]
    J -->|いいえ| I
    K --> I
    H --> I
    I --> L["✅ リクエスト画面で<br/>ステータスとして選択可能に"]

メニューから開く 取引先管理 > リクエスト管理 > リクエストステータス ステータスカテゴリを作成 (名称・デフォルト) 子タブでステータスを登録 (検索キー・名称・シーケンスNo) オープンステータスに チェック クローズステータスに チェック 最終クローズにチェック 保存 ⏱ タイムアウト日数と 次のステータスを設定 リクエスト画面で ステータスとして選択可能に ステータスの性質 再オープン禁止? 放置時に自動遷移? 進行中 完了 はい いいえ

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

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

メニューから「取引先管理 > リクエスト管理 > リクエストステータス」を開きます(AD_Window_ID: 349)。

新規登録(ステータスカテゴリ)

Section titled “新規登録(ステータスカテゴリ)”
  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称(必須): ステータス体系の名称(例: 標準サポート社内改善要望
    • 説明 / コメント: 用途の説明
    • デフォルト: 既定の体系として使う場合にチェック
  3. 保存」をクリック

新規登録(リクエストステータス)

Section titled “新規登録(リクエストステータス)”
  1. カテゴリを選択した状態で「リクエストステータス」タブへ移動
  2. 新規」で個々のステータスを登録:
    • 検索キー(必須): ステータスコード(例: OPENINVESTIGATINGCLOSED
    • 名称(必須): 表示名(例: 受付中
    • シーケンスNo(必須): 表示順(小さい値が先)
    • オープンステータス / クローズステータス: 状態属性
    • 最終クローズ: 再オープンを禁止する場合にチェック
    • デフォルト: このカテゴリの初期ステータスにする場合にチェック
  3. 必要に応じて自動化項目を設定:
    • ウェブ更新可能: Web からの更新を許可
    • ステータス変更: Web から更新された後に自動で変わる先のステータス
    • タイムアウト日数: 何日間動きがなければ遷移するか
    • 次のステータス: タイムアウト後の遷移先
  4. 保存」をクリック

⚠️ 注意: 保存時に整合性の自動補正が働きます。オープンとクローズの両方にチェックするとクローズが外れ、クローズでないのに最終クローズにするとその指定が外れます。またウェブ更新可能でない場合の「ステータス変更」、タイムアウト日数が0の場合の「次のステータス」は自動的にクリアされます。

項目名必須説明
名称必須文字列(60)ステータス体系の名称
説明-文字列(255)短い説明
コメント-テキスト(2000)運用上のヒント
デフォルト必須チェック既定の体系として使用
有効必須チェック有効フラグ

リクエストステータスタブ(主要項目)

Section titled “リクエストステータスタブ(主要項目)”
項目名必須説明
ステータスカテゴリ必須選択親カテゴリ(自動セット)
シーケンスNo必須整数表示順。小さい値が先
検索キー必須文字列(40)ステータスコード。一意
名称必須文字列(60)表示名
説明-文字列(255)短い説明
コメント-テキスト(2000)運用ヒント
デフォルト必須チェックこのカテゴリの初期ステータス
オープンステータス必須チェック進行中を表す
クローズステータス必須チェック完了を表す(既定値 N)
最終クローズ必須チェック再オープン禁止(既定値 N)
ウェブ更新可能必須チェックWeb からの更新を許可
ステータス変更-選択Web 更新後に自動で変わる先
タイムアウト日数-整数自動遷移までの日数(既定値 0)
次のステータス-選択タイムアウト後の遷移先

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

graph TD
    A["リクエスト作成"] --> B["デフォルトステータス<br/>(IsDefault=Y)"]
    B --> C["担当者が手動で変更"]
    B --> D["Web から更新<br/>→ ステータス変更で自動遷移"]
    B --> E["放置<br/>→ タイムアウト日数経過"]
    E --> F["リクエストプロセッサが<br/>次のステータスへ自動遷移"]
    C --> G["クローズステータス"]
    D --> G
    F --> G
    G --> H{"最終クローズ?"}
    H -->|はい| I["再オープン不可"]
    H -->|いいえ| C

リクエスト作成 デフォルトステータス (IsDefault=Y) 担当者が手動で変更 Web から更新 → ステータス変更で自動遷移 放置 → タイムアウト日数経過 リクエストプロセッサが 次のステータスへ自動遷移 クローズステータス 最終クローズ? 再オープン不可 はい いいえ

Q. オープンとクローズの両方にチェックできますか?

Section titled “Q. オープンとクローズの両方にチェックできますか?”

できません。MStatus.beforeSave() に「オープンかつクローズの場合はクローズを false にする」という補正処理があり、保存時に自動的にクローズが外れます。エラーにはならず黙って補正されるため、保存後の状態を必ず確認してください。

Q. 最終クローズにチェックしたのに外れてしまいます

Section titled “Q. 最終クローズにチェックしたのに外れてしまいます”

「最終クローズ」は「クローズステータス」であることが前提です。beforeSave() は最終クローズがチェックされていてクローズがチェックされていない場合、最終クローズを false に戻します。まずクローズステータスにチェックしてから最終クローズを設定してください。

Q. タイムアウトによる自動遷移はどう動きますか?

Section titled “Q. タイムアウトによる自動遷移はどう動きますか?”

サーバー側のリクエストプロセッサが定期的に処理します。対象は「タイムアウト日数が0より大きく」「次のステータスが設定されている」ステータスのリクエストで、最終アクション日 + タイムアウト日数 < 現在日 を満たすものです。該当したリクエストは結果欄に遷移内容が記録され、ステータスが次のステータスへ更新されます。

Q. 「次のステータス」や「ステータス変更」を設定したのに消えます

Section titled “Q. 「次のステータス」や「ステータス変更」を設定したのに消えます”

beforeSave() の補正によるものです。タイムアウト日数が0のときは「次のステータス」がクリアされ、ウェブ更新可能でないときは「ステータス変更」がクリアされます。先にタイムアウト日数やウェブ更新可能を設定してから、遷移先を指定してください。

Q. デフォルトステータスはどう決まりますか?

Section titled “Q. デフォルトステータスはどう決まりますか?”

カテゴリ配下のステータスのうち、有効かつ「デフォルト」がチェックされた最初のものが選ばれます(MStatusCategory.getDefaultR_Status_ID())。該当がない場合は、有効なステータスの先頭が使われ、それもなければ 0(未設定)となります。

Q. ステータスカテゴリは削除できますか?

Section titled “Q. ステータスカテゴリは削除できますか?”

R_StatusCategoryIsDeleteable=N のテーブルで、標準では削除できません。使わなくなった体系は「有効」チェックを外して無効化してください。

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

リクエストステータスは2階層のマスタウィンドウで、親が R_StatusCategory、子が R_Status です。モデルクラスは MStatusCategory(302行)と MStatus(306行)で、いずれも ImmutablePOSupport を実装しキャッシュ参照に対応します。Document 型ではありませんが、MStatusbeforeSave() にフラグ整合性の補正ロジックを持ちます。

テーブルアクセスレベル削除可大量データビュー
R_StatusCategory6(システム+クライアント)NNN
R_Status6(システム+クライアント)YNN
classDiagram
    class MStatusCategory {
        +getDefault(ctx) MStatusCategory
        +createDefault(ctx) MStatusCategory
        +get(ctx, R_StatusCategory_ID) MStatusCategory
        +getStatus(boolean reload) MStatus[]
        +getDefaultR_Status_ID() int
        +markImmutable() MStatusCategory
    }
    class MStatus {
        +getDefault(ctx, R_RequestType_ID) MStatus
        +getClosed(ctx) MStatus[]
        +get(ctx, R_Status_ID) MStatus
        #beforeSave(boolean newRecord) boolean
        +markImmutable() MStatus
    }
    class X_R_StatusCategory {
        <<generated>>
    }
    class X_R_Status {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MStatusCategory --|> X_R_StatusCategory
    MStatus --|> X_R_Status
    X_R_StatusCategory --|> PO
    X_R_Status --|> PO
    MStatusCategory --> MStatus : has many
    MRequest --> MStatus : getStatus()

+getDefault(ctx) MStatusCategory +createDefault(ctx) MStatusCategory +get(ctx, R_StatusCategory_ID) MStatusCategory +getStatus(boolean reload) MStatus[] +getDefaultR_Status_ID() int +markImmutable() MStatusCategory +getDefault(ctx, R_RequestType_ID) MStatus +getClosed(ctx) MStatus[] +get(ctx, R_Status_ID) MStatus #beforeSave(boolean newRecord) boolean +markImmutable() MStatus <> <> > X_R_StatusCategory MStatus -- > PO X_R_Status --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MStatus.java / MStatusCategory.java 関連サーバー処理: org.adempiere.server/src/main/server/org/compiere/server/RequestProcessor.java

R_StatusCategory(ステータスカテゴリ)

Section titled “R_StatusCategory(ステータスカテゴリ)”
カラム名必須説明備考
R_StatusCategory_IDIDPKカテゴリID主キー
AD_Client_IDTable DirectYテナント
AD_Org_IDTable DirectY組織
NameString(60)Y名称識別子(IsIdentifier=Y)
DescriptionString(255)N説明
HelpText(2000)Nコメント/ヒント
IsDefaultYes-NoYデフォルト既定体系の判定に使用
IsActiveYes-NoY有効
R_StatusCategory_UUUUIDNUUID

R_Status(リクエストステータス)

Section titled “R_Status(リクエストステータス)”
カラム名必須説明備考
R_Status_IDIDPKステータスID主キー
R_StatusCategory_IDTable DirectYステータスカテゴリFKIsParent=Y
ValueString(40)Y検索キー一意
NameString(60)Y名称識別子
SeqNoIntegerYシーケンスNo識別子。小さい順
DescriptionString(255)N説明
HelpText(2000)Nコメント/ヒント
IsDefaultYes-NoYデフォルト
IsOpenYes-NoYオープンステータス
IsClosedYes-NoYクローズステータス既定値 N
IsFinalCloseYes-NoY最終クローズ既定値 N。再オープン不可
IsWebCanUpdateYes-NoYウェブ更新可能
Update_Status_IDTableNステータス変更Web更新後の自動遷移先
TimeoutDaysIntegerNタイムアウト日数既定値 0
Next_Status_IDTableN次のステータスタイムアウト後の遷移先
IsActiveYes-NoY有効
erDiagram
    R_StatusCategory ||--o{ R_Status : "contains"
    R_Status ||--o{ R_Request : "current status"
    R_Status }o--o| R_Status : "Next_Status_ID"
    R_Status }o--o| R_Status : "Update_Status_ID"
    R_Request ||--o{ R_RequestUpdate : "update history"

current status update history

保存前に4つの補正が行われます。例外は投げず、値を書き換える設計です。

条件補正内容
isOpen() かつ isClosed()IsClosed = false
isFinalClose() かつ !isClosed()IsFinalClose = false
!isWebCanUpdate() かつ Update_Status_ID != 0Update_Status_ID = 0
TimeoutDays == 0 かつ Next_Status_ID != 0Next_Status_ID = 0

デフォルトカテゴリの取得と自動生成

Section titled “デフォルトカテゴリの取得と自動生成”

MStatusCategory.getDefault(ctx) は次の SQL でデフォルト体系を取得します。

SELECT * FROM R_StatusCategory
WHERE AD_Client_ID in (0, ?) AND IsDefault='Y'
ORDER BY AD_Client_ID DESC

AD_Client_ID DESC の並び順により、テナント固有の定義がシステム定義(AD_Client_ID=0)より優先されます。

createDefault(ctx) は「Standard」という翻訳メッセージ名でカテゴリを作成し、さらにカテゴリ未設定(R_StatusCategory_ID IS NULL)のステータスを一括で新カテゴリへ割り当てます。

MStatusCategory.getDefaultR_Status_ID() の優先順位:

  1. カテゴリ配下で有効かつ IsDefault=Y の最初のステータス
  2. 該当なしの場合、有効なステータスの先頭
  3. それもなければ 0

タイムアウト自動遷移(RequestProcessor)

Section titled “タイムアウト自動遷移(RequestProcessor)”
flowchart TD
    A["RequestProcessor 起動"] --> B["対象リクエスト抽出<br/>TimeoutDays > 0 かつ<br/>Next_Status_ID > 0 かつ<br/>DateLastAction + TimeoutDays < 現在日"]
    B --> C["ステータスと次ステータスを取得"]
    C --> D["結果欄に<br/>RequestStatusTimeout メッセージを記録<br/>(旧ステータス → 新ステータス)"]
    D --> E["R_Status_ID を Next_Status_ID に更新"]
    E --> F["保存・件数カウント"]

RequestProcessor 起動 対象リクエスト抽出 TimeoutDays > 0 かつ Next_Status_ID > 0 かつ DateLastAction + TimeoutDays < 現在日 ステータスと次ステータスを取得 結果欄に RequestStatusTimeout メッセージを記録 (旧ステータス → 新ステータス) R_Status_ID を Next_Status_ID に更新 保存・件数カウント

MRequest の Web 更新処理では、現在ステータスの Update_Status_ID が 0 より大きい場合に、リクエストのステータスをその値へ設定します。セルフサービスからの返信で自動的に「顧客回答待ち」から「対応中」へ戻す、といった運用が可能です。

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”
public class CustomRequestStatusValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MStatus) {
MStatus st = (MStatus) po;
if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) {
// 例: タイムアウト日数の上限を制限する
if (st.getTimeoutDays() > 90) {
throw new AdempiereException("タイムアウト日数は90日以内にしてください");
}
}
}
return null;
}
}

「特定のステータスから特定のステータスへしか遷移できない」といった遷移制御は標準にありません。R_RequestTYPE_BEFORE_CHANGEis_ValueChanged(COLUMNNAME_R_Status_ID) を判定し、旧値と新値の組み合わせを検証する Model Validator を実装します。

R_Status / R_StatusCategory のカラムには標準 Callout が設定されていません。フラグ整合性はモデル層の beforeSave() で担保されています。

プロセス/サーバー処理説明
リクエストプロセッサタイムアウト日数に基づくステータス自動遷移、通知処理を担うサーバープロセス

ステータス設計はサポート業務のSLAそのものです。遷移制約・エスカレーション通知・SLA違反レポートなどは、コアを改変せず Model Validator とカスタムプロセスで実装できます。

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

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