ServiceNow備忘録

![sn-logo-color.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/865ac2c2-a0d4-ca40-ea76-2c69d1b27f5b.jpeg)

最近、ServiceNowの案件から離任する事になりました。ServiceNowの案件は少ないので、そうそう次回は無いとは思うのですが、せっかく数か月学んだので自分用の備忘録( ..)φメモメモとして残しておきます。（なお数か月しか学んでいなく、もし間違い等ございましたらご指摘頂けると助かります。）

#ServiceNowとは

IT部門の現場においては、情報共有や可視化、標準化などの問題が山積し、日々運用改善を求められています。ServiceNowはそれらを解決すべく、ITIL®に準拠した以下のサービスを提供するエンタープライズプラットフォームです。

- IT サービスマネジメント（ITSM）
- IT オペレーションマネジメント（ITOM）
- IT ビジネスマネジメント（ITBM）
- ソフトウェア資産管理（SAM）
- セキュリティオペレーション
- カスタマーサービスマネジメント
- 人事サービスデリバリー

例えばアラートのハンドリング：インシデント自動起票、ナレッジ管理との連携、変更管理の情報などITSMとITOMのデータを統合し、コールセンターや運用部門、開発部門との情報共有をスムーズにしてくれます。

このITIL®に準拠したサービスは、ありそうでなかった「ITのためのITサービス」だった為、特に競合がいないまま順調に成長し、2018年、フォーブスにて世界で最も革新的な企業第1位に選出されました。大企業が中心となりますが、いまやグローバルではデファクトスタンダードとして運用の現場に取り入れられ、日本でも急速に拡大中のサービスです。

#開発者用ServiceNowインスタンスを試す方法。

###ServiceNowアカウント作成
まずはじめに、以下の開発者向けの情報サイトへアクセスします。

https://developer.servicenow.com
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/7d1025a1-9879-1c44-11db-9102cfcdabab.png">](https://developer.servicenow.com)

上記サイトの右上[REGISTER]を選択し、開発者用のアカウントを作成します。

登録すれば、以下の事が可能になります。

- 各種学習コンテンツの利用
- APIリファレンスの参照
- 開発者向けインスタンスの管理


###ServiceNowインスタンス払い出し
ServiceNow開発者向けに、無償でServiceNowインスタンスを提供するサービスが存在します。
なお本番インスタンスと比べ大きく以下の違いがあります。

- 有償プラグイン含め、すべての機能が無償で利用可能
- インスタンス非機能が弱い（冗長構成となってない、CPU/メモリが貧弱）
- 24時間利用しないと、インスタンスが停止する。 また、10日間利用しないと、インスタンスが削除される。 ※削除されても、一定期間は復旧可能。

払出しの手順は、以下を参照してください。

https://developer.servicenow.com/dev.do#!/learn/courses/paris/app_store_learnv2_buildmyfirstapp_paris_build_my_first_application/app_store_learnv2_buildmyfirstapp_paris_servicenow_basics/app_store_learnv2_buildmyfirstapp_paris_exercise_obtain_a_personal_developer_instance
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/de5f7e74-231c-c5a3-7063-26b0a19f2ff1.png">](https://developer.servicenow.com/dev.do#!/learn/courses/paris/app_store_learnv2_buildmyfirstapp_paris_build_my_first_application/app_store_learnv2_buildmyfirstapp_paris_servicenow_basics/app_store_learnv2_buildmyfirstapp_paris_exercise_obtain_a_personal_developer_instance)


###まずはタイムゾーンを日本（JST）に変更　ロゴを変更します。

Filter Navigationに[basic]と入力し、[Basic Configuration U16]メニューを開きます。
[Configure available time zones]より、[JST]を有効化します。
[System timezone for all users unless overridden in the user‘s record]で、JSTを選び、[Save]します。
[Banner image for UI16]を変更し、サイトのロゴを変更し[Save]します。

![スクリーンショット 2021-05-14 22.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/79bf195b-5341-8e93-4cac-36b57441bdf3.png)


###日本語パッチもあてておきましょう。
以下の記事が参考になります。（なお2021年3月時点のParisでは数時間も必要でした。裏で勝手に動いているので、別ブラウザを立ち上げ平行に操作する事は可能です）

