概要
ServiceNowのFlow Designerで短時間でフローを定義することはできますが、グローバル変数の概念がないため、標準Actionでは複数レコードの内容を一つの変数に纏められません。しかし、カスタムActionでレコードを処理するようにしたらすることが可能です。
次のようなフローを作成します。「For Each Item in」はログ出力用のActionなので、実際のフローには不要です。
Action
先ずはフローで利用するカスタムアクションを作成します。
1.例ではメインフローでIncidentレコードを抽出しているのでActionには複数のIncidentレコードが引き渡されます。Typeは「Records.incident」になります。
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を呼び出すフローを作成します。
1.テスト用ActionなのでPublishをしません。デフォルトではPublishされたいないActionは選択できないので、設定を変更します。右上の3の点をクリックして「Configuration」を選択します。
2.「Show draft actions」を有効にします。これでPublishされていないActionも選択可能になります。
3.次のようなフローを作成します。
4.テスト用なのでTRIGGERは一回のみ実行するようにします。時間を指定しないといけないのですが、適当な時間を入力しても即時にテスト実行できます。
5.Incidentターブルからレコードを検出するために「Look Up」Actionを追加します。設定条件に制限はありますが、出来る限りここで条件を絞ります。例えば朝6時に実行するフローで1時から6時までのレコードを取得する場合は「Opened」「on」「Today」にします。それでActionの中で0から1時までの時間のレコオードを対象外としてます。
6.作成したActionを呼び出します。引数には上のActionで取得したレコードを渡します。
7.これ以降は取得した変数を表示する処理です。
配列を出力するので「For Each Item in」を利用します。作成したActionの出力を引数にします。
8.取得した内容(number)を出力します。
実行結果
1.フローを保存してテストを実行します。
右上の「Test」ボタンを押下します。
2.ダイアログが表示されるので「Run Test」ボタンを押下します。
3.テストが実行されたので結果を見ます。「Flow has been executed. To view the flow, click here.」リンクをクリックします。
4. 「Log」を展開すると結果が表示されます。
以上