$p.events.before_send
概要¶
サーバへデータを送信する前に実行するメソッドの指定方法を説明します。項目に入力した値が正しいかをチェックするときに使用してください。
制限事項¶
-
複数のスクリプトを作成し各スクリプトの内容に本関数を記述すると、スクリプトが上書きされるため、最新のもの以外は動作しません。回避策は以下FAQを参照してください。
構文¶
JavaScript¶
$p.events.before_send = function (args) {
//処理内容
}
または
$p.events.before_send_{data-action属性の値} = function (args) {
//処理内容
}
※イベントを発生させるボタンのdata-action属性の値を明示的に記述したい場合は取得してください。
使用例¶
以下のサンプルコードをプリザンターのスクリプトへ設定し出力先は「編集」にした後、編集画面で数値Aに100を入力して「更新」ボタンを押下してください。
正しく入力された時のみ分類Aに値がセットされ、画面が更新されます(当例ではdata-action属性の値であるUpdateを明示的に記載してます)。
JavaScript¶
$p.events.before_send_Update = function (args) {
if ($p.getControl('NumA').val() != 100) {
return false; //falseのときは処理が止まり、更新されない
} else {
$p.set($p.getControl('ClassA'), '正しく入力されました。')
return true; //trueのときは更新される
}
}
サンプルコード¶
1. 金額・納期・取引先を変えて更新するとき、変える値を確かめてから送る
見積の編集画面で「更新」を押したとき、金額・納期・取引先のどれかを変えていれば、変えた項目と新しい値を確認のダイアログに出します。「キャンセル」を押すと送りません。ほかの項目のみを変えたときは、そのまま更新します。
実務での使いどころ¶
金額や納期を誤って書き換えたまま、顧客への連絡や手配が進むのを防げます。「更新」ボタンに確認を出す設定は無く、プロセスの確認メッセージは決まった文を出すもので、変えた項目によって出し分けることはできません。before_sendの引数(args.data)には、変えた項目のみが入るため、変える前の値を覚えておかなくても、どの項目を変えたかがわかります。
事前準備¶
1:「見積」テーブル(期限付きテーブル)で、以下の項目を有効化してください。
| 項目コード | 内容 |
|---|---|
| 数値A(NumA) | 金額 |
| 日付A(DateA) | 納期 |
| 分類A(ClassA) | 取引先 |
2:スクリプトを登録します。
2-1:「テーブルの管理 > スクリプト」タブで「新規作成」を選択する。
2-2:タイトル: 任意の名前(例:confirmImportantChanges)
2-3:スクリプト: 下記サンプルコードを貼り付け
2-4:出力先:「すべて」のチェックを外し、「編集」にチェック
JavaScript¶
/**
* ================================================================
* サンプル 金額・納期・取引先を変えて更新するとき、変える値を確かめてから送る
* ================================================================
*
* 【概要】
* 見積の編集画面で「更新」を押したとき、金額・納期・取引先のどれかを変えていれば、
* 変えた項目と新しい値を確認のダイアログに出します。「キャンセル」を押すと送りません
* (入力した値は画面に残ります)。ほかの項目だけを変えたときは、そのまま更新します。
*
* 【使い方】
* 出力先:編集
* ================================================================
*/
// 確かめる項目(項目名: 表示名)
const WATCH_COLUMNS = { NumA: '金額', DateA: '納期', ClassA: '取引先' };
// 「更新」ボタン(data-action が Update)を押し、入力の検証を通ったあと、送る直前に呼ばれる
$p.events.before_send_Update = function (args) {
// args.data には、変えた項目のみが「テーブルの種類_項目名」(例:Issues_NumA)で入る
const changes = Object.keys(WATCH_COLUMNS)
.filter((column) => `${$p.tableName()}_${column}` in args.data)
.map((column) => `・${WATCH_COLUMNS[column]}:${args.data[`${$p.tableName()}_${column}`]}`);
if (changes.length === 0) {
return true;
}
// false を返すと送らない
return confirm(`次の項目を変えて更新します。よろしいですか?\n${changes.join('\n')}`);
};
注記¶
args.dataには、変えた項目が「テーブルの種類_項目名」(例:Issues_NumA)で入ります。テーブルの種類は$p.tableName()で取ります。- 値は送る形のまま出ます(金額は「1300000」、日付は「2026/12/20」)。選択肢一覧を「値,表示名」の形にした場合は、値が出ます。
- 「キャンセル」で送らなかったとき、入力した値は画面に残ります。
- プロセスのボタンで保存するときは対象外です。同じことをするには、
$p.events.before_send_Process_1のように、ボタンごとに書きます。
