Skip to content

スクリプトとサーバースクリプトの全体像 ​

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

プリザンターでは、ブラウザで実行する「スクリプト」と、サーバーで実行する「サーバースクリプト」を使って処理を追加できます。どちらも JavaScript を書きますが、使えるオブジェクト、実行される場所、変更する値の反映先が異なります。

最初に「どこで動くか」「いつ動くか」「どこの値を変えるか」を決めます。この3つを分けると、表示だけの変更と保存する変更を区別できます。

どこで動くか ​

比較する点スクリプトサーバースクリプト
実行場所利用者のブラウザプリザンターのサーバー
実行の仕組みページに出力された JavaScript を実行ClearScript の V8 エンジンで JavaScript を実行
主な入口出力先の画面、$p.events のイベント作成前・更新前・画面表示の前などの実行条件
主に扱うもの$p、jQuery、画面の入力欄や表示要素context、model、columns、items など
値の変更DOM や送信バッファを変更サーバー側のレコードモデルや表示設定を変更
DB 保存との関係本体の送信・保存処理へ値を渡す通常の作成・更新処理、または明示的な更新処理へ値を渡す

ブラウザ側のスクリプトは HTML への出力処理でページに組み込まれます。サーバー側は V8 エンジンの生成と ホストオブジェクトの登録・実行を通ります。

$p.getControl() はブラウザの入力要素を取得する関数です。サーバースクリプトの model はサーバーから渡されたオブジェクトです。同じ項目を扱っていても、この2つを直接共有しているわけではありません。

いつ動くか ​

ブラウザ側には2段階の指定があります。

  1. 出力先で、どの画面にスクリプトを含めるかを指定する。
  2. イベントで、出力したコード内の処理をいつ呼ぶかを指定する。

例えば出力先を編集画面にして、$p.events.on_editor_load に関数を代入すると、編集画面の読み込みイベントでその関数が呼ばれます。出力先を選ぶだけで、コード全体が項目変更のたびに再実行されるわけではありません。

根拠は 新規・編集の出力先選択、読み込みイベントの呼び出し、登録関数の実行です。

サーバー側は、作成前・更新前・行表示の前などの条件に合うスクリプトが実行されます。「編集画面を開く」と「編集画面から更新する」は別の操作です。画面を開いただけでは作成前・更新前の処理は走りません。詳しい呼び出し順は 操作別の実行順で確認できます。

どこの値を変えるか ​

値の場所何を保持するか代表的な操作次に確認すること
DOM現在の入力欄や表示$p.setValue()、jQuery の .val()送信する値にも登録されたか
送信バッファフォームごとの送信用の値$p.setData()、$p.set()実際のリクエストに含まれたか
サーバーのレコードモデル処理中のレコード値model.Title などへの代入編集権限を通り、保存処理へ進んだか
DB保存されたレコード値本体の作成・更新処理再取得した値がどうなっているか
ブラウザへの応答表示の差し替えや命令context.AddResponse()ブラウザがどの命令を適用したか

$p.set() は対象のコントロールの値を変更してから $p.setData() を呼びます。一方、$p.getData() は送信バッファを返す関数であり、呼ぶだけでは入力欄の値を収集しません(set・getData・setData の実装)。

サーバー側の model への代入も、直ちに DB 更新する命令ではありません。変更した項目は編集可能か判定され、レコードモデルへ戻されます。その後の作成・更新処理に含まれるかは実行条件で変わります(編集可能項目の抽出、変更値の反映)。

編集して保存するまでを通して見る ​

次は記録テーブルの通常の編集・更新を説明する模式図です。個別のプロセス処理、関連情報の更新、応答形式による分岐は省略しています。

図を読み込み中…

ブラウザの送信処理は send()、入力反映と検証は ResultUtilities.Update()、更新前後の処理は ResultModel.Update()が根拠です。

この図では、ブラウザの検証、サーバーの標準検証、更新前スクリプトが別の段階にあります。「更新前」は、標準検証も含めた全処理の最初を意味しません。

処理をどちらに置くか ​

次は、上の実行場所と反映先に基づく設計上の選び方です。

やりたいこと起点にする場所判断理由
入力欄の表示や操作を補助するブラウザのスクリプトDOM とブラウザのイベントを扱う
画面で変更した値を保存へ渡す$p.set() と本体の送信処理表示と送信バッファの両方を見る必要がある
作成・更新する値を整える作成前・更新前のサーバースクリプト保存前のレコードモデルを変更する
一覧の行ごとに表示を変える行表示の前のサーバースクリプトその行のレコードを対象にする
サーバーの処理結果を画面へ返すサーバースクリプトとブラウザの応答処理応答を受けたブラウザが命令を実行する
定期的に処理を実行するバックグラウンドサーバースクリプトスケジュールに従ってサーバーで実行する

画面表示のために値を変えた場合と、保存するために値を変えた場合は、確認方法も分けます。画面への応答だけで DB 保存まで確認したことにはなりません。

次に読むページ ​

  1. 送信前にタイトルを整えて画面と送信値を揃える — 検証前イベントと送信バッファの更新。
  2. 保存前にタイトルを正規化する — 保存前に model の変更を反映する条件。
  3. スクリプトの課題別と話題別案内とサーバースクリプトの課題別と話題別案内 — 必要な機能を詳しく読む。
  4. 動かない・値が反映されないときの調べ方 — どの段階で止まったかを調べる。

変更履歴

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