Salesforceを運用していくと「何か処理をしたらその処理回数をカウントしたい」というニーズが発生する場合があります。例えば、自分が所有者になっている取引先責任者の中から特に注力すべき顧客をチェックボックスにチェックを入れることで管理したいとします。また、注力すべき顧客は最大10名までと決められているような場合を想定してみましょう。今回は、その実装方法について解説していきたいと思います。具体的には下記のような機能要件に落とし込めます。
- チェックするとそのユーザに「+1」する
- チェックを外すとそのユーザから「−1」する
- 上限の10以上になったらエラーメッセージを表示させる
また前提として下記のような項目があることを想定していますので、もし作成していないのであれば事前に作成するようにしておいてください。
- 取引先責任者オブジェクトにチェック項目(API参照名:Check__c)が必要です。
- ユーザページに保有人数を格納する数値項目(API参照名:KeepNumber__c)が必要です。
この要件を実現するために「2つのフローの作成」が必要になります。一つのフローは「チェックされた時に起動して「+1」するフロー」。もう一つは「チェックが外された時に起動して「−1」するフロー」です。では、実際の作成していきましょう。
チェックされた時に起動して「+1」するフロー
このフローの全体像は下記のようなものになります。取引先責任者にあるチャックボックスがTrueになったら起動し、ユーザの保有人数によって分岐させるフローになります。
まずレコードトリガーフローを選択してください。条件には下記のようにチェック項目にTrue(チェックが入った)ことを条件にします。
オブジェクト | 取引先責任者 |
トリガーを設定 | レコードが作成または更新された |
エントリ条件を設定(条件の要件) | すべての条件に一致(AND) |
項目 | Check__c(対象項目のAPI参照名を選択) |
演算子 | 次の文字列と一致する |
値 | True |
更新されたレコードでフローを実行するタイミング | 条件の要件に一致するようにレコードを更新したときのみ |
フローを最適化 | アクションと関連レコード |
これで対象のチェックボックスにチェックが入った時にフローが起動されるようになります。
次に、チェックを入れた取引先責任者の所有者の保有人数(API参照名:KeepNumber__c)が10人以下なのか、0人なのかを判定する決定要素を配置します。
名前 | 数値が10以下か?(任意) |
API参照名 | Under10(任意) |
表示ラベル | 10以下か? |
結果のAPI参照名 | Below10 |
結果を実行する条件の要件 | カスタム条件ロジックに一致 |
条件ロジック | (1 AND 2) OR 3 |
1リソース | {!$Record.Owner.KeepNumber__c}(取引先責任者の所有者の保有数) |
演算子 | 未満 |
値 | 10 |
2リソース | {!$Record.Owner.KeepNumber__c}(取引先責任者の所有者の保有数) |
演算子 | null |
値 | False |
3リソース | {!$Record.Owner.KeepNumber__c}(取引先責任者の所有者の保有人数) |
演算子 | 次の文字列と一致する |
値 | 0 |
1リソースで所有者の保有数が「10未満」かを条件に加えることは理解できると思いますが、2リソースで「保有人数が空欄ではない」という条件や3リソースで「保有人数が0」という条件を追加しているのはなぜだと思いますか?
この条件は「(1 AND 2)OR 3」の(1 AND 2)にあたりますが【「10未満」かつ「空欄でない」】状態を条件にしています。これはつまり1〜9の数値が入っていることを想定しています。そして3リソースは保有人数が「0」の値が入っている場合を想定しています。なぜわざわざこんなことをするかと言うと「10未満」だけを設定すると項目の値が「0」だった場合に条件から弾かれてしまうからです。フローでは「10未満=1~9」であり「0」は含まれていないのです。なのでわざわざこんなやり方を設定しているのです。
次にもう一つの分岐を設定します。この分岐はユーザの保有人数が「空欄」だった場合の分岐になります。
表示ラベル | 数値が「空欄」か? |
結果のAPI参照名 | Number_0 |
結果を実行する条件の要件 | すべての条件に一致(AND) |
リソース | {!$Record.Owner.KeepNumber__c}(取引先責任者の所有者の保有人数) |
演算子 | null |
値 | True |
この設定をする理由は分かりますか?もう一つの設定であえて「空欄ではない」という設定を加えた理由にもなります。それは保有数の項目が空欄だった場合、この後設定する「+1」のアクションが「0〜10の値が入っている」項目に対しては想定通り+1されるのですが、「保有数が空欄の場合は+1されない」からです。なので、この分岐を設けて異なる方法で+1をするために必要なのです。
現在のユーザの保有数の取得(割り当て要素)
次に10以下の分岐の下に「割り当て」要素を追加します。この割り当て要素では、数値変数に現在のユーザの保有数を格納する処理を設定します。まずは下記の赤枠の部分に「割り当て」要素を追加してください。
この割り当て要素には下記のように設定します。
変数の「KeepNumberNow」は新規で変数を作成する必要があります。下記の手順で作成してください。
- 変数のテキストボックスをクリック
- 「新規リソース」をクリック
- リソース種別で「変数」を選択
- 「API参照名」に「KeepNumberNow」と記入
- 「データ型」で「数値」を選択
- 「小数点の位置」は削除して「0」に設定
- 「完了」をクリック
次に「演算子」は「次の文字列と一致する」を選択してください。
次に「値」の部分には該当する取引先責任者レコードの所有者の「保有数」の数字を設定する必要があります。なので、「{!$Record.Owner.KeepNumber__c}」と入力してください。
これで「KeepNumberNow」という数値変数に取引先責任者レコードの所有者の現在の保有数を格納する設定ができました。この割り当て要素の設定内容は下記の通りです。
表示ラベル | 現在の保有数を格納 |
API参照名 | SetKeepNumber |
変数 | KeepNumberNow(新規で作成する数値変数)※作成方法は上記を参照 |
演算子 | 次の文字列と一致する |
値 | {!$Record.Owner.KeepNumber__c} |
次に「+1」する要素を作成します。この要素は「レコードを更新」要素を使います。
まず、「レコードを更新」要素を上記の図のように追加してください。完成した設定内容は下記のようになりますが、順番に説明していきますね。
上記の設定を一つ一つ説明していきます。
「更新するレコードを検索してその値を設定する方法」では上から2番目の「フローをトリガーした取引先責任者レコードに関連するレコードを更新」を選択してください。なぜなら、ここで更新するのは取引先責任者の所有者の保有数項目だからです。所有者の保有数項目は取引先責任者レコードに関連するレコードです。
次の「関連レコード」では上記で説明したように更新したいのは取引先責任者の所有者の保有数項目ですから「{!$Record.user__r}」のように入力して取引先責任者の所有者を指定します。このように設定することで取引先責任者の所有者の項目を更新できるようになります。
「検索条件を設定」は「なし」で大丈夫です。この分岐にくるレコードは1つしかありませんので抽出する必要がありません。
次に、項目には「KeepNumber__c(ユーザの保有数のAPI参照名)」を設定します。この項目に対して+1した数値を上書きします。
そして、ここでの最大のポイントは「KeepNumberIncrement」という数式リソースです。この数式リソースには、上記で取得した現在のユーザーの保有数に+1した数値が保存されています。この数式リソースの作成手順は下記の通りです。
まず画面左上のアイコンをクリックしてください。
次に「新規リソース」をクリックしてください。
「リソース種別」では「数式」を選択してください。表示された画面で下記のように入力してください。
リソース種別 | 数式 |
API参照名 | KeepNumberIncrement |
データ型 | 数値 |
小数点の位置 | 0 |
数式 | {!KeepNumberNow}+1 |
数式の「{!KeepNumberNow}+1」に注目してください。「KeepNumberNow」というのは上記で取得した現時点のユーザの保有数が入っている数値変数でしたね。その数値変数に+1しています。この数式により「KeepNumberIncrement」に+1された数値が格納されるのです。
あとは、この+1された保有数の数式リソースでユーザの「保有数」項目を上書きするだけです。
さて、最後の要素です。数値が「空欄」だった場合の処理を設定します。
さて、「空欄」ということはどういう状況でしょうか?答えはまだユーザーがチェックを一度もしたことがないという状況です。新入社員が初めて顧客を保有するようなケースが該当します。そのような場合は、単純に「+1」するだけでOKです。なので保有数の項目に数値の「1」を追加します。(KeepNumberIncrement変数を空欄の項目に追加しても+1されませんので注意してください。)下記のように設定します。
表示ラベル | 「+1」する |
API参照名 | Plus1 |
更新するレコードを検索してその値を設定する方法 | フローをトリガーした取引先責任者レコードに関連するレコードを更新 |
取引先責任者に関連するレコード | {!$Record.Owner} |
レコードを更新する条件の要件 | なしーすべての関連レコードを更新 |
項目 | KeepNumber__c |
値 | 1 |
これでほぼ完了です。ただ、最後に「デフォルトの結果」の分岐の先にアクション要素を追加しておきましょう。この「デフォルトの結果」の分岐に流れるのはユーザの保有数がすでに10になっている場合です。なので、カスタムエラーアクションの要素を追加して『「10」を超えています』と表示するように設定しましょう。
下記のように設定してください。エラーメッセージは任意に変更して頂いて問題ありません。
最初のフローは、これで完了です。次は2つ目のフロー作成ですが、これは下記の記事をご覧ください。