実践ServiceNow - テーブルを継承して新フォームと一覧を作成する

#概要
該当するServiceNow標準のデータベーステーブルが存在しない場合はテーブルを作成することができます。
ServiceNowでは次の3方法のテーブルを作成することができます。今回は既存のServiceNowテーブルを継承して新規に入力フォームと一覧を作成します。

| 項番 | 方法 | 説明  | 長所   | 短所 |
|:----|:------------|:------------|:------------|:------------|
| 1.  | 完全に新規作成        | 独自にテーブルを作成する| 自由に必要な列のみの列を定義することが可能 | ServiceNowのライセンスが必要         |
| 2.  | 既存テーブルを継承     | 既存のServiceNowテーブルを継承する| 必要な列のみを追加することができる。親テーブルの機能を継承して利用できる。ServiceNowのcmdbテーブルを継承する場合は追加ライセンスは不要  | 不要な列も含まれる |
| 3.  | 既存テーブルを編集     | 既存のServiceNowテーブルを編集する| テーブル数が増えない。追加ライセンスは不要 | ServiceNowのバージョンアップにエラーになる可能性がある。ServiceNow標準スクリプトがエラーになる可能性がある。編集できない場合もある。         |

#完成イメージ
例としてServiceNow標準のcmdb_ciテーブルを継承してネットワーク回線を管理するnetwork circuitテーブルを作成します。Network CircuitテーブルはTelecommunications Assurance Workflowsで利用されるテービルです。ServiceNowから次ぎのページから無償でインストールすることもできます。「CMDB CI Class Models」にはnetwork circuit以外のテーブルも含まれている可能性があります。またServiceNowは非サポートですので本番環境にインストールする場合は十分にテストとServiceNowのバージョンアップの影響の検討も行うようにしてください。
https://store.servicenow.com/sn_appstore_store.do#!/store/application/ae99d84b2320330006c0110d96bf65b3/1.32.0

**入力フォーム** ：
![extend_table_0_a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/e12dc380-b05b-f6b5-db4b-25557f29ff1f.png)

**一覧**：
![extend_table_0_b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6d9ab480-e920-0a45-187f-966d58cb1e60.png)


#手順
本記事では①データベーステーブルの作成、②フォームの作成、③一覧のカスタマイズの手順から構成されます。
##データベースの拡張
先ずはcmdb_ciテーブルを継承してu_network_circuitテーブルを定義します。
ServiceNowを日本語モードで作成すると列名が日本語名になり他言語でも日本語で表示されます。それを避けるために他言語でも利用できるようにするためにどの言語でも利用できる英語モードで作成します。

