SalesforceのFlowBuilderで出来ることをまとめた

# ０．この記事を書こうと思ったきっかけ
最近何かとClassicからLightningに移行しようと盛り上がっているように感じますが、私がLightningに移行しようとして当初一番ネックに感じたのが**LightningではJavascriptボタンが使えない**ということでした。

私のようにシステム管理者の経験が長くまだApexなどのプログラミングがおぼつかない人にとってはJavascriptボタンが使えないことが大きなネックになってしまいます。

以前の会社で何とかLightningに移行するにあたって、利便性を保つためには簡単に入力をしなければいけませんでした。あれこれ情報を集め、Flow Builder(旧クラウドフローデザイナ)であれば何とかなるかもしれないと思い勉強をつづけた結果そこそこFlow builderを使えるようになったのでそれをまとめたいと思います。

**javascriptボタンでLightningの移行に苦労している人や、Flow Builderを使おうと思って上手く使いこなせていない人に役立ててもらえればと嬉しいです**。


# １．FlowBuilerとは
一言で言ってしまえばFlowBuilderはフローを作成するシステムでノンコーディングでプログラムや画面の作成が出来るといった感じでしょうか。

具体的にはApex（Javaに似たプログラミング）やVisualforce（HTML・CSS・Javascriptに独自のマークアップが使えるページ）ほどは細かく作りこめないものの、ワークフローやプロセスビルダー以上に複雑な処理を行えるので、カスタマイズの自由を大きく向上させてくれる面白いツールです。

# ２．フローの種類・出来ること
Spring'21時点で以下の用途でFlow Builderでフローを作成できます。


①画面フロー
②レコードトリガフロー
③スケジュールトリガフロー
④プラットフォームイベントトリガフロー
⑤自動起動フロー（トリガなし）


## ①画面フロー
Lightningアプリケーションビルダーでレコードページの編集ができますが、そこに作成した画面フローを置くことができます。
また作成したフローは自動的にURL形式で使える形になりますので、カスタムフィールドに画面フローのURLを設定し、個別のフィールドの値を事前に設定することも可能です。
さらにアプリケーションのユーティリティーバーにも設定できますので、使える幅が広いのが画面フローの特徴だと思います。

具体的には以下に挙げるような使い方ができます。

### ①-1.アクションボタンとしてフローを呼び出してレコードの作成・更新

Javascriptボタンの代替として画面フローを使うことができます。

ここで大きな問題としてどうすれば動的にレコードIDをフローに渡すことができるかということです。簡単にいえば変数名「recordId」を作成してレコードIDが一致するものとして「recordId」を指定すればレコードIDを渡すことができます。Salesforceのヘルプにもある通りなのですが、当初は何を言っているのかピンときませんでした。

