はじめまして、アルファー・コミュニケーションズServiceNow開発部です。
今後、こちらでServiceNow開発に関する情報発信を行っていく予定です。
基礎的な部分ですが、今回はワークフローの承認アクティビティの挙動についてまとめました。
調査したアクティビティ
公式ではWorkflowの後継機能であるFlow Designerの使用を推奨されていますが、
使い勝手や過去資源の存在からWorkflowもまだまだ現役という環境が多いのではないかと思います。
今回はCore ActivitiesのApprovalsにある
・Approval Group
・Approval User
・Approval Action
・Approval Coordinator
の動作について調べました。尚、これらのアクティビティはTaskテーブルを拡張したテーブルでのみ仕様可能です。
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となりました。