https://qiita.com/20_percent_cooler/items/ca2dfe6a8764f8b76baf

###その他いろいろと( ..)φメモメモ　＆　学習用コース
ServiceNowにはいろいろな機能があります。

- ServiceNowは各テーブルのビューアとして、[リスト]と[フォーム]を持っています。
- ServiceNowはjavascriptでコーディングでき、大きくわけて、クライアント側スクリプト、サーバ側スクリプトの2つに分類できます。
- クライアント側のスクリプトはユーザーのブラウザ内で実行され、フォームとフォームフィールド等、ユーザインターフェースを制御するために使用されます。
- サーバー側スクリプトは、ServiceNowサーバーまたはデータベースで実行されます。このServiceNowのスクリプトはデータベースの参照や更新、メールの送信、RESTメッセージを送信し他システムのAPI呼び出しなど多くのことを実行できます。
- データの作成や更新をトリガーに、業務ルールに沿ってデータの更新が可能です。本機能をBusiness Ruleと呼び、スクリプトで細かく制御する事も可能です。
- データの作成や更新をトリガーに、メール通知を送信することが可能です。本機能をNotificationと呼び、スクリプトで細かく制御する事も可能です。
- データの作成や更新をトリガーに、ワークフローを走らせることが可能です。本機能をWorkflowと呼び、スクリプトで細かく制御する事も可能です。
- ServiceNowに対して実施たカスタマイズが正しく動いているか検証する、自動テストが可能です。 本機能をATF（Automated Test Framework）と言います。



他にも様々な機能があり、以下のURLの通り、それらを体系的に学べるコースがあるので参照すると良いでしょう。私は、全てでは無いですが、ざっと一通り学びました。

https://developer.servicenow.com/dev.do#!/learn/courses/paris
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/aa86ce7c-2025-9d6e-a28c-1b6b2d81dea1.png">](https://developer.servicenow.com/dev.do#!/learn/courses/paris)


#####補足
※ちなみに、ここで学習するNeeditがgithubを使用しているのですが、パブリックリポジトリだとコンプライアンス的にNGな会社が多いと思います。その場合、以下の記事で、プライベートリポジトリに変更して学習すると良いでしょう。

https://qiita.com/cabaken/items/ce10a714c766dc2c9295


###他にも役に立つリンク集

- 製品ドキュメント：https://docs.servicenow.com/
- コミュニティ：https://community.servicenow.com/community
- 開発者向けサイト：https://developer.servicenow.com/dev.do
- 学習サイト：https://nowlearning.service-now.com/
（「Self-Paced」は無償）


#小技や知識のTips(備忘録メモメモ)

#####OOTB
OOTBという言葉をよく使っていました。これは「Out-of-the-Box（箱から出したままの状態）」の略で、ServiceNowは細かくカスタマイズする事もできるのですが、できるだけOOTBで進めることを大方針とし、現状の運用プロセスを踏襲するのではなく、可能な限りServiceNowのプロセスに合わせる方が推奨されていました。

#####スキーママップ（ER図）の確認
[System Defenition] - [Tables & Columns]でテーブルとカラムの情報を参照することができ、[Schema map]ボタンでER図を参照することが出来ます。

![スクリーンショット 2021-05-14 22.25.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/4cd6294c-104d-7e3e-7ba3-d2daf5bb1bdb.png)


#####テーブル構造の確認。
[System Defenition] - [Tables]でテーブル一覧を表示できます。

![スクリーンショット 2021-05-14 22.22.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/97416b78-bdf1-3953-1587-9821358a74fd.png)

または以下の方法でもテーブルの詳細（ディクショナリ）を参照できます。

対象テーブルの任意のカラムラベルのハンバーガメニューを右クリックし「Configure」＞「Table」
![スクリーンショット 2021-05-14 22.32.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/ac1d309b-5932-85f2-90e3-97caf8a25a63.png)


もしくはアプリケーションナビゲーターで「テーブル名.config」と入力し、「Dictionary Entries」タブを選択。
![スクリーンショット 2021-05-14 22.33.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/a014e696-6cb2-cf85-9811-48d5db64f71c.png)
※なお上記ConfigのAllは、Bussiness RoleやClient Script、Access Controle等、重要な物が多いので、使う機会が多かったです。

