積み上げ集計項目は主従関係でのみ作成可能
積み上げ集計項目では、親オブジェクトから子オブジェクトのデータを集計し、子レコードの件数や指定した項目の合計値、最大値、最小値を算出可能です。
ただし積み上げ集計項目は主従関係の場合のみ作成可能で、参照関係では作成することができません。
そこで本記事では、参照関係で積み上げ集計項目を作成したい場合の対応策を紹介いたします。
※参考ページ:積み上げ集計項目(Salesforce公式ヘルプページ)
参照関係ではフローで積み上げ集計項目を再現する
上記の通り、参照項目では積み上げ集計項目そのものを作成することは不可能です。
そこで参照関係では、フローを用いることで積み上げ集計項目を再現します。
作成手順は以下の通りです。
①集計対象の項目を決める:参照関係で集計したい項目を決定します。
例)子オブジェクトの「金額」項目の合計を親オブジェクトに反映させる
②親オブジェクトにカスタム項目を作成:親オブジェクトに集計結果を表示するためのカスタム項目を作成します。
例)「合計金額」項目
③フローの作成:子オブジェクトのレコードが作成または更新、削除された際に親オブジェクトに自動で集計して反映させます。
実装方法
では実際に作成していきます。
今回は例として、プロジェクト(親)オブジェクトと商談(子)オブジェクトが参照関係という想定で作成を進めていきます。
集計対象の項目を決める
商談「金額」項目を集計対象とします。
親オブジェクトにカスタム項目を作成
プロジェクト「合計金額」項目にプロジェクトレコードに紐づく商談レコードの「金額」項目の合計値を集計することとします。
フローの作成
フローはレコードトリガフローを2点作成します。
フローを2点作成する必要がある理由として、まずプロジェクトに紐づく商談の「金額」が更新されるタイミングとしては以下3パターンが想定されます。
①プロジェクトに紐づく商談が作成された
②プロジェクトに紐づく商談の「金額」が更新された
③プロジェクトに紐づく商談が削除された
そこで子レコード(商談レコード)が作成・編集・削除されたタイミングで親レコード(プロジェクト)を更新するために商談レコードを「作成または編集」、「削除」した際にフローをトリガするためにそれぞれをトリガ条件とした2点のフローが必要となります。
フロー1点目(レコード作成または編集時にトリガ)
1. フロー種別で「レコードトリガーフロー」を選択
2. 各項目で以下の通り選択
・オブジェクト:商談
・トリガーを設定:レコードが作成または更新された
※より厳密にトリガ条件を指定する場合は以下のように指定することも可能ですが今回は割愛します。
例)以下の数式がTrueとなった場合に起動
・商談レコード作成時に「金額」が入力されている
または
・商談レコード編集時に「プロジェクト」が入力されていて「金額」が更新された
3. トリガした商談に紐づくプロジェクトを取得
まずはトリガした商談に紐づくプロジェクトを取得するために「レコードを取得」を用いて、トリガした商談に登録されているプロジェクトとIDが一致するプロジェクトを取得します。
※トリガしたレコードは「$Record」変数に保存されます
4. トリガした商談と同じプロジェクトに紐づく商談を取得
続いてトリガした商談と同じプロジェクトに紐づいている他の商談も取得します。
5. トリガした商談と同じプロジェクトに紐づく商談を取得
ここでは3つの手順が発生します。
① 先ほど取得した商談の「金額」を集計するためにループ処理を追加します。
② 取得した各商談の金額を集計するための変数を作成します。
③ ②で作成した変数に各商談の金額を追加していくために「割り当て」要素を追加します。
ここまで設定を行うことでトリガした商談と同じプロジェクトに紐づく商談の「金額」が集計されるようになります。
6. 集計結果をプロジェクトに反映
最後に先ほどのループ処理で集計した値をプロジェクトに反映します。
フロー2点目(レコード削除時にトリガ)
続いて削除時にトリガするフローです。
※基本的には作成・編集時にトリガするフローと同様なため重複する補足文は省略します。
1. フロー種別で「レコードトリガーフロー」を選択
2. 各項目で以下の通り選択
・オブジェクト:商談
・トリガーを設定:レコードが削除された
3. トリガした商談に紐づくプロジェクトを取得
4. トリガした商談と同じプロジェクトに紐づく商談を取得
こちらの要素のみ1点目のフローとは異なる部分がございます。
削除時にトリガするフローの特徴として、実際にレコードが削除される前にフローが起動します。
そのため、1件目同様にトリガした商談と同じプロジェクトに紐づいている商談すべてを取得してしまうと、削除した商談も集計対象となってしまいます。
そのため、以下キャプチャの赤枠のようにトリガした商談は取得対象から外す必要があります。
5. トリガした商談と同じプロジェクトに紐づく商談を取得
① ループ処理を追加
② 取得した各商談の金額を集計するための変数を作成
③ ②で作成した変数に各商談の金額を追加していくために「割り当て」要素を追加
6. 集計結果をプロジェクトに反映
最後に先ほどのループ処理で集計した値をプロジェクトに反映します。
動作確認
では最後に動作確認をしていきます。
プロジェクトに商談が1件紐づいており、「合計金額」は「JPY 1,000,000」です。
ここから以下3パターンについて動作確認してみます。
①プロジェクトに紐づく商談が作成された
②プロジェクトに紐づく商談の「金額」が更新された
③プロジェクトに紐づく商談が削除された
①プロジェクトに紐づく商談が作成された
以下の通り商談レコードを作成します。
するとプロジェクトの「合計金額」が更新されました。
②プロジェクトに紐づく商談の「金額」が更新された
先ほど作成した商談の「金額」を編集します。
するとプロジェクトの「合計金額」も更新されます。
③プロジェクトに紐づく商談が削除された
最後は先ほど作成した商談を削除します。
プロジェクトの「合計金額」も減算されました。
コメント