iDempiere リクエストの使い方|取引先管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 取引先管理の全体像: 取引先管理の全体図 も合わせてご覧ください。
リクエストは、取引先からの問い合わせ・クレーム・社内タスクなど「対応が必要な案件」を登録し、担当者・ステータス・期限を付けて追跡するウィンドウです。CRM(顧客対応管理)とヘルプデスク・課題管理の中核であり、対応の経緯がすべて更新履歴として残ります。
📌 ポイント: このウィンドウに表示されるのは自分に割り当てられたリクエストです。組織内の全リクエストを横断的に確認したい管理者は リクエスト(すべて) ウィンドウを使用します。
リクエストでできること
Section titled “リクエストでできること”- 問い合わせ・クレーム等の案件登録(リクエストタイプ・カテゴリ・グループで分類)
- 社内担当者・ロールへの割当とエスカレーション管理
- ステータス(オープン/クローズ)と次回対応日付による期限管理
- 対応結果の記録と更新履歴の自動蓄積(更新タブ・履歴タブ)
- 標準回答・メールテンプレートを使った返信文の呼び出し
- 受注伝票・請求書・品目・資産・プロジェクト等の関連伝票との紐付け
- 更新通知の受信者登録(更新通知タブ)
リクエストは親子4タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| リクエスト | R_Request | 約62項目 | 案件の本体(タイプ・担当・ステータス・対応結果・関連伝票) |
| 更新 | R_RequestUpdate | 約10項目 | 対応結果の更新履歴(誰がいつ何を回答したか) |
| 履歴 | R_RequestAction | 約40項目 | 変更前の旧値の履歴(担当・ステータス等の変更記録) |
| 更新通知 | R_RequestUpdates | 約6項目 | 更新通知を受け取るユーザーの一覧 |
💡 ヒント: 「更新」タブは対応結果(Result)の時系列ログ、「履歴」タブはフィールド変更の旧値ログという役割分担です。どちらもシステムが自動で記録するため、手入力は基本的にリクエストタブだけで完結します。
基本操作手順
Section titled “基本操作手順”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
アクセス方法
Section titled “アクセス方法”メニューから「取引先管理 > リクエスト」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- リクエストタイプ: 問い合わせ・クレーム等の種別(必須。ステータス体系と請求可否がタイプで決まる)
- サマリ: 案件の要約(必須)
- 優先度: 高・中・低(既定は中)
- 機密レベル: 公開範囲の指定
- 担当・取引先を設定:
- 社内担当者: 既定でログインユーザーがセットされる
- 取引先 / ユーザー: 依頼元の取引先と担当者
- 「保存」をクリック。伝票番号・ステータス・期限タイプが自動採番/自動設定されます
- 対応のたびに「対応結果」に内容を入力して保存すると、更新タブに履歴が追加されます
⚠️ 注意: 「次回対応日付」はリクエストタイプに自動期限日数(Auto Due Date Days)が設定されていると保存時に自動セットされます。期限超過の管理はこの日付と期限タイプ(予定/期限/超過)で行います。
項目リファレンス
Section titled “項目リファレンス”リクエストタブの主要項目です。全項目一覧はリファレンス参照。
| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列 | リクエストの管理番号(自動採番) |
| リクエストタイプ | 必須 | 選択 | 種別(問い合わせ・クレーム等)。ステータス体系を決定 |
| グループ / カテゴリ | - | 選択 | 分類用のグループ・カテゴリ |
| ステータス | - | 選択 | 案件の状態(未設定なら既定値が自動セット) |
| 期限タイプ | 必須 | リスト | 次回対応の状態(予定/期限/超過)。自動更新 |
| 優先度 / ユーザー優先度 | 必須/- | リスト | 社内の優先度と依頼者側の重要度 |
| サマリ | 必須 | テキスト | 案件の要約 |
| 機密レベル | 必須 | リスト | 公開範囲(公開情報が既定) |
| 社内担当者 | - | 選択 | 対応担当者(既定=ログインユーザー) |
| ロール | - | 選択 | 担当ロール(個人でなくロール単位の割当) |
| 次回対応日付 | - | 日時 | 次のアクション期限 |
| 標準回答 | - | 選択 | 選択すると定型文が対応結果へコピーされる |
| メールテンプレート | - | 選択 | 選択するとテンプレート本文が対応結果へコピーされる |
| 対応結果 | - | テキスト | 今回の対応内容。保存時に更新タブへ記録 |
| 取引先 / ユーザー | - | 検索 | 依頼元の取引先・担当者 |
| 受注伝票・売上請求伝票 等 | - | 検索 | 関連する業務伝票への紐付け |
| リクエスト金額 | 必須 | 金額 | 案件に紐づく金額(既定0) |
| エスカレート済 | 必須 | チェック | エスカレーション済みかどうか |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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_Request | MRequest | 1,208 | リクエスト本体 |
| R_RequestUpdate | MRequestUpdate | 129 | 対応結果の更新履歴 |
| R_RequestAction | MRequestAction | 182 | 変更前旧値の履歴 |
| R_RequestUpdates | X_R_RequestUpdates のみ(生成クラス) | - | 更新通知の受信者 |
アーキテクチャ概要
Section titled “アーキテクチャ概要”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 : ステータス体系/自動期限
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MRequest.java ほか
関連DBテーブル
Section titled “関連DBテーブル”R_Request(リクエスト)主要カラム
Section titled “R_Request(リクエスト)主要カラム”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| R_Request_ID | ID | PK | リクエストID | 主キー |
| DocumentNo | String(30) | Y | 伝票番号 | 自動採番 |
| R_RequestType_ID | TableDirect | Y | リクエストタイプ | callout: CalloutRequest.type |
| R_Group_ID / R_Category_ID | TableDirect | N | グループ/カテゴリ | |
| R_Status_ID | TableDirect | N | ステータス | 未設定時 beforeSave で既定値 |
| DueType | List | Y | 期限タイプ | 既定 5、beforeSave で再計算 |
| Priority / PriorityUser | List | Y/N | 優先度/ユーザー優先度 | 既定 5(中) |
| Summary | Text(2000) | Y | サマリ | |
| ConfidentialType / ConfidentialTypeEntry | List | Y | 機密レベル | 既定 C |
| SalesRep_ID | Table | N | 社内担当者 | 既定 @#AD_User_ID@、0 への変更は無視 |
| AD_Role_ID | TableDirect | N | 担当ロール | 既定 -1 |
| DateNextAction | Date+Time | N | 次回対応日付 | タイプの AutoDueDateDays で自動設定 |
| R_StandardResponse_ID | TableDirect | N | 標準回答 | callout: CalloutRequest.copyResponse |
| R_MailText_ID | TableDirect | N | メールテンプレート | callout: CalloutRequest.copyMail |
| Result | Text(2000) | N | 対応結果 | 保存時に R_RequestUpdate へ |
| StartDate / CloseDate | Date+Time | N | 開始/クローズ日付 | ステータスにより自動設定 |
| C_BPartner_ID / AD_User_ID | Search/TableDirect | N | 取引先/ユーザー | |
| C_Order_ID, C_Invoice_ID, M_Product_ID, A_Asset_ID, M_InOut_ID, C_Payment_ID, M_RMA_ID, C_Project_ID | Search 等 | N | 関連伝票参照 | |
| RequestAmt | Amount | Y | リクエスト金額 | |
| IsInvoiced / QtySpent / QtyInvoiced | - | - | 請求連携 | タイプの請求可否に追従 |
| Processed | YesNo | Y | 処理済み | 最終クローズで 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"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave(MRequest)
Section titled “beforeSave(MRequest)”- リクエストタイプ同期: 新規またはタイプ変更時、
IsInvoicedをタイプに合わせ、DateNextAction未設定ならタイプのAutoDueDateDaysから自動計算 - ステータス検証: 現在のステータスがタイプのステータスカテゴリに属さない場合、既定ステータスへリセット。未設定なら既定値をセット
- 期限タイプ更新:
setDueType()で予定/期限/超過を再計算 - オープン/クローズ処理: オープン系→
StartDateセット・CloseDateクリア、クローズ系→CloseDateセット、最終クローズ→Processed=true - 機密レベル既定値: 未設定ならタイプの機密レベル、なければ公開情報
- Record_UU 補完:
AD_Table_ID+Record_IDから UUID を解決
afterSave(MRequest)
Section titled “afterSave(MRequest)”- 新規登録時に
Resultが入力されていればMRequestUpdateを自動生成(更新履歴の起点) M_ChangeRequest_IDがありR_Group_IDが変わった場合、グループの BOM/変更通知を ECR(技術変更依頼)へ反映
getMailTag()が[Req#<ID>#ID]形式のタグを返し、getR_Request_ID(mailText)が受信メール本文からタグを解析してリクエストを特定します(メール返信によるリクエスト更新に使用)doClose()はクローズ系ステータス(最終クローズ以外を優先)へのソフトクローズを行います
MRequestUpdate / MRequestAction
Section titled “MRequestUpdate / MRequestAction”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_ID | CalloutRequest.type | タイプ変更時の関連項目設定 |
| R_MailText_ID | CalloutRequest.copyMail | テンプレート本文を対応結果へコピー |
| R_StandardResponse_ID | CalloutRequest.copyResponse | 標準回答を対応結果へコピー |
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”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_CHANGE で IsEscalated の変化を検知して実装できます。コア改変は不要です。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”リクエスト管理は Model Validator と Callout で、通知連携・入力必須化・SLA 管理などを安全に拡張できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。