Skip to content

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

This content is not available in your language yet.

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

リクエストは、取引先からの問い合わせ・クレーム・社内タスクなど「対応が必要な案件」を登録し、担当者・ステータス・期限を付けて追跡するウィンドウです。CRM(顧客対応管理)とヘルプデスク・課題管理の中核であり、対応の経緯がすべて更新履歴として残ります。

📌 ポイント: このウィンドウに表示されるのは自分に割り当てられたリクエストです。組織内の全リクエストを横断的に確認したい管理者は リクエスト(すべて) ウィンドウを使用します。

  • 問い合わせ・クレーム等の案件登録(リクエストタイプ・カテゴリ・グループで分類)
  • 社内担当者・ロールへの割当とエスカレーション管理
  • ステータス(オープン/クローズ)と次回対応日付による期限管理
  • 対応結果の記録と更新履歴の自動蓄積(更新タブ・履歴タブ)
  • 標準回答・メールテンプレートを使った返信文の呼び出し
  • 受注伝票・請求書・品目・資産・プロジェクト等の関連伝票との紐付け
  • 更新通知の受信者登録(更新通知タブ)

リクエストは親子4タブ構成です。

タブ名テーブル項目数役割
リクエストR_Request約62項目案件の本体(タイプ・担当・ステータス・対応結果・関連伝票)
更新R_RequestUpdate約10項目対応結果の更新履歴(誰がいつ何を回答したか)
履歴R_RequestAction約40項目変更前の旧値の履歴(担当・ステータス等の変更記録)
更新通知R_RequestUpdates約6項目更新通知を受け取るユーザーの一覧

💡 ヒント: 「更新」タブは対応結果(Result)の時系列ログ、「履歴」タブはフィールド変更の旧値ログという役割分担です。どちらもシステムが自動で記録するため、手入力は基本的にリクエストタブだけで完結します。

graph TD
    A["🚀 メニューから開く<br/>取引先管理 > リクエスト"] --> B["➕ 新規で基本情報を入力<br/>(リクエストタイプ・サマリ・優先度)"]
    B --> C["👤 担当を設定<br/>(社内担当者・ロール・取引先)"]
    C --> D["🔗 必要に応じて関連伝票を紐付け<br/>(受注・請求書・品目・資産等)"]
    D --> E["💾 保存<br/>(ステータス・期限タイプは自動設定)"]
    E --> F["📝 対応のたびに対応結果を入力して保存<br/>(更新タブに履歴が自動蓄積)"]
    F --> G{解決した?}
    G -->|Yes| H["✅ ステータスをクローズ系に変更<br/>(クローズ日付が自動セット)"]
    G -->|No| F

メニューから開く 取引先管理 > リクエスト 新規で基本情報を入力 (リクエストタイプ・サマリ・優先度) 担当を設定 (社内担当者・ロール・取引先) 必要に応じて関連伝票を紐付け (受注・請求書・品目・資産等) 保存 (ステータス・期限タイプは自動設定) 対応のたびに対応結果を入力して保存 (更新タブに履歴が自動蓄積) ステータスをクローズ系に変更 (クローズ日付が自動セット) 解決した?

メニューから「取引先管理 > リクエスト」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • リクエストタイプ: 問い合わせ・クレーム等の種別(必須。ステータス体系と請求可否がタイプで決まる)
    • サマリ: 案件の要約(必須)
    • 優先度: 高・中・低(既定は中)
    • 機密レベル: 公開範囲の指定
  3. 担当・取引先を設定:
    • 社内担当者: 既定でログインユーザーがセットされる
    • 取引先 / ユーザー: 依頼元の取引先と担当者
  4. 保存」をクリック。伝票番号・ステータス・期限タイプが自動採番/自動設定されます
  5. 対応のたびに「対応結果」に内容を入力して保存すると、更新タブに履歴が追加されます

⚠️ 注意: 「次回対応日付」はリクエストタイプに自動期限日数(Auto Due Date Days)が設定されていると保存時に自動セットされます。期限超過の管理はこの日付と期限タイプ(予定/期限/超過)で行います。

リクエストタブの主要項目です。全項目一覧はリファレンス参照

項目名必須説明
伝票番号必須文字列リクエストの管理番号(自動採番)
リクエストタイプ必須選択種別(問い合わせ・クレーム等)。ステータス体系を決定
グループ / カテゴリ-選択分類用のグループ・カテゴリ
ステータス-選択案件の状態(未設定なら既定値が自動セット)
期限タイプ必須リスト次回対応の状態(予定/期限/超過)。自動更新
優先度 / ユーザー優先度必須/-リスト社内の優先度と依頼者側の重要度
サマリ必須テキスト案件の要約
機密レベル必須リスト公開範囲(公開情報が既定)
社内担当者-選択対応担当者(既定=ログインユーザー)
ロール-選択担当ロール(個人でなくロール単位の割当)
次回対応日付-日時次のアクション期限
標準回答-選択選択すると定型文が対応結果へコピーされる
メールテンプレート-選択選択するとテンプレート本文が対応結果へコピーされる
対応結果-テキスト今回の対応内容。保存時に更新タブへ記録
取引先 / ユーザー-検索依頼元の取引先・担当者
受注伝票・売上請求伝票 等-検索関連する業務伝票への紐付け
リクエスト金額必須金額案件に紐づく金額(既定0)
エスカレート済必須チェックエスカレーション済みかどうか

