Salesforceのフローで非常に便利な要素といえば、個人的には「ループ」だと思っています。このループは、コレクション変数に格納されたレコードに対して何らかの処理をしていく時には必須の要素です。
上記に記載した通り、ループという機能は 基本的にはコレクション変数のレコード数によってループされる回数は決まってきます。そのため、任意の回数分だけループさせると言うような事は基本的にはできないようになっています。しかし、場合によっては指定の回数だけループさせたいとことがあります。
例えば毎日テレアポするユーザが複数人いるとします。彼らは1日に最大10件のコールをすることが決まっており、コールした結果をSalesforceに入力していくことが義務付けられています。このような場合Salesforce側ではユーザ毎に毎日10レコードを作成し、その日のコール結果を 入力してもらう環境を整える必要があります。このようなケースではループを使ってレコードを10件生成したいと考えることが出来ますが、どうやって指定の回数(この場合は10件分)のレコードを作成することができるのでしょうか? 今回はその方法について解説していきたいと思います。
フロー概要
今回のフローの作成は、まずはコールする人のユーザIDを取得ところ取得するところから始まります。ここもループを使いますが、 これまでの知識を活用すれば全く問題なくできるでしょう。毎日0時に起動するスケジュールフローを作成します。
問題はここからです。ループでコールする人のユーザIDをコレクション変数で取得したら、そのユーザ毎にテレアポ結果を入力するレコードを1ユーザ当たり10件ずつ作成する必要があります。これをループを回して1人ずつレコードを作成していくわけですから1ユーザごとに10回のループを回してレコードを作成すれば要件を実現することが出来ます。
指定の回数ループを回すためには、「決定要素」を利用します。決定要素にループする最大値の数値を設定しておき、それ以上の数値が入ってきた場合は、別の分岐に遷移させることでそのループを終了させることができます。さらに具体的に言えばループした回数を数値変数に格納しておき、その数値変数が10件以内に収まるのであれば、ループを回し10回以上になってしまったらループを終了させるといった設定をすれば、指定の回数ループを回すことができるようになるのです。
ここでの問題は、レコードを作成してから、どうやって再び決定要素に戻すかという点にあります。 これを解決するためにフローの「要素に接続」という機能を利用します。この「要素に接続」という機能は、指定の処理が完了したら、次に処理したい要素に接続することができる機能です。(後で詳述します)
コールするユーザIDの取得
まずはループを使ってコールする人のユーザIDをコレクション変数に格納する処理を作っていきましょう。下記の図のようにコールするユーザの条件を取得し、そのユーザIDをテキスト変数に格納した上で、コレクション変数に1人ずつ格納していきます。
各ユーザ毎に10レコードを作成する
次にユーザIDが格納されたコレクション変数をループしていきます。最初の要素は「リセット」と言う数値変数を「0」にリセットする要素です。これは何回ループされたかを記憶しておくための数値変数になります。
その後 決定要素置いて数値変数が10未満なのかを判定して分岐させます。もし10未満なのであれば、レコードを作成するために左側に遷移してコレクション変数へ格納していきます。
単一レコード変数のレコード所有者に該当のユーザIDを格納することを忘れないでください。その単一レコード変数をコレクション変数に追加します。
そして最後の要素で上述した数値変数(カウンター)に1をインクリメントします。
念の為ですが、「CounterIncrement」の数式は下記の通りです。
そして、ここが最大のポイントですが、「カウンター+1」要素の下のプラスボタンをクリックして「要素に接続」を選択します。
すると各要素を選択することができるようになるので、先ほど説明した「決定要素」をクリックします。
こうすることで、カウンター変数に1をインクリメントした後に、再び決定要素に戻ると言う繰り返しがカウンター変数の数値が9になるまで実行されるようになります。
結果としてカウンターの数が9に到達したら、決定要素で右側の分岐に入り、そのユーザの処理は完了することになり、次のユーザがループの対象として処理されていくわけです。そして、カウンターが0にリセットされた上で再度同じことを繰り返すようになるわけです。
そして、最後に新規作成するコレクション変数を使って新規レコードを作成して完了です。