iDempiere アラートの使い方|会計 操作マニュアル・技術仕様
📖 会計の全体像: 会計の全体図 も合わせてご覧ください。
アラートは、「通知したいシステム状態」を SQL 条件で定義し、該当データが存在したときに指定ユーザー・ロールへ自動通知する仕組みです。与信超過の取引先、長期未転記の伝票、滞留在庫など、業務ルールの監視を人手を介さず自動化できます。
📌 ポイント: アラートの実行はサーバー側の「アラートプロセッサ」が担います。アラートを定義しただけでは通知されません。アラートプロセッサが稼働しており、アラートに受取人が登録されていることが通知の前提条件です。
アラートでできること
Section titled “アラートでできること”- SQL(SELECT / FROM / WHERE 句)による監視条件の定義
- 該当データ検出時のメール通知(件名・本文をテンプレート化)
- 通知先の指定(個別ユーザー / ロール単位)
- クライアント・ロールのデータセキュリティを考慮した通知制御
- 監視クエリ実行前後の SQL 実行(前処理・後処理)
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| アラート | AD_Alert | 約12項目 | アラート本体(件名・メッセージ・プロセッサ割当) |
| アラートルール | AD_AlertRule | 約14項目 | 監視条件の SQL 定義(SELECT/FROM/WHERE) |
| アラート受取人 | AD_AlertRecipient | 約6項目 | 通知先のユーザー / ロール |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>会計管理 > パフォーマンス測定 > アラート"] --> B["➕ アラートタブで<br/>名称・件名・メッセージを入力"]
B --> C["⚙️ アラートプロセッサを割当"]
C --> D["📝 アラートルールタブで<br/>SQL SELECT / FROM / WHERE を定義"]
D --> E["👥 アラート受取人タブで<br/>ユーザーまたはロールを登録"]
E --> F["💾 保存"]
F --> G["⏰ アラートプロセッサが定期実行<br/>該当データがあればメール通知"]
G --> H{SQL エラー?}
H -->|Yes| I["⚠️ ルールの有効フラグが N になり<br/>エラーメッセージに記録"]
H -->|No| J["✅ 通知完了"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「会計管理 > パフォーマンス測定 > アラート」を開きます。
- 「新規」ボタンをクリックし、アラートタブで入力:
- 名称: アラート名
- アラート件名: 通知メールの件名
- アラートメッセージ: 通知メールの本文
- アラートプロセッサ: 実行を担当するプロセッサ(必須)
- クライアントセキュリティ実行 / ロールセキュリティ実行: 受取人の権限で見えるデータのみ通知するか
- アラートルールタブで監視条件を定義:
- 名称: ルール名
- SQL SELECT句: 通知に含める列(例:
DocumentNo, GrandTotal) - SQL FROM句: 対象テーブル(例:
C_Invoice) - SQL WHERE句: 検出条件(例:
DocStatus='DR' AND Created < now() - interval '7 days') - テーブル: 対象テーブルを指定するとレコードへのリンクが可能に
- アラート受取人タブで通知先を登録:
- ユーザー: 個別ユーザーへ通知
- ロール: ロール所属ユーザー全員へ通知
- 「保存」をクリック
⚠️ 注意: SQL 句は自由記述のため、誤った SQL を登録すると実行時にエラーとなり、ルールの「有効」フラグが自動的にオフ、エラーメッセージ欄に内容が記録されます。修正後に有効フラグを戻すと再実行されます。
項目リファレンス
Section titled “項目リファレンス”主要項目のみ掲載します。全項目一覧はリファレンス参照。
アラートタブ
Section titled “アラートタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列 | アラート名 |
| アラート件名 | 必須 | 文字列 | 通知メールの件名(255文字以内) |
| アラートメッセージ | 必須 | テキスト | 通知メールの本文(2000文字以内) |
| アラートプロセッサ | 必須 | 選択 | 実行スケジュールを持つサーバープロセス |
| クライアントセキュリティ実行 | 必須 | チェック | 受取人のクライアント権限内のデータのみ通知(既定 Y) |
| ロールセキュリティ実行 | 必須 | チェック | 受取人のロール権限内のデータのみ通知(既定 Y) |
| 有効(IsValid) | 必須 | チェック | 配下ルールの妥当性(自動管理) |
アラートルールタブ
Section titled “アラートルールタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列 | ルール名 |
| SQL SELECT句 | 必須 | テキスト | 取得する列のリスト |
| SQL FROM句 | 必須 | テキスト | 対象テーブル・結合 |
| SQL WHERE句 | - | テキスト | 検出条件 |
| その他のSQL文 | - | テキスト | GROUP BY / ORDER BY 等 |
| 前処理 / 転記処理 | - | テキスト | クエリ実行前後に実行する SQL |
| テーブル | - | 選択 | 対象テーブル(レコードリンク用) |
| エラーメッセージ | - | テキスト | 実行エラー時に自動記録 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. アラートメールが届きません。
Section titled “Q. アラートメールが届きません。”次の 3 点を順に確認してください。(1) アラートプロセッサが割り当てられ、サーバーで稼働しているか。(2) アラート受取人にユーザーまたはロールが登録されているか。(3) ルールの有効フラグがオンか(SQL エラーで自動的にオフになっている場合はエラーメッセージ欄を確認)。
Q. 「クライアントセキュリティ実行」「ロールセキュリティ実行」とは何ですか?
Section titled “Q. 「クライアントセキュリティ実行」「ロールセキュリティ実行」とは何ですか?”通知データに受取人の権限フィルタを適用する設定です。オンの場合、受取人のロールで参照できないデータは通知に含まれません(MAlertRule.getSql(applySecurity) がロールのアクセス制御 SQL を付加します)。全データを通知したい監視用途ではオフにできますが、権限外データの露出に注意してください。
Q. ルールを修正したのにアラート本体の「有効」が戻りません。
Section titled “Q. ルールを修正したのにアラート本体の「有効」が戻りません。”アラート本体の IsValid は配下ルールの状態から自動計算されます。有効かつ IsValid=N のルールが 1 件でも残っていると N のままです(MAlertRule 保存・削除時に親を一括更新)。問題のルールを修正して保存するか、無効化してください。
Q. 通知先をロールで指定した場合、誰に届きますか?
Section titled “Q. 通知先をロールで指定した場合、誰に届きますか?”そのロールに割り当てられている全ユーザーが対象です。個人単位で制御したい場合は「ユーザー」で個別登録してください。
🛠 技術仕様(開発者向け)
アラートは AD_Alert(本体)+ AD_AlertRule(SQL ルール)+ AD_AlertRecipient(受取人)の 3 テーブル構成(いずれもアクセスレベル 6 = System+Client)です。モデルクラスは MAlert(238行)・MAlertRule(236行)・MAlertRecipient(106行)。実行本体はサーバープロセスのアラートプロセッサ(MAlertProcessor)が担います。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MAlert {
+getRules(boolean) MAlertRule[]
+getRecipients(boolean) MAlertRecipient[]
+getFirstAD_Role_ID() int
+getFirstAD_User_ID() int
+getRecipientUsers() Collection
}
class MAlertRule {
+getSql() String
+getSql(boolean applySecurity) String
+createReportFile(String) File
#beforeSave(boolean) boolean
#afterSave(boolean, boolean) boolean
#afterDelete(boolean) boolean
}
class MAlertRecipient
class MAlertProcessor
class X_AD_Alert {
<<generated>>
}
MAlert --|> X_AD_Alert
MAlert --> MAlertRule : has many
MAlert --> MAlertRecipient : has many
MAlertProcessor --> MAlert : executes
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MAlert.java(同ディレクトリに MAlertRule.java / MAlertRecipient.java / MAlertProcessor.java)
関連DBテーブル
Section titled “関連DBテーブル”AD_Alert(アラート)
Section titled “AD_Alert(アラート)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| AD_Alert_ID | ID | PK | アラートID | 主キー |
| Name | String(60) | Y | 名称 | |
| AlertSubject | String(255) | Y | アラート件名 | |
| AlertMessage | Text(2000) | Y | アラートメッセージ | |
| AD_AlertProcessor_ID | TableDirect | Y | アラートプロセッサ | |
| EnforceClientSecurity | YesNo | Y | クライアントセキュリティ実行 | default Y |
| EnforceRoleSecurity | YesNo | Y | ロールセキュリティ実行 | default Y |
| IsValid | YesNo | Y | 有効(ルール妥当性) | default Y・自動管理 |
AD_AlertRule(アラートルール)
Section titled “AD_AlertRule(アラートルール)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| AD_AlertRule_ID | ID | PK | ルールID | 主キー |
| AD_Alert_ID | TableDirect | Y | 親アラート | |
| SelectClause | Text(2000) | Y | SQL SELECT句 | |
| FromClause | Text(2000) | Y | SQL FROM句 | |
| WhereClause | Text(2000) | N | SQL WHERE句 | |
| OtherClause | Text(2000) | N | その他のSQL文 | |
| PreProcessing / PostProcessing | Text(2000) | N | 前処理 / 後処理SQL | |
| AD_Table_ID | TableDirect | N | 対象テーブル | レコードリンク用 |
| IsValid | YesNo | Y | 有効 | 実行エラーで N |
| ErrorMsg | Text(2000) | N | エラーメッセージ | 実行エラー時に記録 |
AD_AlertRecipient(アラート受取人)
Section titled “AD_AlertRecipient(アラート受取人)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| AD_AlertRecipient_ID | ID | PK | 受取人ID |
| AD_Alert_ID | TableDirect | Y | 親アラート |
| AD_User_ID | Search | N | ユーザー |
| AD_Role_ID | TableDirect | N | ロール |
ビジネスロジック
Section titled “ビジネスロジック”MAlertRule.getSql(applySecurity)
Section titled “MAlertRule.getSql(applySecurity)”SELECT / FROM / WHERE / その他句を結合して監視 SQL を組み立てます。applySecurity=true の場合、親アラートの EnforceClientSecurity / EnforceRoleSecurity 設定に従い、最初の受取人のロール・ユーザー権限によるアクセス制御句を付加します。
保存・削除時の親フラグ同期
Section titled “保存・削除時の親フラグ同期”beforeSave(): 新規時はIsValid=true、有効なルールはエラーメッセージをクリアafterSave()/afterDelete(): 親AD_Alert.IsValidを SQL 一括更新。**「IsActive=Y かつ IsValid=N のルールが 1 件でもあれば親も N」**というルールで同期します
通知先の解決
Section titled “通知先の解決”MAlert.getRecipientUsers() が受取人(ユーザー直接指定 + ロール指定のロール所属ユーザー)を集約し、重複を除いた通知先リストを返します。
拡張ポイント
Section titled “拡張ポイント”- Callout: 標準 Callout の定義はありません(gw_column 上 callout なし)
- Model Validator:
AD_AlertRuleの保存時に SQL の静的チェック(禁止テーブル・必須条件)を追加すると、運用ミスを事前に防げます - 通知チャネルの拡張(メール以外への通知)はアラートプロセッサ側の処理をプラグインで置き換える設計になります
関連プロセス
Section titled “関連プロセス”このウィンドウ自体にプロセスボタンはありません。実行はサーバープロセスのアラートプロセッサ(スケジュール実行)が担います。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”与信・滞留・締め漏れなど、貴社固有の監視ルールをアラートとして自動化できます。SQL 設計から通知運用までお任せください。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。