###テーブルの基本情報を定義
ナビゲータに「tables」を入力すると表示される「Tables & Columns」を選択します。<br/>![extend_table_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/1b1f9dc7-73a1-cb1d-a762-f73f00833d7e.png)
1. 新規にテーブルを選択します。「Create Table」ボタンを押下します。<br/>![extend_table_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/1ea11fb1-6322-37cc-7f40-e30965138650.png)
2. Labelを「Network Circuit」を入力します。自動的にNameに「u_network_ciruit」が入力されます。Labelはページに表示される文字列で、NameはServiceNow内部（スクリプト等）で利用する文字列です。ユーザが作成する内部テーブル名は「u_」から始めるようになります。<br/>Extends Tableに拡張するテーブル名を入力します。「cmdb_ci」を入力してプルダウンリストから「Configuration Item」を選択します。<br/>![extend_table_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/a3261d58-a061-fe8d-4ddc-bff107386a11.png)
3. 設定を保存します。ヘッダー領域を右クリックして「Save」を選択します。<br/>![extend_table_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/4b5790d4-3853-8095-b39d-5d04d8914341.png)
4. 次のように設定されていることを確認します。<br/>![extend_table_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/f6032caf-ac0e-3c9f-49d3-5a3efa2ed5f3.png)
###列名の定義
テービルの列を定義します。Tables & Columnページからも列を定義することは可能ですが、ページから列毎に定義する必要があります。
CI Class Managerページからだと一覧から列を定義する方が簡単に定義することができるのでこちらで今回はそちらで定義します。
5.ナビゲータに「ci class」を入力すると表示される「CI Class Manager」を選択します。<br/>![extend_table_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6c8911f6-66cb-59aa-47c8-8cd4de41d093.png)
6.「Hierachy」ボタンを押下します。<br/>![extend_table_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/ec678356-976b-47f5-287c-6f030dafabfc.png)
7.検索フィールドに「circ」を入力すると表示される「Network Circuit」を選択します。「Network Circuit」は機能情報の定義で入力したLabelの値です。<br/>![extend_table_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/20f51bc1-f4b3-da44-b224-f26c15dfb1b0.png)
8. Configuration Itemの下に表示される「Network Circuit」を選択します。基本情報の設定で継承するテーブルをConfiguration Itemに設定したため、Network CircuitはCOnfiguration Item直下に表示されます。<br/>![extend_table_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/42c3a35e-d78e-25d1-e6d9-192d0ea8c781.png)
9. 左メニューから「Attributes」を選択します。Display Nameは基本情報に設定したLabelの値です。Table NameはNameの値です。<br/>![extend_table_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/d976120f-6931-3c96-0a9c-cf0ba8ca18c1.png)
10.列を定義します。「Added」ボタンを押下します。下のテーブルで列名を定義します。列を追加する場合は「Insert a new row...」をクリックします。<br/>![extend_table_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/c6668808-e02e-1224-53a1-d0201d4c8b3d.png)
11.列名を入力します。例では列「Access Type」にしています。入力した後に右に表示される緑色のチェックをクリックします。<br/>![extend_table_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/ec445d06-5d50-e1c4-35b3-ff9d55633e49.png)
12. 同じようにして他の列も定義します。再び「Insert a new row...」をクリックします。<br/>![extend_table_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/472fb8b1-cb8a-87df-6129-60fb633a113d.png)
13. 例では例「aEndCTP」を入力します。入力した後に右に表示される緑色のチェックをクリックします。<br/>![extend_table_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/72a349fe-86b6-df11-1829-079099d6eb1f.png)
14. Column labelはフォームなどに表示される文字列です。Column nameはスクリプトなどで使う文字列です。今回はデフォルトで入力されたColumn nameを変更します。<br/>「u_anedctp」をクリックします。<br/>![extend_table_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/17803b51-ce58-deb0-9d12-436ae3ce5232.png)
15.半角スペースを入力して「u_aend_ctp」に変更します。変更した後に右に表示される緑色のチェックをクリックします。<br/>![extend_table_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/49ee9c47-7f1a-bfbe-79fa-b8c9bd68aefc.png)
16. 同じようにして他列を追加します。Column nameと同様にTypeとMax lengthもデフォルト値から変更します。<table><tr><th>項番</th><th>Column label</th><th>Column name</th><th>Type</th><th>Max length</th></tr><tr><td>1</td><td>Access Type</td><td>u_access_type</td><td>String</td><td>40</td></tr><tr><td>2</td><td>aEndCTP</td><td>u_aend_ctp</td><td>String</td><td>40</td></tr><tr><td>3</td><td>aEndPort Logical Name</td><td>u_aend_port_logical_name</td><td>String</td><td>40</td></tr><tr><td>4</td><td>aEndPTP</td><td>u_aend_ptp</td><td>String</td><td>40</td></tr><tr><td>5</td><td>Bandwidth - Downstream</td><td>u_bandwidth_downstream</td><td>String</td><td>100</td></tr><tr><td>6</td><td>Bandwidth - Upstream</td><td>u_bandwidth_upstream</td><td>String</td><td>100</td></tr><tr><td>7</td><td>Inner VLAN</td><td>u_nner_vlan</td><td>String</td><td>80</td></tr><tr><td>8</td><td>IP Addressing type</td><td>u_ip_addressing_type</td><td>String</td><td>50</td></tr><tr><td>9</td><td>Network Type</td><td>u_network_type</td><td>String</td><td>100</td></tr><tr><td>10</td><td>Outer VLAN</td><td>u_outer_vlan</td><td>String</td><td>80</td></tr><tr><td>11</td><td>Product Type</td><td>u_product_type</td><td>String</td><td>40</td></tr><tr><td>12</td><td>Resilience</td><td>u_resilience</td><td>True/False</td><td>40</td></tr><tr><td>13</td><td>Service Instance Identifier</td><td>u_service_instance_identifier</td><td>String</td><td>40</td></tr><tr><td>14</td><td>VLAN_ID</td><td>u_vlan_id</td><td>String</td><td>40</td></tr><tr><td>15</td><td>zEndCTP</td><td>u_zend_ctp</td><td>String</td><td>80</td></tr><tr><td>16</td><td>zEndPort Logical Name</td><td>u_zend_port_logical_name</td><td>String</td><td>80</td></tr><tr><td>17</td><td>zEndPTP</td><td>u_zendptp</td><td>String</td><td>80</td></tr>
</table>
17.列を追加した後に「Save」ボタンを押下します。<br/>![extend_table_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/d18ee8f2-386d-233f-952e-c85781707ff0.png)
![extend_table_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/f89938b5-5310-b62f-7dca-7cedfff0343f.png)

