初めてのServiceNowデータ移行!「失敗しないTransform Map」の作り方

技術

Now Platform

社内業務に関するシステムを一元化して運用・管理できるクラウドサービス「ServiceNow」。
株式会社KYOSOでは、これまでの豊富な運用経験をもとに、ServiceNowの企画立案から運用・保守、内製化までトータルでサポートしています。

はじめに

既存のシステムをServiceNowに移行する場合、そのシステムで作成していたデータをServiceNowへ移行する作業が必要になります。ServiceNowは外部データを取り込む方法がいくつも用意され、柔軟に対応できるようになっていますが、外部データを単純にインポートするだけではうまくいきません。

ServiceNowの特徴の一つとしてデータの持ち方があります。データはSys IDという32文字の英数字で管理され、値も表示に使う値と内部用の値に分かれています。この管理方法によりデータが正確に保護されますが、既存のシステムをServiceNowに移行する場合、そのシステムで作成していたデータをこの形式に合わせて変換してインポートする必要があります。
ここでは、従来のシステムから抽出したインシデントデータをServiceNowに取り込む代表的な方法を紹介します。

検証環境

本記事で紹介している内容は、以下の環境で検証したものとなります。
 ServiceNow: デモインスタンス
 バージョン:xanadu
 ロール:admin

概要

データの取り込み方法としては、Import Set, Transform Map(インポートセット、変換マップ)という2つの機能を使用します。
既存のシステムで管理していたインシデントデータをExcel形式で出力し、ServiceNowのインシデントテーブルにインポートします。
インポートの過程でデータを正規化し、整合性を取るように処理します。

事前確認と準備

