ServiceNow Flow Designerで複数のレコード内容を処理する

#概要
ServiceNowのFlow Designerで短時間でフローを定義することはできますが、グローバル変数の概念がないため、標準Actionでは複数レコードの内容を一つの変数に纏められません。しかし、カスタムActionでレコードを処理するようにしたらすることが可能です。

次のようなフローを作成します。「For Each Item in」はログ出力用のActionなので、実際のフローには不要です。
![flow_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6a3a9601-2735-9bae-74bb-9228d22fb7b4.png)

#Action
先ずはフローで利用するカスタムアクションを作成します。
1.例ではメインフローでIncidentレコードを抽出しているのでActionには複数のIncidentレコードが引き渡されます。Typeは「Records.incident」になります。
![action_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/8ed01ce3-492a-781f-47e7-8b8e93a64037.png)
2.スクリプトは次のようになります。WhileループでIncidentレコードをループして出力用の配列に追加します。

```
(function execute(inputs, outputs) {
  var inc_array = [];
  while (inputs.incidents.next()) {
    var info = {};
    info.number = inputs.incidents.getValue("number");
    inc_array.push(info);
  }
  outputs.incident_info = inc_array;
})(inputs, outputs);
```

![action_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/17b9a586-9c23-5fbd-7ed9-751db501f255.png)
3.Actionの出力は作成した配列になります。
![action_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3f3d3e0a-3dfe-9ad2-1cf8-faa227802a3e.png)

![action_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/72f4b5f7-5636-3f70-dcbc-079961b03ba9.png)

#フロー
作成したActionを呼び出すフローを作成します。
1.テスト用ActionなのでPublishをしません。デフォルトではPublishされたいないActionは選択できないので、設定を変更します。右上の３の点をクリックして「Configuration」を選択します。
![flow_config_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b2cfd379-4cb9-f25c-0b1e-90b5f665caef.png)
2.「Show draft actions」を有効にします。これでPublishされていないActionも選択可能になります。
![flow_config_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b17f2515-98f1-98ca-ec9c-87cdf36c781e.png)
3.次のようなフローを作成します。
![flow_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/571e82b8-d058-c2c0-15eb-58e171e48e36.png)
4.テスト用なのでTRIGGERは一回のみ実行するようにします。時間を指定しないといけないのですが、適当な時間を入力しても即時にテスト実行できます。
![flow_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3ab4b762-8d39-3f13-d4ff-411230b3ffca.png)
5.Incidentターブルからレコードを検出するために「Look Up」Actionを追加します。設定条件に制限はありますが、出来る限りここで条件を絞ります。例えば朝６時に実行するフローで１時から６時までのレコードを取得する場合は「Opened」「on」「Today」にします。それでActionの中で0から１時までの時間のレコオードを対象外としてます。
![flow_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/4e7f0714-8ac7-5143-2b39-d1ad43ad1a50.png)
6.作成したActionを呼び出します。引数には上のActionで取得したレコードを渡します。
![flow_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/895d8828-7c4a-0e73-f0bf-0f2a822b3cd5.png)
7.これ以降は取得した変数を表示する処理です。
配列を出力するので「For Each Item in」を利用します。作成したActionの出力を引数にします。
![flow_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/98f41015-d05c-d49f-43f2-0a7e78aa4531.png)
8.取得した内容（number）を出力します。
![flow_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/e98db0a1-2805-e1f8-b193-1064092c2397.png)

#実行結果
1.フローを保存してテストを実行します。
右上の「Test」ボタンを押下します。
![test_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/5ec19d77-b7e3-cebc-23c9-05ae3fe856d1.png)
2.ダイアログが表示されるので「Run Test」ボタンを押下します。
![test_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/683dc7f9-1f18-7d7d-b7ba-c88d511423ef.png)
3.テストが実行されたので結果を見ます。「Flow has been executed. To view the flow, click here.」リンクをクリックします。
![test_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/ff90d633-ea8c-ea4a-30aa-36f9a0897cc4.png)
4. 「Log」を展開すると結果が表示されます。
![test_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/045bbcea-3bfd-a53b-f870-bc41cd811e76.png)

![test_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/fd54e853-11a4-a9fa-b1b5-a1c5d50e1ffa.png)

以上