##フォームの作成
次ぎにデータを入力／変更するフォームを編集します。
18.ナビゲータに「network」を入力して表示される「Network Circuits」を選択します。<br/>![extend_table_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/7c7fce1f-716f-76f8-777f-1ae50af3361f.png)
19.フォームを表示するために「New」ボタンを押下します。<br/>![extend_table_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9f41b0d0-f10f-1da5-8162-d08db91f1b12.png)
20.Additional Actionsアイコンを右クリックして「Configure」>「Form Design」を選択します。<br/>![extend_table_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/91117f94-b82c-5b1c-6dfd-f5e260a34528.png)
21.2列に表示するようにします。<br/>「1 Column」のプロダウンを開き「2Column」を選択します。<br/>![extend_table_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/7ef779e6-4501-2f68-203f-ecdf595b4a2b.png)
22.デフォルトフォームにはCMDB CIフィールドが配置されます。Network circuitに不要なフィールドを削除します。次のフィールドの右に表示されている×ボタンを押下します。押下するとフィールドは消えます。<br/>次のフィールドを削除します。
<table><tr><th>項番</th><th>フィールド名</th></tr><tr><td>1</td><td>Assigned to</td></tr><tr><td>2</td><td>Category</td></tr><tr><td>3</td><td>Fault count</td></tr><tr><td>4</td><td>Status</td></tr></table>
![extend_table_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/a18d4155-e3b3-ee04-1746-943df1f74808.png)
23.削除した後は次のようになります。<br/>![extend_table_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6eaf1c81-9ec6-b1c0-ada0-bd902f0aa2a8.png)
24.network circuit用のフィールドを追加します。<br/>左側に表示されるフィールド一覧からOperational statusをフォームにドラッグ＆ドロップします。<br/>![extend_table_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/f1a98b15-820d-0b71-28d4-bc3d317f28ad.png)
25.同じように「Resilence」、「Access Type」、「Product Type」、「Vendor」、「Approval group」、「Support group」をフォームに配置します。<br/>フィールドを配置した後にフィールド「Name」を「CI Circuit ID」に変換します。<br/>フィールド名「Name」の右の歯車アイコンをクリックします。<br/>![extend_table_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b3664418-c92d-82b6-5d2d-e917924f5463.png)
26.Labelの値を「Circuit ID」に変更します。変更した後に右上の×ボタンを押下してダイアログボックスを閉じます。<br/>![extend_table_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3a6e374b-6ed7-9197-fffa-e55e4b7f5735.png)
27.次のようになります。<br/>下に別のセクションを追加します。右上の＋アイコンをクリックします。<br/>![extend_table_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/dfa18101-a7c4-c12a-6ff9-717a25068649.png)
28.新しいセクションが追加されます。<br/>![extend_table_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/7a7de7fe-cb32-a60c-2aca-0eb94cdb4767.png)
29.追加するフィールを新しいセクションに配置します。<br/>![extend_table_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/7b9bc66f-736b-edf0-cf92-ea64b10c1806.png)
30.セクション名を「Configuration」に変更します。「New Section」をクリックします。<br/>![extend_table_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/660c5bde-535a-7cf0-4959-a8d88b60dcb0.png)
31.「Configuration」に変更します。変更した後は「Save」ボタンを押下します。<br/>![extend_table_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9f1d9cb4-1f4b-ec98-28ac-8e7452c5d60c.png)
32.次のようなフォームが表示します。<br/>![extend_table_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/5a1d004d-a5af-e7bf-2e48-089485c8bbc3.png)

##一覧の編集
一覧に表示する列を変更します。
32.一覧を表示します。ナビゲータに「network」を入力して表示される「Network Circuits」を選択します。<br/>![extend_table_60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/1f490f55-ff91-7482-cb06-cdde57e086ef.png)
33.一覧の左上の歯車アイコンを選択します。<br/>![extend_table_61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/196d6cf5-85fb-ca2b-9b12-96494fa815d4.png)
34.不要な列を一覧から外します。<br/>Selected1一覧から「Manufacturer」を選択して「<」ボタンを押下します。<br/>![extend_table_62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6255ab0b-a94a-9ca4-c061-51c2538f1c53.png)
35.同じように他列も除外します。<br/>![extend_table_63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3c6c85c4-d8ee-18e5-d569-71dca24bf59c.png)
36.列を追加します。左のAvailable一覧から「VLAN ID」を選択して「>」をクリックします。右側のSelected一覧に表示されます。<br/>![extend_table_64.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/67d91223-8c2c-18bf-9726-0698a6c10e9e.png)
37.同じように他列も右のSelected一覧に移動します。<br/>列を移動した後に「OK」ボタンを押下します。これで一覧に表示する列の設定は完了です。<br/>![extend_table_65.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/0503fb73-5f7f-4763-f4e5-df56c4a650d7.png)

以上