ServiceNow - Webサービスインポートセットを利用してテーブルを更新する

#概要
ServiceNowでテーブルを一括更新する場合はServiceNowにログインしてインポートセットからファイルをアップロードする場合が多い。しかし、定期的にインポートする場合はWebサービスインポートセットを利用することができる。
WebサービスインポートセットとはServiceNowのREST APIを利用してデータを作業用インポートセット用テーブルに保存して、そこから普通のインポートセットと同じようにトランスフォームマップ（変換マップ）を利用してServiceNowの実テーブルに反映する仕組みである。
REST APIを利用するのでExcelマクロなど外部ツールを利用することが可能である。また、ServiceNowの変換マップを利用するのでServiceNowページから重複チェックなどで利用するキーなど変換ルールを定義することができる。

#実装
##ServiceNowでの実装
###システムWebサービスの作成
先ずは会社情報を登録するWebサービスインポートセットを作成します。
1.アプリケーションナビゲータから「システム Web サービス」を検索して「新規作成」を選択
![master_data_entry_create_web_service_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/5b66457a-5912-ee2f-dfd4-349a411eaf97.png)
2.次の情報を入力して「作成」ボタンを押下

|項目|値|
|---|---|
|ラベル|Import company_data|
|ターゲットテーブルからフィールドをコピー|チェック|
|ターゲットテーブル|core_company|
![master_data_entry_create_web_service_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/0e96c44d-9ad4-8449-66f9-b7ddf9de937e.png)

###変換マップの作成
入力データとServiceNowテーブル列のマッピングルールを定義します。
3.ServiceNowのテーブルから項目を取得します。
「Auto Map Matching Fields」リンクをクリックします。ページの下に会社テーブルのフィールド一覧が追加されます。
![master_data_entry_create_web_service_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/e607c0b1-fd5e-adc7-c1a5-3980593d7f69.png)
4.インポートするフィールド以外は削除します。
今回は「notes」，「manufacturer」,「vendor」,「name」，「vendor_type」のみを残します。それ以外のフィールドをチェックします。
![master_data_entry_create_web_service_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/728004e3-f54b-7013-ea32-2eb8ffd9402b.png)
5.チェックした後に「Actions on selected rows」を選択して「Delete」を選択します。
![master_data_entry_create_web_service_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b900f875-e910-8e1b-4d8f-0c34d546d65f.png)
6.削除確認が情報されるので「Delete」ボタンを押下
![master_data_entry_create_web_service_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/97e82e8f-b3ee-a833-071c-4cdaf07522f7.png)
7.削除すると残りのフィールドが表示されます。今回、不要な項目をすべてチェックして削除します。
![master_data_entry_create_web_service_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/8e0ebad7-c192-ede7-08ed-5350341b7137.png)
8.同じようにフィールドを削除します。
![master_data_entry_create_web_service_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/5f96f03f-ba6d-cebe-e681-a9fd6a88d79d.png)
9.続けて削除します。
![master_data_entry_create_web_service_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/0c82a58a-37dc-82e5-366e-499c881c99f2.png)
10.インポートするフィールドのみが表示されていることを確認します。
今回は企業名をキーにします。キーでレコードを識別されます。インポートセットテーブルにはすべてのレコードは追加されますが、実テーブルに再インポートした場合で既に同じキーのレコードがある場合は新しいレコードを追加せずに内容が更新されます。
名前をキーにするので、u_nameのCoalesceセルをクリックします。
![master_data_entry_create_web_service_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/c876d4f6-50be-29b2-8825-58178e30118a.png)
11.内容を「true」に変更して、右のチェックをクリックします。
![master_data_entry_create_web_service_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9eb1d4d7-2b53-66a3-20b2-6c536a72206c.png)
12.設定が変更されたことを確認した後に「Update」ボタンを押下して保存します。
![master_data_entry_create_web_service_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/74aedec1-c8ad-f418-d72b-72e0d2ab8eb4.png)

###通信テスト
ServiceNowのREST API Explorerを利用して作成したWebサービスインポートセットを試します。
先ずはインポートセットテーブルに接続できるか試します。
13.アプリケーションナビゲータから「REST」を検索して、「REST API Explorer」を選択します。
![master_data_rest_explorer_get_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/8c12c965-dba2-0943-014a-fe30a545cea9.png)
14.「Retrieve records from a table (GET)」を選択します。
検索するテーブル名は先ほど作成したWebサービスインポートセットの「source table」です。今回は「Import company data (u_import_company_data)」です。
![master_data_rest_explorer_get_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b79d5620-4969-3016-2f83-fb652b437ed7.png)
15.ページの下の方にある「送信」ボタンを押下してGETリクエストをServiceNowに送ります。
![master_data_rest_explorer_get_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/966c4d2c-c82b-6156-9b47-e6d1903702b6.png)
16.問題がなければ「200 OK」を表示されます。まだデータを登録していないのでデータはありません。
![master_data_rest_explorer_get_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/5bf37d11-8345-5a71-c302-46618c70c2c3.png)
17.接続できることを確認できたのでデータをPOSTして登録して見ます。
左側のメニューから「レコードの作成（POST）」を選択して再びtable nameに作成した「Import company data(u_import_company_data)」を指定します。
![master_data_rest_explorer_post_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/54c23e1f-ec10-fd1e-822c-c930ab6c7bc9.png)
18.ページ下の方に「要求本文」セクションがあります。「ビルダ」タブを選択して「フィールドを追加してください」ボタンを押下します。
![master_data_rest_explorer_post_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/ac2a2c13-815c-194b-e05c-636abda4a751.png)
19.ServiceNowに送信するフィールドを指定します。フィールドを定義するとその下に送られるJSONが表示されます。

