ブログ

ServiceNow開発ブログ Flow Designerを再起動させる方法

ServiceNow開発部ブログ第5回目です。
Flow Designerを再起動させる方法についてです。

Flow Designerの再起動

Workflowの後継であるFlow Designerですが、
Flow Designerの処理は一方通行で処理を前段階に戻すという事が出来なくなっています。
Workflowはその辺自由に設定できたので、少し不便です。
どうしてもFlow Designerで処理を戻したい場合、稼働中のFlowを一旦終了してから
再起動させる、というスクリプトで強引ですが対処は可能です。
(再起動時はフラグ等セットしておいてifアクティビティと組み合わせる事で任意の箇所からスタートさせる、といったFlow側制御は必要になってくるかと思います)

以下、スクリプト例です。

// 稼働中フローの終了
var flow = new GlideRecord("sys_flow_context");
flow.addQuery("source_record", "フローを修了させたいレコードのsys_id");
flow.addQuery("state", "WAITING");
flow.query();
if (flow.next()) {
sn_fd.FlowAPI.cancel(flow.getUniqueValue(), 'Canceling Flows');
}
// フローを再稼働
try {
// 引数inputsはフローのTriggerごとに異なる。TriggerがService Catalogなら以下をセット
var inputs = {};
inputs['request_item'] = "フローを再稼働させたいsc_req_itemのGlide Record";
inputs['table_name'] = "sc_req_item";
var contextId = sn_fd.FlowAPI.startFlow("稼働させたいFlowのname", inputs);
} catch (ex) {
var message = ex.getMessage(); gs.info(message);
}

引数inputsが詳細な解説ページが無いのでちょっとわかりづらいですが、おそらく公式Doc
「Data pills available by trigger type」に記載されているものをセットすればよさそうです。

また、もしFlow内でAsk for Approvalアクションを用いてグループ承認レコード(sysapproval_group)を作成している場合、フローキャンセルとあわせてそのレコードの承認状況(approval)もrejectedに更新してあげる必要がありました。どうやらフロー再起動時、生きている状態のグループ承認レコードが残っているとAsk for Approvalアクションで承認レコードが作成されないみたいです。

参考
Flow Designer trigger types
FlowAPI - Scoped, Global

弊社公式Qiitaへも同様の記事を投稿しております。

pagetop