#####「テーブル名.xxxx」
上記のような「テーブル名.xxxx」と打つサフィックスは、以下の通りあり使う機会が非常に多いです。

- 「テーブル名.config」 ：コンフィグ画面
- 「テーブル名.list」 ：データ全件表示
- 「テーブル名.do」 ：新規登録画面

#####エクスポート
テーブルを調べるにあたり、てっとりばやく全件エクスポートなども良く実行しました。

１．任意のカラムラベルのハンバーガメニューを右クリックし「Configure」＞「List Layout」を選択
![スクリーンショット 2021-05-14 22.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/a12a6cec-4562-b634-2ee7-67f788bd0e4f.png)

２．全カラムのビューを新規作成します。※この時、Defalut Viewを上書きしない様に注意してください。
![スクリーンショット 2021-05-14 22.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/08b0a128-88ba-9a2f-d298-b76820ec0f57.png)

３．ビューを変更します。
![スクリーンショット 2021-05-14 22.44.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/387e64d3-35d6-a6e9-c0b2-34391b8d20b5.png)

４．行ヘッダーを右クリックでエクスポートします。
![スクリーンショット 2021-05-14 22.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/c45b9475-e733-b063-b458-a4246a9335dc.png)

#####「u_テーブル名」
「u_」とプレフィックスがついているテーブルは、ユーザが作成したカスタムテーブル（カスタムフィールド）を表します。
![スクリーンショット 2021-05-14 22.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/e88aa3a4-f5eb-3d23-e8b7-0ecfeb656a85.png)

#####sys_id
おおよそのテーブルは内部でsys_idを持っており、外部キーとして使われているので調べる機会が多かったです。
![スクリーンショット 2021-05-14 22.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/c6d28f25-738a-c082-87bf-64f47a358fec.png)

#####バックグラウンド　スクリプトの起動方法
ファイルナビゲーターに「background」と入力し、Scripts-backgroundを実行します。
![スクリーンショット 2021-05-14 23.00.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/28cc1a8f-10d3-904f-23d2-0f4b79fd7ff0.png)

#####サーバスクリプト（GlideRecord）など
サーバスクリプトの例です。

```javascript:GlideRecordを使用した例
var queryString = "priority=1^ORpriority=2";
var now_GR = new GlideRecord('incident');
now_GR.addEncodedQuery(queryString);
now_GR.query();
while (now_GR.next()) {
  gs.addInfoMessage(now_GR.getValue('number'));
}
```

#####サーバーサイドスクリプトのデバック
サーバーサイドスクリプトのDebugger使用方法は、以下のラーニングが役に立ちます。
https://developer.servicenow.com/dev.do#!/learn/courses/paris/app_store_learnv2_scripting_paris_scripting_in_servicenow/app_store_learnv2_scripting_paris_server_side_scripting/app_store_learnv2_scripting_paris_breakpoints
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/53fcde69-7795-9ccd-c6b8-f1e2cf98522e.png">](https://developer.servicenow.com/dev.do#!/learn/courses/paris/app_store_learnv2_scripting_paris_scripting_in_servicenow/app_store_learnv2_scripting_paris_server_side_scripting/app_store_learnv2_scripting_paris_breakpoints)


#####クライアントスクリプトのデバック
・クライアントスクリプトはChromeデベロッパーツールなどでデバックしました。

![スクリーンショット 2021-05-14 23.19.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/1f1289f9-b206-6ddf-1bbc-16dd7ed4fa59.png)

#####ロールバック
ServiceNowには様々なロールバックがあります。例えば削除レコードを回復するほか、実行されたスクリプトのデータベースアクションをロールバックしたり、パッチのアップグレードとプラグインのアクティブ化なんかもロールバックできます。詳細は以下を参照してください。

https://docs.servicenow.com/bundle/quebec-platform-administration/page/administer/table-administration/concept/rollback-delete-recovery.html
[<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1164737/9862e246-4fa4-53bf-8382-32d636f2c342.png">](https://docs.servicenow.com/bundle/quebec-platform-administration/page/administer/table-administration/concept/rollback-delete-recovery.html)

以上、次回があるかはわかりませんが、備忘録( ..)φメモメモでした。