はじめに
「サブフローって、どんな時に作るんですか?」と、聞かれることが、たまにあります。
私も、「なんとなく便利だから。。。」と、言う理由で作っているので、答えに困ってしまいます。
今後、同じ質問をされた時に、この記事を紹介できるように、まとめてみようと思いました。
サブフローとは
私のサブフローのイメージは、「salesforceのフローから、呼び出しができるフロー」だと思っています。
一般的なプログラム言語の、”サブルーチン”や、”クラス”、”メソッド”などに、あたるのかなとも思っています。

基本的な、動作のイメージは、「サブフローに値を渡して、計算結果を返してもらう」です。例えば、数字を10倍にしてくれるサブフローに、10を渡す(引数)と、サブフローで計算した結果の1000(戻り値)が帰ってきます。
サブフローの呼び出し方
他のフロー要素と同じ様に、メインのフローから、サブフローの要素を選択するだけです。

サブフローは必要なのか?
「どうして、サブフローを使っているんですか?」と、聞かれることも、たまにあります。
まず、「サブフローを利用しないと正しく処理されない!!」と、言うことは無いと私は思っています。
ですので、フローを組むにあたっては、サブフローを利用しても、しなくても、その処理の結果は同じになります。
どんな時に作成するの?
「他のフローでも同じ処理が必要」(必要な気がする)な時に、サブフローを作るのかなと、思っています。
ちなみに、私は、同じ処理を毎回最初から設定するのは、めんどくさいなとも感じるので、サブフローを作っています。
余談ですが、上に書いた「数値を10倍にする」サブフローは、例に上げておいてなんですが、メインのフローで数式などで計算してしまえば良いとも思います。。。
サブフローの作り方
本来なら、フローの設計段階で、「この処理はサブフローにしよう」や、「この処理はメインのフローで組もう」と、決めてから設定作業に入るのが良いとは思います。
私の場合は、調査段階で、まず動くフローを作ってから、もしくは設定の途中で、サブフローにした方が良いなと思った部分を、サブフロー化しています。(後からの変更は、結構な手間はかかりますが。。。)
フローの種類
サブフローは、基本的に「自動起動フロー(トリガーなし)」で作成します。
(画面フローから、サブフローとして画面フローも呼び出せるようです。)
また、サブフローだからと言って、特別に設定できない・設定できる要素は無いので、メインのフローと同じ様に設定することができます。
変数の設定
サブフロー側の変数に、「入力」や「出力」の設定が必要になります。
メインのフローとサブフローとの間で、値のやり取りを行いますが、サブフロー側で値のやり取りを行うための「変数」を作成して、その役割(入力・出力)を決めます。
ちなみに、設定自体は簡単で、チェックボックスをオン・オフにするだけですし、作成後でもすぐに切り替えることができます。
入力で使用可能:- サブフローが、メインのフローから値を受け取るための設定
- メインのフローから、サブフローを呼び出す時の、設定画面の入力値の項目として表示されます。
出力で使用可能:- サブフローが、メインのフローへ値を渡すための設定
- メインのフローで、呼び出したサブフローの実行後の値として、メインのフローで利用できます。
やり取りできる変数の個数
サブフローで、入力・出力に設定できる変数は、複数個を設定できます。
例えば、サブフローへ、「メールテンプレート名」と「送信先メールアドレス」の2つの入力値を渡すための設定ができます。

サブフローと値のやり取りできる変数の「データ型」の種類
入力や出力に設定できる変数の「データ型」は、「数値」や「テキスト」だけではないです。
例えば、レコードや、レコードのコレクションなども、メインのフローとサブフローの間で値のやり取りを行うことが可能です。
フローの変数で、指定できるすべてのデータ型を、入力・出力に設定可能です。
サブフローの作成例
- chatterグループ名で検索して、そのidを返す
- メールテンプレート名で検索して、そのレコードリストを返す
salesforceに限った事ではないのですが、プログラムでのハードコーディングは基本的にNGだと思った方が良いと思います。
salesforceでは、sandboxと本番環境ではレコードidが違うので、フローにレコードidをハードコーディングしてしまうと、sandboxから本番環境へリリース後に、その部分を修正し忘れた時の事を想像すると、不安で夜も寝れません。。。
上のサブフローの作成例にあるように、”名称”や”必ず同じである番号”などで、検索したレコードidを取得する部分を、サブフロー化しておくと、他のフローからも利用できますし、安心して寝れるようになりますね♪
おわりに
今回は、サブフローのイメージや、私がどんな時にサブフローを作っているのかを、まとめてみました。
サブフローを利用することで、次からの新しいフローの作成が楽になったり、メインのフローが見やすく分かりやすくなるので、メンテナンスがしやすくなったりするのかなと、思っています。
ご活用ください。