Skip to content

保存前にタイトルを正規化する ​

第1版作成 最終更新 (日本時間)
確認バージョン1.5.8.1

タイトルの前後にある空白を保存前に取り除き、保存する値をコードで統一します。ブラウザ側で送信前に整える例と同じ Title を対象にして、処理を置く場所と反映先の違いを説明します。

この手順とコードは本体ソースで確認しています。実機での動作確認結果ではありません。

適用条件 ​

  • 検証用の記録テーブルまたは期限付きテーブル。
  • テーブルを管理でき、タイトル項目の作成・更新ができるユーザー。
  • タイトルを変更してよい検証用レコード。

model は、処理対象のレコードから組み立てたオブジェクトです。model.Title はブラウザの入力要素ではありません。読める項目と変更を反映できる項目には権限の判定があります(読み取り判定、編集可能項目の抽出)。

実装コード ​

実行条件は「作成前」と「更新前」、共有はオフにします。画面表示の条件へ置くと、同じ代入でも保存への反映が変わります。

js
if (model.Title !== null && model.Title !== undefined) {
    model.Title = String(model.Title).trim();
}

「作成前」は BeforeCreate、「更新前」は BeforeUpdate に対応します。条件名と context.Condition の対応は context.Conditionで確認できます。

送信値と保存値を比較する ​

  1. 検証用レコードの編集画面を開く。
  2. タイトルを「動作確認」にし、その前後に半角空白を2つずつ入れる。
  3. 更新ボタンを押す。
  4. 更新結果を確認する。
  5. 画面を再読み込みし、タイトルが 動作確認 になっていることを確認する。

ブラウザ側の空白除去処理は外して比較します。空白入りの値を送る確認では、通常のタイトル入力欄がある画面で、コンソールから次のコードを実行してから更新します。

js
(function () {
    const $title = $p.getControl('Title');
    if (!$title || $title.length !== 1 || !$title.is('input[type="text"]')) {
        console.warn('タイトルの入力欄が見つかりません。');
        return;
    }
    $p.set($title, '  動作確認  ');
})();

これはブラウザのコンソールで実行するコードです。サーバースクリプトの欄には入れません。ネットワーク表示の更新リクエストで空白入りの値を確認し、再読み込み後の保存値と比較します。

新規作成でも同じ確認を行います。新規画面を開くだけでは「作成前」は呼ばれず、作成ボタンから保存処理へ進むと呼ばれます(作成処理と保存前フック)。

保存へ反映される仕組み ​

図を読み込み中…

model.Title の代入は、まず処理中のレコードモデルに戻されます。この例では作成・更新の前に動くため、後続の通常の保存処理が変更後の値を使います(変更値の反映、課題の作成前フック、課題の更新前フック)。

更新前は標準検証より前ではない

記録テーブルの通常の更新では、入力反映・計算式・標準の更新時検証を経て、更新前スクリプトが実行されます。この例は空白を除く方法を説明するもので、必須検証を置き換えるものではありません。操作別の実行順も確認してください。

実行条件を変えると結果も変わる ​

条件対象や実行位置この例で確認すべきこと
作成前作成するレコードの保存前作成値に空白除去が反映されるか
更新前更新するレコードの保存前更新値に空白除去が反映されるか
行表示の前一覧に表示する対象行代入だけでは DB 更新にならない
画面表示の前画面を作る前。対象は呼び出し元によって異なる一覧の各行と編集対象を混同していないか

行表示の前へ移して一覧が変わっても、保存値が変わった証拠にはなりません。対象と保存処理の違いは model の内部構造と反映条件で説明しています。

次に読むページ ​

変更履歴

第1版スクリプトの全体像と実装例を追加し、課題別の案内を整備