Q. 対応結果に書いた内容はどこに残りますか?

Section titled “Q. 対応結果に書いた内容はどこに残りますか?”

保存すると R_RequestUpdate(更新タブ)に1レコードとして自動記録されます。リクエストタブの対応結果欄は「今回の入力欄」で、過去の対応は更新タブで時系列に確認します。最新の内容は「最新履歴情報」にも表示されます。

Q. ステータスをクローズにすると何が起きますか?

Section titled “Q. ステータスをクローズにすると何が起きますか?”

ステータスのカテゴリ定義に従い、保存時に自動処理されます。クローズ系ステータスなら「クローズ日付」が自動セットされ、最終クローズなら「処理済み」フラグが立ちます。逆にオープン系へ戻すとクローズ日付はクリアされ、開始日付が未設定なら現在日時がセットされます。

Q. リクエストタイプを変更したらステータスがリセットされました。なぜですか?

Section titled “Q. リクエストタイプを変更したらステータスがリセットされました。なぜですか?”

ステータスはリクエストタイプごとのステータスカテゴリに属します。タイプ変更後のカテゴリに現在のステータスが属していない場合、保存時に既定ステータスへ自動リセットされます(MRequest.beforeSave の仕様)。

Q. 社内担当者を空欄に戻せません。

Section titled “Q. 社内担当者を空欄に戻せません。”

仕様です。MRequest.setSalesRep_ID は担当者の 0(未設定)への変更を無視します。担当を外すのではなく、別の担当者またはロールへ付け替えてください。

Q. 更新通知は誰に送られますか?

Section titled “Q. 更新通知は誰に送られますか?”

更新通知タブに登録したユーザーに加え、社内担当者などの関係者が対象です。通知の受信者全体(直接/間接)を確認するには リクエスト(すべて) の「受取人更新」タブを使用します。

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

リクエストは R_Request テーブルを親とする4テーブル構成です。MRequest クラス(1,208行)が保存時の自動設定・履歴生成を担い、MRequestUpdate(129行)が更新履歴、MRequestAction(182行)が旧値履歴を表します。DocAction/DocStatus を持たないため伝票処理(完了・取消)はありません。

