【Salesforce】フローで入力規則！？（カスタムエラー要素を使用してのフロー）

こんにちは、ネコ田です。
自分自身の備忘録として、業務で使えそうな機能などを記載したいと思い、投稿を始めました。（３日坊主になりませんように( ﾟДﾟ)）

不慣れなため、伝わりづらい部分がありましたらごめんなさい( ;∀;)

フローでなんか入力規則できないかな～と英語の記事をあさっていたところよさそうな記事を発見したので、備忘録として、日本語にアウトプットしていきます～。

↓↓参照サイト↓↓

https://automationchampion.com/2023/08/03/record-triggered-flows-for-custom-validations-2/

# 概要（シナリオ）
新規商談を作成する際に、取引先に進行中（以下、オープン）な商談があった場合に入力規則のように保存することができないようにするフロー

# フローの全体図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/9297b93f-4523-b2e1-1576-a56969740e0b.png)


# フロー詳細
### ✓作成ステップ
①レコードトリガーフローを使用
②決定要素を使用して、新規作成または更新判断
③レコードを取得要素で関連するオープンな商談レコードを取得
④決定要素にて、オープン商談の有無を判断
⑤カスタムエラー要素にてカスタムエラーメッセージを作成

### ✓作成ステップ図解
#### ①レコードトリガーフローを使用
フロー新規作成時に、「レコードトリガーフロー」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/4102d980-33f5-9af5-2b36-354d582bb329.png)

開始を設定は下記のように設定
オブジェクト：商談
トリガー設定：レコードが作成または更新された
エントリ条件：なし
フローを最適化：高速項目更新
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/24c01cfe-24f4-d44d-1192-b602674f0eb8.png)


#### ②決定要素を使用して、新規作成または更新判断
決定要素を下記のように設定
表示ラベル：任意

結果の詳細
表示ラベル：新規作成（任意）
条件の要件：AND
リソース：{!$Record.Id}（トリガーOpportunity＞商談ID）
演算子：null
値:{!$GlobalConstant.True}（True）
結果を実行するタイミング：条件を満たす場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/144bb172-9a85-c857-3be1-286aa892996b.png)

デフォルトの結果
表示ラベル：更新（任意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/feeb681a-bc11-0cd6-0809-9e0547f724c0.png)


#### ③レコードを取得要素で関連するオープンな商談レコードを取得
※決定要素の決定ノード側に作成

レコードを取得要素は下記のように設定
表示ラベル：任意
オブジェクト：商談
条件の要件：AND
１行目の条件
    項目：AccountId(取引先ID）
    演算子：次の文字列と一致する
    値：{!$Record.Account.Id}（Record>取引先ID）
２行目の条件
    項目：Is Closed (完了フラグ）
    演算子：次の文字列と一致する
    値：{!$GlobalConstant.False}
並び替え：なし
保存するレコード数：すべてのレコード
レコードデータの保存方法：すべての項目を自動的に保存

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/a03ffc64-348f-3a32-ae53-4af5a0599a7d.png)


#### ④決定要素にて、オープン商談の有無を判断

決定要素は下記のように設定
表示ラベル：任意

結果の詳細
表示ラベル：有（任意）
条件の要件：AND
リソース：③の要素を選択
演算子：null
値:{!$GlobalConstant.False}（False）
結果を実行するタイミング：条件を満たす場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/1b885c77-dff8-8892-2c04-c233f0c576f2.png)


デフォルトの結果
表示ラベル：無（任意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/6c5f68a6-15b8-bb6f-34ed-3ac854dd5b84.png)


#### ⑤カスタムエラー要素にてカスタムエラーメッセージを作成
カスタムエラーメッセージ要素を下記のように設定
表示ラベル：エラーメッセージ
表示する場所：レコードのウィンドウで
エラーメッセージ：任意

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/e485fbc5-cb74-8fc3-ee69-84b5e65b7805.png)

以上がフローの詳細設定となります。


# テスト
##### 前提として...
すでに進行中の商談を作成している状態での検証

↓↓使用商談↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/f5faa7a5-e5dc-6eb1-4b4b-072da9906ee9.png)

### 無効化状態での検証

✓入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/80f207a9-f1bd-7b74-8424-0f3f10e7aa19.png)

✓保存してみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/bad0950e-7b4a-a1fa-1bec-810f6ad036df.png)

作成可能！！！

### 有効化状態での検証
無効化時に作成した状態でフローを有効化している↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/fc4da3dc-0500-7c49-b443-8215869529ef.png)

この状態で作成してみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/dc3217a0-a7fa-b637-6059-f41bd60e10e0.png)

エラーになって保存ができなくなりました！！

「オープン商談」と「無効化状態での商談」を削除して作成してみると...※1

:::note warn
※１
データの削除はあんまりよろしくない行為ですので、
本番環境での削除には十分お気をつけを～
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/63937770-54c6-5b25-5825-3b45b75c92bd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3987133/92baba24-2656-b109-08a1-6b1fdde8d9eb.png)

保存できました！！


# 作成後の所感
決定要素に決定要素を重ねて使うこと自体初めてで、面白かった。
実際商談で使うとなると、商談を複数の部署で使用してることもあるので条件の部分に特定のプロファイルを入れたりすれば使用はできそうかな。
完了フラグを用いているので、ここの辺をフェーズとかで絞ってもよさそう。
汎用性が高いと思うフローでした(^^)