【ServiceNow】Service Operation Workspace for ITSMについて

# はじめに
みなさんこんにちは、三井情報株式会社です。
本記事ではServiceNowのWorkspaceの1つである「Service Operation Workspace for ITSM」についてご紹介します。

# Workspaceとは
まずはじめに「Workspace」とは、以前のAgent Workspaceに代わる機能で、複数のタスクを同時に実行できる画面機能のことです。特定の役割やタスクに合わせて、よりカスタマイズされたユーザーエクスペリエンスを提供することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/1af72a5d-8106-22d8-6387-4eff2fb3da2d.png)

# Service Operation Workspaceとは
Service Operation Workspace（以下、SOW）とは、主にサービスデスクや受付担当などの役割を担うユーザー向けに提供される機能で、複数のタスクに効率よく対応できるように構成されています。画面をリロードすることなく、タブやツールバーを使ってインシデントなどのタスクを行き来できるのが特徴です。SOW for ITSMは、サービスや運用の健全性をリアルタイムで監視することに重点を置いており、プロセスマネージャーやIT運用チームに最適な機能を提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/e4d36547-a4f6-f5d1-4a92-1423663f84ea.png)

# UI Builderとは
UI Builderでは、サービスポータルデザイナーのように、画面上に配置するコンポーネントの設定や、CSSなどのカスタマイズを行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/5e207133-02ec-5f63-4f41-6f8ad258ebe2.png)

ただし、SOWはOOTB（Out of the Box）のページおよびその構成パーツには保護ポリシーが適用されているため、編集することはできません。
編集を行うには、SN社の社員のみが持つ「maint」ロール（maintenanceの略）が必要となります。

参考：
https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0787466

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/6d507068-9c96-ab08-8dcf-2800579f588c.png)

上記の保護ポリシーが適用されているため、OOTBを修正する場合はクローンする必要があります。そこで今回はUI Builderでは編集せず、OOTBの状態を残すためにUX関連のレコードをカスタマイズする方法を2パターンご紹介いたします。

# UX List Menu Configurationとは
まず1つ目に、UX List Menu Configurationsです。
UX List Menu Configurationsテーブル（sys_ux_list_menu_config）配下の「UX List Categories」と「UX Lists」から編集が可能です。UX List Menu Configurationsでは、レコードを表示するリスト画面の内容を編集できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/bddab0af-b4c0-bbfb-1361-c9f157a32941.png)

「UX List Categories」が親カテゴリで、「UX Lists」が子カテゴリとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/e19c9fb2-ec60-0cad-50bd-85021c664622.png)

「New（新規）」ボタンを押すことで、新しいタイプのレコードを作成できます。ここでは、タイトルを「Test」とし、一番先頭に表示されるように「Order」を「0」に設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/91dc4b4a-f182-0227-84dd-4e1abbc62bcb.png)

次に、「UX Lists」タブを選択し、右上の「New（新規）」ボタンを押すことで、子カテゴリを作成できます。子カテゴリは、以下のスクリーンショットにある「Assigned to you」「Active」「All」に該当する部分になります。※「Interactions」が親カテゴリに該当します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/056bb148-f34a-43f2-cf0f-1f222f65e5b6.png)

子カテゴリについて、タイトルを「User」とし、親カテゴリには先ほど作成した「Test」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/86693340-9d69-e104-7fbe-173dddcb20ab.png)

「Submit」を押下してレコードを保存した後、SOWのツールバーからリストを選択し、新しいカテゴリが追加されていることを確認します。設定どおり、追加したユーザーリストが表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/1246d281-c31f-27a7-b646-3c555671a908.png)

# UX Page Propertyとは
UI Builderを使わないもう1つのカスタマイズ方法として、UX Page Propertyがあります。UX Page Propertyでは、参照テーブルやタブの上限、ツールバーの内容などをカスタマイズできます。レコードには、システムプロパティのように値にsys_IDを入れるものと、JSON形式で設定するものがあります。今回は、JSON形式で記述された以下のレコードについてご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/dbc3838c-1756-40c6-9a23-48036ee44264.png)