テーブルモデルクラス行数役割
R_RequestMRequest1,208リクエスト本体
R_RequestUpdateMRequestUpdate129対応結果の更新履歴
R_RequestActionMRequestAction182変更前旧値の履歴
R_RequestUpdatesX_R_RequestUpdates のみ(生成クラス)-更新通知の受信者
classDiagram
    class MRequest {
        +getUpdates(confidentialType) MRequestUpdate[]
        +getActions() MRequestAction[]
        +getRequestType() MRequestType
        +getMailTag() String
        +getR_Request_ID(mailText)$ int
        +doClose() void
        +webUpdate(result) boolean
        #beforeSave(newRecord) boolean
        #afterSave(newRecord, success) boolean
    }
    class MRequestUpdate {
        +MRequestUpdate(MRequest parent)
        +isNewInfo() boolean
        #beforeSave(newRecord) boolean
    }
    class MRequestAction {
        +addNullColumn(columnName) void
        +getChangesHTML() String
    }
    class X_R_Request {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MRequest --|> X_R_Request
    X_R_Request --|> PO
    MRequest --> MRequestUpdate : afterSave で生成
    MRequest --> MRequestAction : 旧値履歴
    MRequest --> MRequestType : ステータス体系/自動期限

+getUpdates(confidentialType) MRequestUpdate[] +getActions() MRequestAction[] +getRequestType() MRequestType +getMailTag() String +getR_Request_ID(mailText)$ int +doClose() void +webUpdate(result) boolean #beforeSave(newRecord) boolean #afterSave(newRecord, success) boolean +MRequestUpdate(MRequest parent) +isNewInfo() boolean #beforeSave(newRecord) boolean +addNullColumn(columnName) void +getChangesHTML() String <> <> > X_R_Request X_R_Request --

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

R_Request(リクエスト)主要カラム

Section titled “R_Request(リクエスト)主要カラム”
カラム名必須説明備考
R_Request_IDIDPKリクエストID主キー
DocumentNoString(30)Y伝票番号自動採番
R_RequestType_IDTableDirectYリクエストタイプcallout: CalloutRequest.type
R_Group_ID / R_Category_IDTableDirectNグループ/カテゴリ
R_Status_IDTableDirectNステータス未設定時 beforeSave で既定値
DueTypeListY期限タイプ既定 5、beforeSave で再計算
Priority / PriorityUserListY/N優先度/ユーザー優先度既定 5(中)
SummaryText(2000)Yサマリ
ConfidentialType / ConfidentialTypeEntryListY機密レベル既定 C
SalesRep_IDTableN社内担当者既定 @#AD_User_ID@、0 への変更は無視
AD_Role_IDTableDirectN担当ロール既定 -1
DateNextActionDate+TimeN次回対応日付タイプの AutoDueDateDays で自動設定
R_StandardResponse_IDTableDirectN標準回答callout: CalloutRequest.copyResponse
R_MailText_IDTableDirectNメールテンプレートcallout: CalloutRequest.copyMail
ResultText(2000)N対応結果保存時に R_RequestUpdate へ
StartDate / CloseDateDate+TimeN開始/クローズ日付ステータスにより自動設定
C_BPartner_ID / AD_User_IDSearch/TableDirectN取引先/ユーザー
C_Order_ID, C_Invoice_ID, M_Product_ID, A_Asset_ID, M_InOut_ID, C_Payment_ID, M_RMA_ID, C_Project_IDSearch 等N関連伝票参照
RequestAmtAmountYリクエスト金額
IsInvoiced / QtySpent / QtyInvoiced--請求連携タイプの請求可否に追従
ProcessedYesNoY処理済み最終クローズで true
erDiagram
    R_RequestType ||--o{ R_Request : "type / status set"
    R_Request ||--o{ R_RequestUpdate : "updates"
    R_Request ||--o{ R_RequestAction : "old values"
    R_Request ||--o{ R_RequestUpdates : "notify recipients"
    C_BPartner ||--o{ R_Request : "requester"
    AD_User ||--o{ R_Request : "sales rep"
    R_MailText ||--o{ R_Request : "mail template"

type / status set old values notify recipients sales rep mail template

  1. リクエストタイプ同期: 新規またはタイプ変更時、IsInvoiced をタイプに合わせ、DateNextAction 未設定ならタイプの AutoDueDateDays から自動計算
  2. ステータス検証: 現在のステータスがタイプのステータスカテゴリに属さない場合、既定ステータスへリセット。未設定なら既定値をセット
  3. 期限タイプ更新: setDueType() で予定/期限/超過を再計算
  4. オープン/クローズ処理: オープン系→ StartDate セット・CloseDate クリア、クローズ系→ CloseDate セット、最終クローズ→ Processed=true
  5. 機密レベル既定値: 未設定ならタイプの機密レベル、なければ公開情報
  6. Record_UU 補完: AD_Table_ID + Record_ID から UUID を解決
  • 新規登録時に Result が入力されていれば MRequestUpdate を自動生成(更新履歴の起点)
  • M_ChangeRequest_ID があり R_Group_ID が変わった場合、グループの BOM/変更通知を ECR(技術変更依頼)へ反映
  • getMailTag()[Req#<ID>#ID] 形式のタグを返し、getR_Request_ID(mailText) が受信メール本文からタグを解析してリクエストを特定します(メール返信によるリクエスト更新に使用)
  • doClose() はクローズ系ステータス(最終クローズ以外を優先)へのソフトクローズを行います
  • MRequestUpdate(MRequest parent): 親の同名カラム値(標準カラム・キー・親・仮想カラムを除く)を一括コピーして履歴化。beforeSave で機密レベル未設定時は公開情報を設定
  • MRequestAction: 変更の旧値を保持し、NULL になったカラム名は NullColumns; 区切りで記録。getChangesHTML() で変更内容を整形

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

Section titled “拡張ポイント(カスタマイズ箇所)”

標準 Callout(org.adempiere.base.callout / CalloutRequest.java・145行)

Section titled “標準 Callout(org.adempiere.base.callout / CalloutRequest.java・145行)”
カラムCallout動作
R_RequestType_IDCalloutRequest.typeタイプ変更時の関連項目設定
R_MailText_IDCalloutRequest.copyMailテンプレート本文を対応結果へコピー
R_StandardResponse_IDCalloutRequest.copyResponse標準回答を対応結果へコピー
public class CustomRequestValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MRequest && type == TYPE_BEFORE_CHANGE) {
MRequest req = (MRequest) po;
// 例: クレームタイプは担当ロール必須
if (req.getAD_Role_ID() <= 0
&& "クレーム".equals(req.getRequestType().getName())) {
throw new AdempiereException("クレームには担当ロールを設定してください");
}
}
return null;
}
}

エスカレーション時の外部通知(チャット連携等)は TYPE_AFTER_CHANGEIsEscalated の変化を検知して実装できます。コア改変は不要です。


リクエスト管理は Model Validator と Callout で、通知連携・入力必須化・SLA 管理などを安全に拡張できます。

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

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