|フィールド名|値|インポートセットのフィールド名|
|---|---|---|
|メーカー|test manufacturer|u_manufacturer|
|ベンダー|test vendor|u_vendor|
|名前|test company|u_name|
|Vendor type|Hardware|u_vendor_type|
![master_data_rest_explorer_post_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/e7614a0d-f4f8-7886-bbb0-888a6aa3d89d.png)
19.次のようにフィールドを定義します。
![master_data_rest_explorer_post_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/cfbe0522-6e72-b33e-d71b-0f5c892856e4.png)
20.フィールドを定義した後に送るデータを登録します。登録した後に「送信」ボタンを押下します。
![master_data_rest_explorer_post_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/a9845669-4eb7-9624-c781-b000da99141d.png)
21.送信すると戻りメッセージが下に表示されます。正しく登録された場合は「201 Created」です。
![master_data_rest_explorer_post_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/66bf0a11-a1f8-a66a-50c7-f52dc142af79.png)
22.実際にインポートセットテーブルを閲覧して登録されたことを確認します。
アプリケーションナビゲータから作成したインポートセットテーブル名+「.list」を入力します。今回は「u_import_company_data.list」です。
![master_data_rest_explorer_post_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/030dbe42-3133-e6bd-8f7a-418c7d9a32e2.png)
23.設定したデータのレコードが登録されているはずです。
![master_data_rest_explorer_post_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/2eab9347-450b-92c2-986f-d7de484165e7.png)
24.次に会社テーブルに登録されていることを確認します。
アプリケーションナビゲータに「core_company.list」を入力します。「core_company」は会社テーブル名です。
![master_data_rest_explorer_post_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/19b0a0e2-71ba-fed9-ef9e-4a36e57e3d5c.png)
25.正しく動作している場合は設定したデータのレコードが作成されています。
今回は「test company」を登録したので、名前欄に「test」を入力するとレコードが表示されます。
実テーブルに登録されているので削除します。
「test company」の左のチェックボックスをチェックします。
![master_data_rest_explorer_post_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/870f917b-1351-1f16-6874-8967cac90415.png)
26.「選択した行のアクション」を選択して、「削除」を選択します。
![master_data_rest_explorer_post_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/1d9a88df-4acd-a2eb-e18e-5e9c65402eff.png)
27.確認ダイアログが表示されるので「削除」ボタンを押下します。
![master_data_rest_explorer_post_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/4ffa3e58-abf6-7ef8-ea5d-7fa5d6fc9b6d.png)
28.同じように次のWebサービスインポートセットも作成します。

##場所テーブル

|名前|値|
|---|---|
|Webサービスインポートセット名|Import location data|
|ソーステーブル|Import location data [u_import_location_data]|
|ターゲットテーブル|cmn_location|

|フィールド名|値|インポートセットのフィールド名|結合|
|---|---|---|---|
|名前|test location|u_name|true|

##モデルテーブル
|名前|値|
|---|---|
|Webサービスインポートセット名|Import model data|
|ソーステーブル|Import modeldata [u_import_model_data]|
|ターゲットテーブル|cmdb_model|

|フィールド名|値|インポートセットのフィールド名|結合|
|---|---|---|---|
|メーカー|test manufacturer|u_manufacturer|false|
|名前|test model|u_name|true|
|モデル番号|test model number|u_model_number|false|
|モデルカテゴリ|Network Gear|u_cmdb_model_category|false|

##ハードウエア資産テーブル
|名前|値|
|---|---|
|Webサービスインポートセット名|Import hardware asset data|
|ソーステーブル|Import hardware asset data [u_import_hardware_asset_data]|
|ターゲットテーブル|alm_hardware|

|フィールド名|値|インポートセットのフィールド名|結合|
|---|---|---|---|
|表示名|test display name|u_display_name|false|
|会社|test company|u_company|false|
|名前|test department|u_department|false|
|部門|1|u_install_status|false|
|シリアル番号|test serial number|u_serial_number|true|
|場所|test location|u_location|false|
|モデル|test model|u_model|false|
|モデルカテゴリ|test vendor|u_vendor|false|

以上