ブログ

ServiceNow開発ブログ ワークフローの承認アクティビティの挙動調査

はじめまして、アルファー・コミュニケーションズServiceNow開発部です。
今後、こちらでServiceNow開発に関する情報発信を行っていく予定です。
基礎的な部分ですが、今回はワークフローの承認アクティビティの挙動についてまとめました。

調査したアクティビティ

公式ではWorkflowの後継機能であるFlow Designerの使用を推奨されていますが、
使い勝手や過去資源の存在からWorkflowもまだまだ現役という環境が多いのではないかと思います。
今回はCore ActivitiesのApprovalsにある

・Approval Group
・Approval User
・Approval Action
・Approval Coordinator

の動作について調べました。尚、これらのアクティビティはTaskテーブルを拡張したテーブルでのみ仕様可能です。

wf-pic1.png

Approval Actionの設定

Approval Actionの設定項目はシンプルで、Actionを4つの中から選ぶだけです。

①Mark task approved
対象レコードのApproval値を「Approved」にします
②Mark task rejected
対象レコードのApproval値を「Rejected」にします
③Mark task requested
対象レコードのApproval値を「Requested」にします
④Disregard pending approvals
このActivityが実施された時点でRequested状態になっている承認レコードを強制的に「Cancelled」にします
※公式Docではno longer requiredとなっていますが、実際に動かしてみたところCancelledになるようです
①~③はSet Valueアクティビティを用いてApprovalに値をセットするのと同じ動きになります

Approval Userの設定

①Approversの設定

Approversで誰の承認が必要かを指定します。承認者が固定されていればUserテーブルから選択。
Advancedにチェックをつければスクリプトで指定する事も可能で、下図のようにanswer配列に承認を行わせたいuser情報をpushすればOKです。

answer=[];
answer.push(current.assigned_to);

②Condition for approvalの設定

複数人承認者がいた場合、誰か1人でも承認すればよいのか、あるいは全員の承認が必要なのかや、承認拒否された際にActivity自体をRejectにするのか、他の承認者の承認を待つのか等の設定をWait forとWhen anyone rejectsで指定します。下図の設定ですと誰か1人でも承認すれば承認完了、逆に誰か1人でも拒否すれば承認拒否となります(つまり最初に承認or拒否された内容で処理が完了します)。

また、Approval ColumnとApproval Journal Columnは対象テーブルで承認情報が記録されるカラムを指定します。ここを変更する事は少ないかと思います。

③Scheduleの設定

承認レコードの期限(Due Dateにセットされます)、スケジュール(期限のカウント条件)及び使用するタイムゾーンを設定できます。
下図の設定ですとタイムゾーンは日本時間、期限は2時間、スケジュールは平日8時~17時となります。つまり月曜16時に承認レコードが作成された場合、営業時間が考慮され期限は火曜9時となります。
ちなみに期限が切れた後でも普通に承認可能で、期限を特に設定しない場合Due Dateには承認レコードの作成日時が入るようです。

Approval Groupの設定

Approversに入るのがGroupsになるだけで、基本的な使い方はApproval Userと同じです

Approval Conditionの設定

このActivityは子Activityとして

・Approval-Group
・Manual Approvals
・Approval-User

を持たせる事ができ、Wait forで子Activityの承認/拒否に応じた処理を設定します。子Activityの設定内容は単体でActivityを追加する時と同じです。

サンプルフロー

サンプルとして下図のようなFlowを作成しました。以下3パターンで実際に動かしてみます

①Assignment Groupが承認を行う
②Assignment Groupが承認拒否する
③Descriptionに「skip」と入力する

サンプルフローの挙動① Assignment Groupが承認を行う

ワークフロー対象テーブルのフォームからAssignment groupにTest Groupを指定し、Submit。(使用テーブルはTaskテーブルを拡張した試験用テーブルです)

尚、Test Groupには以下4名を所属させています。

Group approvalsにTest Groupが入り…

ApproversにはTest Group所属の4名が入ります。

自身(System Administrator)宛の承認レコードを選び、Approveしてみます

サンプルフロー全体図①からのフローが動き、親レコードのApprovalがApproved、StateがClosed Completeとなりました。

サンプルフローの挙動② Assignment Groupが承認拒否する

今度は、先程ApproveしたところでRejectしてみます

サンプルフロー全体図②からのフローが動き、親レコードのApprovalがRejected、StateがClosed Incompleteとなりました。

サンプルフローの挙動③ Descriptionに「skip」と入力する

最後に承認データ作成後、承認行為を行う前にDescriptionに「skip」と入力してみます。

サンプルフロー全体図③からのフローが動き、承認レコードのApprovalがCancelledとなりました。

wf-pic19.png

参考リンク

公式Document

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

pagetop