【ServiceNowスクリプト事始め】クライアントスクリプト(その2)
onLoad
最初にonLoadタイプです。このタイプはフォームを表示する際に実行されるスクリプトでしたね。
クライントスクリプトはアプリケーションナビゲーター[System Definition > Client Script]よりリスト表示されます。
新規作成画面の[Type]フィールドで[onLoad]を選択すると、スクリプトエディタに下図のような関数が表示されますので、開発者はここにコードを書いていきます。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_1.jpg)
それではサンプルコードとしてユーザーテーブル(sys_user)に関するスクリプト[hide password field]を見ていきましょう。
クライアントスクリプトのリストより[hide password field]を選択すると、下図のようなフォームが表示されます。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/hide_password_field-1024x506.jpg)
それではスクリプトを詳しくみていきましょう。
まず最初に[sys_properties]テーブルからデータを取得するために、GlideRecordのオブジェクトを作成します。
このテーブルはシステムプロパティーテーブルですね。
次に、addQueryメソッドで[name]フィールドの値が[glide.user.show.password.field]となっているレコードを検索します。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_2.jpg)
検索結果がtrueであった場合、[value]フィールドの値を取得し、それが[false]であれば、sys_userテーブルの(このクライントスクリプトのターゲットテーブル)のuser_passwordフィールドを非表示にする。というスクリプトでした。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_3.jpg)
つまりこのスクリプトでは
glide.user.show.password.fieldプロパティーの値がfalseであれば、ユーザーテーブルのパスワードフィールドを非表示にする。
というスクリプトです。
onChange
次ににonChangeタイプです。このタイフはフォームの特定のフィールドの値が変更された際に動作するクライアントスクリプトでしたね。
クライアントスクリプトの新規作成画面の[Type]フィールドで[onChange]を選択すると、スクリプトエディタに下図のような関数が表示されますので、開発者はここにコードを書いていきます。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_11.jpg)
onLoadの時には関数のパラメータがありませんでしたが、onChangeにはいくつかのパラメータがあります。
・control:発生したフィールドのHTML要素
・oldValue:変更前のフィールド値
・newValue:変更後のフィールド値
・isLanding:フォームがまだロード中であればtrue
・isTemplate:テンプレートとしてフォームが使われていればtrue
それではインシデントテーブル(incident)に関するスクリプト[(BP) Set Location to User]を見ていきましょう。
クライアントスクリプトのリストより[(BP) Set Location to User]を選択すると、下図のようなフォームが表示されます。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/incident-1024x608.jpg)
インシデントテーブルのCallerフィールが変更されたとき実行されるスクリプトであることがわかります。
それではスクリプトを詳しく見ていきましょう。
GlideFormのisNewRecordメソッドは、レコードが一度も保存されていない場合trueを返します。
GlideFormのisLiveupdatingメソッドは表示されているフォームのレコードが更新中にtrueを返します。
つまり、「 新規レコードのロード時、またはフォームがライブ更新中の場合、以降の処理をスキップ」という処理になります。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_21.jpg)
[Caller]フィールドが空またはnullの場合、[location]フィールドを空にし、処理を終了します。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_31.jpg)
[location]フィールドの存在をチェックし、なければ処理終了、あれば、GlideForm APIのgetReferenceメセッドで指定されたフィールドへコールバック関数の値を返します。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_41.jpg)
コールバック関数[setLocation]の処理を説明します。
この関数ではcallerが存在すると、getReferenceメソッドからのレスポンスを処理します。
呼び出し元(Caller)が存在する場合、そのlocationフィールドの値をインシデントのlocationフィールドに設定します。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/code_51.jpg)
つまり、このスクリプトでは
インシデントフォームの[Caller]フィールドが変更されたときに、関連する呼び出し元の「location」を自動的にインシデントの[location]フィールドにコピーする
機能を提供しています。
実際にインシデントテーブルを操作するとどうでしょうか。
CallerをDavidからAbelに変更すると、それにあわせてLocationが自動的に変更されました。
![](https://www.dx-safetylab.jp/wp-content/uploads/2023/11/caller-1024x130.jpg)
次回はonSubmitクライアントスクリプトについて解説いたします。
(おわり)