図の4つのレコードの値（Value）はJSON形式で記述されています。この値を書き換えることで、それぞれ画面上の該当のメニュー表示や設定を変更することができます。本記事では一例をピックアップしてご紹介いたします。

以下の「chrome_tab」について解説します。
「chrome_tab」ではSOWで表示するページ上部のタブの設定を定義しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/4bc2ddc9-a498-602e-f760-1dc2632d5b03.png)


以下は「chrome_tab」の値（Value）です。

```JSON
{
    "contextual": [
        "record",
        "kb_view"
    ],
    "newTabMenu": [
        {
            "label": {
                "translatable": true,
                "message": "New Interaction"
            },
            "routeInfo": {
                "route": "record",
                "fields": {
                    "table": "interaction",
                    "sysId": "-1"
                },
                "multiInstField": "sysId"
            },
            "condition": {
                "tableDescription": {
                    "table": "interaction",
                    "canCreate": true
                }
            }
        },
        {
            "label": {
                "translatable": true,
                "message": "New Incident"
            },
            "routeInfo": {
                "route": "record",
                "fields": {
                    "table": "incident",
                    "sysId": "-1"
                },
            "multiInstField": "sysId"
            },
            "condition": {
                "tableDescription": {
                    "table": "incident",
                    "canCreate": true
                }
            }
        },
        {
            "label": {
                "translatable": true,
                "message": "New Change Request"
            },
            "routeInfo": {
                "route": "create-change-request-page",
                "fields": {},
                "multiInstField": ""
            },
            "condition": {
                "tableDescription": {
                    "table": "change_request",
                    "canCreate": true
                }
            }
        }
    ],
    "maxMainTabLimit": 10,
    "maxTotalSubTabLimit": 30
}
```
このスクリプトでは"label"から始まる項目群で3つに分けられ、以下のような「New Interaction」「New Incident」「New Change Request」という3つの選択肢を構成しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/b0abeb21-98bc-021f-098a-51d7d6b37f5c.png)


おおまかな項目の内容は以下になります。
- Translatable: 翻訳の可否を指定できます
- Message: ここに表示されるタイトルを入れられます
- Route: 「record」を選択するとレコードを表示できます
※「New Change Request」では変更管理の新規作成ページを表示するように指定しています
- Table: 表示するレコードの参照先となるテーブルを指定できます
- sysId: 「-1」に設定することで新規レコードの作成ができます
- multiInstField: routeがrecordの場合、sysIdを指定します
※「New Change Request」では値が設定されていません
- table: 編集・格納するテーブルを設定できます
- canCreate: 新規作成できるかどうかを設定できます
また、末尾でタブの数の上限を設定しています。

もしタブを新規に追加する場合は、以下のような記述を追加することでタブを追加できます。ここでは変更管理の新規レコードを画面に表示するタブを設定します。

```JSON
{
    "label": {
        "translatable": true,
        "message": "Create Change Request"
    },
    "routeInfo": {
        "route": "record",
        "fields": {
            "table": "change_request",
            "sysId": "-1"
        },
        "params": {
            "query": "active=true"
        },
        "multiInstField": "sysId"
    },
    "condition": {
        "tableDescription": {
            "table": "change_request",
            "canCreate": true
        }
    }
}
```

上記を追記した結果、タブの選択肢に「Change Request」が追加されました。選択することで変更管理の新規レコードが作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/d185a7d0-dc27-8b11-4b1e-5e855f930259.png)

# おわりに
今回は、Service Operation Workspace for ITSMについてご紹介しました。
本記事では2種類のカスタマイズ方法をご紹介しましたが、今後もアップデートでの変更があることを考えると、基本的にはOOTBの状態でSOWを使用するのが最適だと思われます。
それでもカスタマイズが必要となった際には本記事が参考になれば幸いです。
最後までお読みいただき、ありがとうございました。