まず初めに、入力ファイルのインシデントデータとして、下記画像のEXCELファイルを用意します。
※EXCELファイルは[.xls]の拡張子で用意します。([.xlsx]の場合、日本語かなが入ってしまう不具合があります。KB0598407

ServiceNowのインシデントレコードのレイアウトは下記画像のようになっています。

今回の移行作業では、下記の内容で入力ファイルをインシデントの各フィールドに設定します。

Assignment groupは必須ではありませんが、空欄になっているとレコードを処理するグループがおらず放置されかねないため、インシデントレコードを管理する上で重要なフィールドです。
今回の入力ファイルには該当する設定フィールドが存在しないため、サービスの内容からAssignment groupを設定する変換テーブルを用意します。

このテーブルとデータの作成は以下の手順で行います。

1. テーブルの作成
フィルターナビゲータに以下を入力し、テーブルリスト画面へ遷移します。
パス:[System Definition] > [Tables]
(日本語:システム定義 > テーブル)

「New」ボタンをクリックします。

以下の内容を入力し、「Submit」ボタンをクリックします。

  • Label: Service Group Map
  • Name: u_service_group_map (自動設定)
  • Groupフィールド:Groupテーブルを参照
    (同名のテーブルが複数存在する場合はName = “sys_user_group”を選択します)
  • Serviceフィールド:Serviceテーブルを参照
    (同名のテーブルが複数存在する場合はName = “cmdb_ci_service”を選択します)

※フィールドのTypeを「Reference」にすることで、入力内容がReferenceに設定されたテーブルの内容とリンクするようになります。

テーブルが作成されたことを確認します。

2. レコードの作成
作成したテーブルのフォームを開き、下方にあるRelated Links(関連リンク)のShow Listをクリックします。

「New」ボタンをクリックし、レコードを以下のように作成します。

  • Service: Email, Group: Network
    → サービスが”Email”の場合、アサイン先グループに”Network”グループを設定
  • Service: Slack, Group: Software
    → サービスが”Slack”の場合、アサイン先グループに”Software”グループを設定
  • Service: IT Services, Group: IT Service Group
    → サービスが”IT Services”の場合、アサイン先グループに”IT Service Group”グループを設定

該当するレコードが存在しない場合は、「Service Desk」グループを割り当てることで、アサイン先グループが未設定にならないようにする必要がありますが、これは別の処理で行います。

データのインポート手順

フィルターナビゲータに以下を入力し、テーブルリスト画面へ遷移します。
パス:[System Import Sets] > [Load data]
 (日本語:システムインポートセット > データのロード)

Label、Fileを設定し、「Submit」ボタンをクリックします。

  • Label: Incident Load
  • File: Import.xls

Labelはインポートテーブル名、Fileは入力ファイルです。インシデントテーブルへ直接インポートは行いません。

ロードが完了すると結果が表示されるので、Stateが”Complete”、Completion codeが”Success”、insertsが入力件数と同じであることを確認します。

問題なければ、作成されたIncident Loadテーブルを確認するため、「Loaded data」を押下します。

ロード先のテーブルのリストレコードが表示されるため、フィールドタイトルで“右”クリック→Configure→Table を選択します。

Incident Loadテーブルのレイアウトが表示されるため、テーブルのNameと各フィールドのColumn nameを確認します。この名称が後のScriptの作成で必要になります。

  • Name: u_incident_load
  • 緊急度: u_rplcd_n_ascii_1370388648
  • 影響度: u_rplcd_n_ascii_1862564885
  • 内容: u_rplcd_n_ascii_949681716
  • タイトル: u_rplcd_n_ascii_1917070730
  • ステータス: u_rplcd_n_ascii_477280941
  • サービス: u_rplcd_n_ascii_1738576146

Column Nameは入力ファイルの列名から判別しやすい名称が自動的に設定されますが、ファイルの列名が日本語になっているため、ascii変換によるランダムな名称になっています。可読性を高めるため列名は英語にしておくことをお勧めします。

Callerに設定する「ITIL User」を確認するため、フィルターナビゲータに以下を入力し、ユーザーテーブルのリスト画面へ遷移します。
パス:[System Security] > [Users]
 (日本語:システムセキュリティ > ユーザー)

ユーザーテーブルのリストレコードが表示されるため、User ID=”itil”を検索し、表示されたレコード上で“右”クリック→Copy sys_id を選択します。内部メモリにsys idが書き込まれるため、メモしておきます。

次にロードデータにService Group Mapに存在しないサービスが存在した場合、Assignment groupに「Service Desk」グループを設定するため、そのsys idを確認します。
フィルターナビゲータで以下を入力し、グループテーブルのリスト画面へ遷移します。
パス:[System Security] > [Users and Groups] > [Groups]
 (日本語:システムセキュリティ > Users and Groups > グループ)

グループテーブルのリストレコードが表示されるため、Name=”Service Desk”を検索し、表示されたレコード上で“右”クリック→Copy sys_id を選択します。内部メモリにsys idが書き込まれるため、メモしておきます。

Loadしたデータの変換マップを作成します。
フィルターナビゲータで以下を入力し、Import setテーブルのリスト画面へ遷移します。
パス:[System Import Sets] > [Advanced] > [Import Sets]
 (日本語:システムインポートセット > 詳細 > インポートセット)

該当するImport setを選択します。

表示されたフォームの下方にあるRelated Links(関連リンク)のTransformをクリックします。

以下の内容を入力し、「Submit」ボタンをクリックします。

  • Name: Incident Transform Map(任意の名称)
  • Run business rules: On(デフォルト。インシデント番号の採番とPriorityの設定をするため)
  • Target table: Incident [Incident]
  • Run Script: ON

Script に下記画像のように記述します。このスクリプトではCaller, Service, Assignment group, Status, Impact, Urgency, close_code, close_notesを設定しています。

作成したTransform mapを編集します。
フィルターナビゲータで以下を入力し、Transform mapテーブルのリスト画面へ遷移します。
パス:[System Import Sets] > [Administration] > [Transform Maps]
 (日本語:システムインポートセット > アドミニストレーション > 変換マップ)

作成したTransform mapを選択します。

フォームの下方にあるRelated Links(関連リンク)のMapping Assistをクリックします。

Mapping AssistのField Mapにて、以下の内容でマッピングし、「Save」ボタンをクリックします。

  • 内容 ⇔ Description
  • タイトル ⇔ Short Description

[インポートデータを扱う方法について]
ServiceNowはSys IDで管理されているため、データが作成されていないとそのデータを他のレコードが扱うことができません。インポートデータを管理したり、マスターデータのように他のレコードに影響のあるデータの場合、インポートが完了してレコードのSys IDが作成された後に、他のレコードを更新するなどの処理を追加する必要があります。
Transform Mapではデータのインポート後、継続処理を追加することが可能です。ここではインポートしたレコードが分かるログを出力するようにします。
Transform mapの関連リストで、「Transform Script」タブを選択し、「New」ボタンをクリックします。

Whenを「onAfter」、Scriptを記述し、「Submit」ボタンをクリックします。

データインポートの実行

Transform mapのRelated Links(関連リンク)のTransformをクリックします。

Import set と Transform mapの選択が正しいことを確認し、「Transform」ボタンをクリックします。

Stateが”Complete”、Completion codeが”Success”と表示され、正常に完了することを確認します。

インシデントレコードが正しくインポートできていることを確認します。
パス:[Incident] > [All]
 (日本語:インシデント管理 > すべて)

ログが出力され、インシデント番号が出力できていることを確認します。
パス:[System log] > [All]
 (日本語:インシデント管理 > すべて)

さいごに

Import setとTransform mapを使用することで、データを柔軟に移行でき、さらに複雑なデータ加工を行うことが可能になります。
また、スケジュール機能などもあるため、定期的に移行ファイルを用意し、処理を起動することで、移行作業を自動化することも可能です。

最後まで閲覧いただき、ありがとうございました。
あなたにとって有益な情報を提供できたのであれば、大変嬉しく思います。


参考

投稿者プロフィール

H.S
H.S
某大手企業の情報システム部様にて、ServiceNowによるサービスデスクを担当し、ITSMの業務を行っていました。現在さらなるスキルアップに向け勉強中です。

保有資格
- ServiceNow Certified System Administrator
- ServiceNow Certified Application Developer
- ServiceNow Certified Implementation Specialist - IT Service Management
- ServiceNow Certified Implementation Specialist - Customer Service
Management

※ServiceNow®は、米国および/またはその他の国における ServiceNow, Inc.の商標または登録商標です

TOP