【ServiceNow】 Flow Designerを用いたフローの作成

# はじめに
ServiceNowのフローデザイナーを用いて、インシデント発生時のデモフローを作成してみました。

# 環境
* 個人用開発インスタンス（PDI）
* バージョン：Washington DC
* 権限：admin

# フローデザイナーとは
**特徴**
- 低コストな開発：ノーコードで視覚的に自動処理フローを構築できる
- サードパーティサービスとの統合： Integration Hub スポークを使用して他サービスとの接続が可能

ServiceNowにはフローデザイナーと似た自動処理機能としてビジネスルールという機能もあります。公式Docsによると、自動処理実装の推奨はフローデザイナーの様ですが、以下の場合はビジネスルールを使う必要があるようです。

:::note 
<ul>
 <li>ビジネスルールと共に自動処理を特定の順序で実行したい場合。
 <li>ロジックを同じスレッドでデータベースへの書き込みの直前または直後に実行する必要がある場合。
 <li>ロジックがスクリプトインクルードのみを呼び出す場合。
</ul>
:::

参考： [ServiceNow 公式Docs Flow Designer](https://docs.servicenow.com/ja-JP/bundle/washingtondc-application-development/page/build/professional-developer-guide/concept/flow-designer.html)

# フローデザイナーの作成
Allの検索窓にFlow designerと入力すると「Process Automation」配下にFlow Designerがあるのでクリックします。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/dde98079-a8cc-e67c-f2b8-fb81fbf4ebdf.png)

「New」より「Flow」を選択します。
Washington DCバージョンよりWorkflow Studioがリリースされているようです(2024年2月～)
以前のバージョンからUIが少々変更していたり新機能が追加されていますが、フローデザイナーについては大きく変更はありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/1b368369-a9c5-dea2-aa12-2f328cbf3b13.png)

Flow nameに任意の名前を入力します。
Run as 項目について、特に要件がなければ「System User」を選択してください。
フローを開始したユーザーを特定して何か処理を行いたい場合は「User who initiates session」を選択してください。
ここでは特定のユーザーを指定してフローを走らせない為、「System User」を選択します。
「Build Flow」をクリックしフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/b4d8e7b7-6021-c053-7bb3-70adba80fbd1.png)

# フロー構成要素
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/daf892d1-a062-840f-f205-c99efa9547d0.png)
<ol>
 <li>TRIGGER：フローが走り出す条件設定。レコード起因、スケジュール起因、アプリケーション起因の３つを設定できます。
 <li>ACTIONS：フローの中で具体的に行う動作を設定できます。
 <li>DATA：アクション実行条件設定の際に、対象となるデータを指定できます。
</ol>

# デモフロー
今回実施した内容は以下です。
インシデントの緊急度によって通知先を変更する簡易的なフローとしています。
* ユーザーからインシデント報告
↓
* Urgencyが「High」のインシデントはマネージャーに通知
↓
* Urgencyが「High以外（MidiumかLow）」のインシデントはヘルプデスク担当者に通知


# TRIGGERの設定
フローが走り出す条件設定として以下の３つから設定できます。
<ol>
 <li>レコード起因：レコードが追加された場合、更新された場合、２つのどちらか
 <li>スケジュール起因：日次、週次、月次、一度だけ、など
 <li>アプリケーション起因：メール受信時、サービスカタログ起因
</ol>
今回はインシデントレコードが追加されたことを起点にフローを走らせたいので、レコード起因（Record配下）の「Created」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/e4045d24-a856-73dc-c9ff-1f868d9369c4.png)

対象となる任意のテーブルを指定します。今回はIncidentテーブルを指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/6c0ded48-f48e-715b-20db-20cb272e9e28.png)

これでTriggerとして「インシデントテーブルにレコードが作成されたこと」を設定できたので、DoneをクリックしTrigger設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/802a3d5a-1138-5e08-90d2-1cba12f48cee.png)


# ACTIONSの設定
フローの中で実際に行う動作を設定します。
今回はインシデントのUrgencyが「Highの時」「High以外の時」で通知先を変更したい為、まずは条件分岐として「Flow Logic」の中からIf条件を設定します。