[フローアクションの考慮事項](https://help.salesforce.com/articleView?id=flow_actions_considerations.htm&type=5)

>フローに recordId というテキスト入力変数があれば、アクションの実行時にレコードの ID がその変数に渡されます。

ちなみに「recordid」や「RECORDID」ではフローにレコードIDを渡すことができません。。。

![Id equal recordId.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/91e943c6-db44-951d-bcab-00b2b94e266b.png)

最近気づいたことですが、変数のデータ型を「レコード」、変数名を同じく「recordId」、入力で使用可能にチェックをいれればレコード取得の要素を使用しなくとも同様のことができるようです。

詳細に解説した記事は以下になります。
[SalesforceからJavascriptボタンを追放する！アクションボタンとフロービルダーを組み合わせた(前編)](https://qiita.com/DEKA_PIYO/items/70aa47c4f6d651b189ff)
[SalesforceからJavascriptボタンを追放する！アクションボタンとフロービルダーを組み合わせた(後編)](https://qiita.com/DEKA_PIYO/items/85f5e0411006255ad3b7)

### ①-2.レポートからレコードを作成・更新
Lightningではリストビューを活用してレコードの編集を一括で行えるので便利です。しかし複数のレコードタイプがリストビューにあるときやレポートの機能にあるクロス条件を使えないので時々不便に感じることがあります。またそもそもSalesforceの仕様でこの条件に該当せずとも編集できないときもあります。

[Lightning Experience でのリストビューのインライン編集の考慮事項](https://help.salesforce.com/articleView?id=customviews_edit_inline_listview_lex_considerations.htm&type=5)

そういったときはフローとHYPERLINK関数を用いたカスタム項目を活用してレポート上からレコードを編集することができます。

![Opp update from report.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/35eded1c-c5fe-ea6d-e759-07fcee65777c.png)
＊上記画像は見やすいように画像を編集しています。

現状ではレポートから直接編集することもできます。

![レポート用フロー項目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/787807d0-2017-51e4-c0c8-f9deafd1e452.png)

以下が詳細に解説した記事となります。
[Lightningのレポートからレコードの作成・更新をしてみた](https://qiita.com/DEKA_PIYO/items/d353aca04d0aabbf8772)

### ①-3.ホーム画面やレコード画面からレコードの作成・更新
Lightningではホーム画面やレコード画面の構成もLightningアプリケーションビルダーを使えば編集可能です。特にレコード画面の一部にフローを加えると利便性が格段に向上します。

Sectionという画面コンポーネントが追加され、当初のフローに比べれば自由に項目を配置することができるようになりました。

また画面コンポーネントで条件に応じて表示、非表示の設定もできますので、レコードの状態に応じて項目を表示する・しないという設定も簡単にできます。

### ①-4.アプリケーションのユーティリティーバーからレコードの作成・更新
フローは各アプリケーションのユーティリティバーに加えることもできます。タブの一番左にある点々をクリックすると「サービス」とか「セールス」とかいろいろ出てきますが、あれがアプリケーションになります。

頻繁に使うフローのうち、最初に動的なレコード取得が必要でないフローであればこういった使い方も良いかと思います。

![一括ToDoのフローサンプル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/d7ac57aa-2dfa-72b5-dda5-1df5dea03fa8.png)

以下が詳細に解説した記事になります。

[Lightningで使える一括ToDo作成フローを作ってみた](https://qiita.com/DEKA_PIYO/items/335fcaab526f447e3b64)

## ②レコードトリガーフロー
レコードの作成・更新・削除を起点にバックグラウンドで動作するのがこのレコードトリガーフローです。
さらにレコードトリガーフローは保存前・保存後どちらで動くか指定することができます。開発者目線でいうとApexトリガーとほぼ同義かと思います。

簡単な使い分けとしては例えば商談の更新時に商談の項目を更新、つまり起点と変更するレコードが同じ場合は保存前のほうが処理が早く、例えば取引先の更新時に商談を更新、つまり起点と変更するレコードが違う場合は保存後を使用するのが一般的に良いそうです。

保存前フローの場合は変更前の値を使用することができます。

以下が詳細に解説した記事になります。
[レコードトリガーフローで保存前更新のフローを作ってみた](https://qiita.com/DEKA_PIYO/items/47af5c166f83f4ca498d)

## ③スケジュールトリガフロー
例えば毎週水曜日も12時に条件にあった取引先を変更するといった使い方をすることができます。
開発者目線でいうとバッチ処理ができます。

https://qiita.com/DEKA_PIYO/items/ff5e60ce104284f324f5

## ④プラットフォームイベントトリガフロー
外部連携に使えるようですがこちらの説明は以下に譲ります。
使い方やメリットがわかれば追記したいと思います。
Salesforce以外にも色々なシステムを導入していて連携する場合は使えるのかもしれません。

https://trailhead.salesforce.com/ja/content/learn/modules/platform_events_basics
https://trailhead.salesforce.com/ja/content/learn/projects/workshop-platform-events

## ⑤自動起動フロー
使う場面は既存のプロセスビルダーにフローを組み合わせるような場面でしょうか。
以前はレコードトリガーフローなかったので、プロセスビルダーを使うしかなかったですが今ではそのフローがあるので、あまり手間をかけずに一部分をフローを使うような感じかなと思います

![プロセスビルダー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/fd15c8bf-a070-c231-9e1b-79a4a825ab66.png)

以下が詳細に解説した記事となります。
[プロセスビルダーとFlowBuilderを組み合わせた（基礎）](https://qiita.com/DEKA_PIYO/items/b5e0018336761befe8bd)
[プロセスビルダーとFlowBuilderを組み合わせた（応用）](https://qiita.com/DEKA_PIYO/items/51d800f79eec1cbc215b)