ServiceNow Script私的まとめ

#ServiceNowのスクリプト大別
ServiceNow上でJavaScriptを記述して動かすことができるポイントがいくつかあるので、それらを観測している範囲でまとめました。

【参考文献】
[ServiceNow Developerサイト](https://developer.servicenow.com/)
[ServiceNow Developerブログ](https://developer.servicenow.com/blog.do)
[BASICO SERVICENOW LEANING](https://www.basicoservicenowlearning.in/)

## Client Side Script
### 概要
Client Side Scriptとは読んで字のごとくクライアントサイドで動くJava Scriptのコードです。
クライアントサイドとはエンドユーザーが操作するインターフェース、つまりブラウザを指しています。そのためエンドユーザーがテーブルをロードしたときやレコードを保存した時など、インターフェース（ブラウザ）上での操作に対して相互的にスクリプトが走ります。
Client Side Scriptではテーブルのフィールドに値を入力したり、入力されている値をチェックしたり、インフォメーションメッセージを出したり、ポップアップを出したり...etc、といった様々な動作を行うことができます。

### Client Side Scriptの4つの起動タイミング
Client Side Scriptには起動されるタイミングとして以下の４つを選ぶことができます。

+ onload()・・・ロード時
+ onChange()・・・指定のフィールドの値がフォーム画面から変更されたとき
+ onSubmit()・・・レコードを保存したとき
+ onCellEdit()・・・指定のフィールドの値がレコードの一覧画面で変更されたとき。

#### onLoad()
onLoad()関数内に書かれたコードはフォームのロード時に実行されます。
フォームのロードは新たにレコードを追加するときに発生するため、フォームに基本情報を自動入力するなどの動作を入れるときや何らかの情報をポップアップで記入者に知らせたいときに向いています。
ただし処理の量によってはフォームのロード時間にも影響するので最低限必要な処理のみにです。

```js:short_descriptionを読み取り専用にする
function onLoad() {
   g_form.setReadOnly('short_description', true);
}
```

#### onChange()
フォーム内の値が変更されたときに実行されます。
特定の値が変更された際にその値に対応した処理を行う場合などに有用です。
対象にする値は`Field name`欄の中に記述し、Scriptの中では制御しません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402157/44446988-9d08-467a-d8eb-651fbe73f922.png)



```js:short_descriptionに変更値を入力する
function onChange(control, oldValue, newValue) {			
    if (oldValue == newValue)
        return;
    g_form.setValue('short_description', true);
}
```

#### onSubmit()
フォームを保存したときに実行されます。
フォームが保存されたときに管理者に通知を送るなどの使い方ができます。



```js:priorityの値が１のレコードを保存するときにユーザに確認のメッセージを表示する
function onSubmit() {
    var priority = g_form.getValue('priority'); 
    if (priority == 1)
        return confirm(getMessage('Submit a priority one ticket?'));
}
```

## OnCellEdit
レコードの一覧になっている画面では任意のフィールドをダブルクリックして内容を編集することが可能だが、
そのタイミングで実行されるスクリプト

##Server Side Script
###概要
Server Side Scriptはサーバー・データベースの部分で実行されます。
Server Side Scriptではデータベースに対してのCRUD操作や他のサービスへのrequestの送信とresponseの受け取り、メールの送信などの動作を行うことができます。
ServiceNowのServer Sideでできることは非常に多岐にわたるためここではすべてを網羅しきれないですが、主だったものを以下に示していきます。

#### Scripts-Background
Scripts-BackgroundはServer Side Scriptのコードを実行できます。
ただコードを実行できるだけでなく、下のチェックボックスでスコープやデータベースの変更を追う設定などを追加することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402157/b1e5ba9e-3fe4-f2ba-ea04-a0278e592ab5.png)




#### Business Rules
レコードの挿入時・表示時・更新時・削除時・検索時といったレコードに関する操作のタイミングで実行できるServer Side Scriptを設定できます。
複数の異なるタイミングで実行されるBusiness Ruleを組み合わせることでレコードに対する処理の流れを作ることもできます。
Business Ruleは実行されるアクションをスクリプトだけでなくフォームでの値を設定する形で決めることもできるのでスクリプトが書けなくても動かすことができる、すなわちNoCode開発が可能な部分でもあります。


#### Script Include
Script Includeに書かれた関数やクラスはBusiness RuleやScript ActionなどのServer Side Scriptで利用できるようになります。
さらにClient Sideからの呼び出しを可能にすれば`Glide Ajax`を使うことでClient Side Script内でServer Sideのコードが使えるようになります。あまり詳しくないのであれですが、やや密結合気味になるので感覚的にはつかみづらかったです。


#### UI Action
UI ActionはServer SideとClient Sideのどちらでも使えます。
UI Actionはフォームへのボタン・リンク・メニューなどの追加と動作の指定を行うことができます。


#### Service Portal
モバイルアプリケーションをビルドするために使わる？らしいです。モバイルアプリは使ったことがないので割愛。

#### Script Action
Script ActionはBusiness RuleのイベントをトリガーとしてServer Side Scriptを実行できます。


##以下筆者の勉強不足により詳細不明

#### UI Page

#### UI Macro

#### Reference Qualifier

#### Workflow Script

#### Transform Map Scripts