**1. 条件分岐設定**

Condition1に「Incident RecordのUrgencyがHighの時」を指定します。
画面右端の**Data**のIncident Record左端にある▼をクリックするとレコード内のフィールドが展開されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/e0dfc80c-e0b7-c82c-377b-88b584ad0820.png)
<br>

<span>UrgencyをCondition1にドラッグ＆ドロップします</span>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/80d05be4-3dc3-342e-d8e6-01cac930a318.png)
<br>

選択肢を「High」に設定。Doneで設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/773cbc49-7bae-918a-cbe9-f9d02ecc0477.png)

**2. Send Emailでマネージャー宛メール通知を設定**

thenの隣の＋マークをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/23183efd-a199-4d63-afcf-7bd643d9c082.png)
<br>

Action一覧から「Send Email」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/f2b5a204-ca45-753d-8fd7-cd521890b948.png)
<br>

Taget RecordにDATAからTiriggerのIncident Recordをドラッグ＆ドロップ。
メール宛先にIncident Managerのメールアドレスを指定します
（メールアドレスなどのUser詳細情報はUser AdministorationのGroups、Usersで確認できます）
Subjectには適当なタイトルをつけて、Doneをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/d780e2c5-1921-ffb9-02ab-d7ef2eee5eb6.png)
<br>

**3. End Flowの設定**

Flow LogicよりEnd Flowを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/e833ba4d-6c1b-03d0-12f1-3b216d33b0b9.png)
<br>

**4. Else If 条件分岐設定**

If条件と同様にCondition1にIncident RecordのUrgencyフィールドを指定します。
「Highではない場合」にしたいため、「is not」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/6f8db04b-3ab6-7ce0-b5ad-660c617ffacb.png)
<br>

**5. Send Emailでヘルプデスク担当者宛メール通知を設定****

Toにヘルプデスク担当者のメールアドレスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/ad863f2a-2997-ae4c-3f32-a365d7f41634.png)

**6. End Flowの設定**
こちらでもEnd Flowを設定し、設定は以上で完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/89efac04-4797-461a-9dc8-fc57e825ffb4.png)


# Testの実行
Activateする前にエラーが起こっていないかTestで確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/50cf4192-a465-537b-2f38-7dee55b99bff.png)
<br>

レコードを指定し、Run Testをクリック。
しばらく待つと「Your test has finished running. View the flow execution details.」と表示されるのでクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/02747e3a-7565-b877-317b-984df3e71b25.png)

テスト実行結果が表示されます。
State欄にテスト結果が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/7b6fd56e-1f27-9e34-4e3d-db2537e51cc4.png)

デモユーザーへのメール送信の為、実際にメール受信はできませんがシステムログで送信がされているか確認することができます。
System Log配下のEmailsをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/89cde9cb-2e2e-1ea8-6ad1-dee580d0f576.png)

メールがヘルプデスク担当者宛に送信されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556511/5497675b-3629-3d0e-4911-86f0abe65750.png)


# おわりに
今回は業務でフローデザイナーを使う機会があったので、学習記録として簡易的な作成手順を残してみました。
オリジナルのアクション作成やサブフローを活用した更に効率的なフロー作成も可能です。
引き続き学習したことがあればまとめていこうと思います。

ここまで読んでいただけた方はぜひ**いいね**と**ストック**よろしくお願いします。



参考文献：
* [[ServiceNow]10分で掴む! フローデザイナーの構成要素(フローデザイナー)](https://nowlibrary.com/introduction-431/)
* [ServiceNowビジネスルールの実行タイミングの考え方](https://qiita.com/yujiarakitokyo/items/c3d54e7e40ae9c76984c)
* [ServiceNow 公式Docs Flow Designer](https://docs.servicenow.com/ja-JP/bundle/washingtondc-application-development/page/build/professional-developer-guide/concept/flow-designer.html)
* [ServiceNow 公式Docs フローの構築](https://docs.servicenow.com/ja-JP/bundle/washingtondc-build-workflows/page/administer/flow-designer/concept/flows.html)