Flow Designerによるcsvファイル自動インポートフロー

※本投稿は過去に弊社のHatena blog [MKIが解説するServiceNow開発blog](https://mki-blog.hatenablog.com/entry/2021/12/10/115545) に掲載した内容を再編集したものです。

# はじめに
みなさんこんにちは、三井情報株式会社です。

ServiceNowのCatalog Itemでは、申請者側に可変的な情報を入力してもらうために [Multi-row variable set](https://docs.servicenow.com/bundle/orlando-it-service-management/page/product/service-catalog-management/concept/c_ServiceCatalogVariableSets.html)（以下、MRVS）を使用するケースがあります。
しかし、 MRVS は1件ずつ登録や編集する形式ですので、入力してもらう情報が何十件、何百件となると申請者側へ負担がかかってしまいます。
そこで、申請者側の負担を軽減する方法として、申請者側 はcsvファイルに申請情報を登録し、そのcsvファイルをServiceNow内でインポートする形式を考え、今回Catalog Itemに添付されたcsvファイルを自動でインポートする処理を検証しましたのでご紹介したいと思います。
本記事では、添付されたcsvファイルの内容を会社テーブルにインポートする処理を例に説明させて頂きます。

# 今回利用する機能
Data Sources
Table Transform Map
Scheduled Data Imports
Flow Designer

# 設定方法
①	Data Sources
System Import Sets配下にあるData Sourcesを選択し、Newをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/3a9565fc-7cde-ec63-ba2b-134946007126.png)

Nameにcsvファイル名、Import set table nameに中間テーブル名を入力し保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/498ceae4-f455-6806-38ec-ccdd36829fa0.png)

フォーマットとなるcsvファイルを添付します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/1d0d1673-c7eb-ff4e-9e5d-35c772ee3a08.png)

csvファイルをロードし、中間テーブルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/8d8071a6-2e9e-ed35-fa01-c948b608c3ef.png)

②	Table Transform Map
Data Sourcesの関連リストにあるTransformsタブのNewをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/8e654618-a8d5-4c5b-b959-9efd7e5074e4.png)

NameにTable Transform Mapの名前、Source tableにData Sourcesの登録時に設定した中間テーブル、Target tableにインポート先のテーブルを設定し保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/32713b23-3dec-4e62-57ad-18e9670ff5d4.png)

Mapping Assistから項目のマッピングを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/787ee461-03e5-dadc-8620-30b42c69bc4c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/8d58c1e8-859c-3f4e-f346-cd12acd82f99.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/58b0cfc5-ecaa-ad26-b8af-c21a04d130c4.png)

③	Scheduled Data Import
Scheduled Import Sets配下にあるScheduled Importsを選択し、Newをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/a42adbfa-c3db-b53d-c679-58d61dd5c595.png)

NameにScheduled Data Importの名前、Data Sourceに①で作成したData Sourceを設定します。
今回はFlow Designerのタイミングでのみ実行するのでActiveをFalseに設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/5ece159f-6ca1-8ad8-b92e-cd87a9d431c5.png)

④	Flow Designer
③で作成したScheduled Data Importを実行するためのアクションを作成します。
NameとCategoryを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/2326e8da-b722-bb98-cea9-bbab020fdd5c.png)

Inputに設定する引数を設定します。
参照先のテーブルはScheduled Data Importテーブルを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/17de7451-0455-8e1e-3d1b-21759abaa4c8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/e541ca70-1c39-fad1-c5e3-52398c66e7d7.png)

Scriptのアクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/dffe2900-1d6c-9df9-d8db-a12e5b5fabfe.png)

Input Variables にInputsで設定したScheduled Data ImportのデータのSys ID を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/cda4b65c-055c-c2c2-200e-03cf78e1b72e.png)

Scriptには以下の通り設定し保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/e6ee4fc1-fdf6-d997-bf1e-1df693217c44.png)

```
(function execute(inputs, outputs) {
  var exportGr = new GlideRecord('scheduled_import_set');
  exportGr.addQuery('sys_id', inputs.scheduledDataImport);
  exportGr.query();
  
  if (exportGr.next()) {
    gs.executeNow(exportGr);
  }

})(inputs, outputs);
```

アクションの作成が完了したら、次はフローの作成を行います。
全体としては以下の通りですが、Action 2のCreate Catalog Taskは運用担当者が申請内容を確認する想定で追加したもので、自動インポートの処理に関わるものではありませんので省略しても問題ありません。
※本記事ではCreate Catalog Taskのアクションの作成は省略しております
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/3456603a-9649-0875-bd40-24c5f10e3863.png)

Flowを作成し、TriggerにはService Catalogを設定します。
ActionからGet Catalog Variablesを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/4e504226-41d3-9d7f-2ada-1cb78c35c1f7.png)

Submitted RequestにはTriggerのRequest Itemを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/ce400a24-fd94-70a8-e668-435a6a5ee298.png)

Template Catalog Itemに申請に使用するカタログアイテムを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/7b2430e9-6551-81d2-d479-9c869721956b.png)

次に、申請の添付ファイルの情報を取得するための処理を実装します。
ActionからLook Up Attachmentを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/69fe63bf-884c-0601-7f8d-64285a196342.png)

Source RecordにはTriggerのRequest Itemを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/2c1d7b26-8a0f-6111-1dc6-8628083a2f79.png)

次に、申請の添付ファイルの情報をもとにAttachmentテーブルから情報を取得するための処理を実装します。
ActionからLook Up Attachmentを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/0168115b-b720-a31c-1203-bea45ec5b9d6.png)

TableにはAttachmentテーブル、ConditionにはSys IDが一つ前のActionで取得した申請の添付ファイルのSys IDと一致するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/7a4a984f-508d-71b0-e952-34af74f717e7.png)

次に、すでにSource Recordに添付されているファイルを現在の申請の添付ファイルを複製する前に削除する処理を実装します。
ActionからDelete Attachmentを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/1ccc46ef-1b55-4669-73fb-bebdf11bf856.png)

Source Recordには①で作成したData Sourceのレコード、TableにはData Sourceテーブルを設定します。
Delete All Attachments?はTrueにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/3a013680-065d-6454-75d8-40a2490ca275.png)

次に、申請の添付ファイルをData Sourceのレコードに複製を行います。
ActionからCopy Attachmentを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/1abb22c7-0577-0842-f721-b295333a9ac3.png)

Source Attachment Recordには二つ前のActionで取得したAttachmentテーブルでの申請の添付ファイルのレコード、Target Recordには①で作成したData Sourceのレコード、TableにはData Sourceテーブルを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/baafe6fe-df7f-6395-6271-5dd467c73de1.png)

最後に、Scheduled Data Importを実行するアクションを追加します。
Actionから④の最初に作成したアクションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/1692cef2-87bc-32c9-b56d-b8d419846a02.png)

Scheduled Data Importには、③で作成したScheduled Data Importを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599975/4ce80efb-0b8c-c2b3-f506-8638316e52dd.png)

実装は以上になりますので、実際にサービスカタログから申請を行い、自動でインポートされていれば成功です。

# おわりに
今回の検証により、 Catalog Item で可変的な情報を申請する方法として、MRVS以外にcsvファイルでのインポートも採用できるようになりました。
最後まで読んでいただき、ありがとうございました。

三井情報株式会社
ソリューション技術本部
ITマネジメント技術部
第一技術室
甲田善寛