設定・自動化

商談削除時に取引先責任者側の商談数を正しい件数へ戻す手順

商談を削除しても、取引先責任者側の商談数は自動では減りません。削除を合図に件数を数え直すフローの作り方と、削除前ならではのつまずき所をまとめます。

2024.08.30

なぜフローで集計するのか

標準の積み上げ集計項目は、マスタ詳細関係の主側にしか作成できません。参照関係の子には使えず、主側に積み上げ集計項目がある間は、マスタ詳細関係を参照関係へ変換することもできません。商談から取引先責任者への参照が参照関係(ルックアップ)になっている組織では、積み上げ集計項目という選択肢自体がありません。商談を削除して件数が減ったときも、フローで数え直します。

用意する2つの項目

商談(参照関係項目)と取引先責任者(数値項目)、2つの項目を使います。作成時の記事と同じ項目なので、すでに用意済みならこの節は飛ばせます。

オブジェクト項目名種別役割
商談取引先責任者参照関係(取引先責任者)どの取引先責任者にひもづく商談かを示す
取引先責任者商談数数値(小数点0桁)ひもづく商談の件数を格納する
  1. 項目が無ければ商談側に作る

    オブジェクトマネージャで商談を開き、参照関係項目として取引先責任者を追加します。

  2. 項目が無ければ取引先責任者側に作る

    取引先責任者を開き、商談数を格納する数値項目を追加します。小数点の桁数は0で足ります。

商談のカスタム項目「取引先責任者」の定義画面。データ型は参照関係
商談側に作る参照関係項目です。API参照名がContact__cになっていることを確かめます。
取引先責任者のカスタム項目「商談数」の定義画面。データ型は数値
取引先責任者側に作る数値項目です。API参照名のOppCounts__cをあとで使います。

フローを新規作成する

  1. レコードトリガーフローを選ぶ

    設定のFlowsから新規フローを作成し、「レコードトリガーフロー」を選びます。

  2. 開始対象を商談にする

    オブジェクトで商談を選び、フローをトリガーする条件は「レコードが削除された場合」にします。

新規フローの作成方法を選ぶ画面。「最初から開始」が選ばれている
新規フローの入口です。赤枠の「最初から開始」を選んでから次へ進みます。
フロー種別の選択画面。「レコードトリガーフロー」が選ばれている
種別の選択です。赤枠のレコードトリガーフローを選んで作成を押します。
フローの開始を設定する画面。オブジェクトは商談、条件はレコードが削除された
開始の設定です。オブジェクトを商談にし、「レコードが削除された」を選びます。
フローのバージョンのプロパティを編集する画面。表示ラベルとAPI参照名の入力欄
フローに名前を付ける画面です。当時の画面には更新用フローの名前が入っています。

削除トリガーには保存前後の選択肢がありません。削除トリガーフローは、レコードが実際に削除される前に実行されます。このため$Recordからは、これから削除される商談の項目値をそのまま読み取れます。

削除される商談から取引先責任者を取得する

$Record.Contact__cから、ひもづく取引先責任者を1件取得します。レコードを取得要素の条件をIDに設定し、「最初のレコードのみを自動的に保存」を選びます。

レコードを取得要素の設定画面。取引先責任者をIdで1件だけ取得している
取引先責任者を1件取るところです。保存するレコード数が「最初のレコードのみ」です。

削除前は対象レコードもカウントに含まれる

取引先責任者にひもづく商談を、取得要素であらためて全件取得します。ここが削除トリガー特有のつまずき所です。削除トリガーフローが動く時点で、削除対象の商談はまだデータベースに残っています。そのため、この取得要素の結果には、削除されようとしている商談自身も含まれています。

レコードを取得要素の設定画面。商談をContact__cで絞り全件取得している
商談を数えるための取得です。ここでは「すべてのレコード」を選んでいます。

数えた件数をそのまま商談数へ入れると、実際より1件多い値になります。決定要素で分岐し、次のように調整します。

新規リソース画面。数値型の変数oppNumbersを作成している
件数を入れる数値変数です。小数点の位置とデフォルト値は0にしておきます。
新規リソース画面。数値型の定数const_Zeroを値0で作成している
0件のときに使う定数です。値を0にした数値の定数として作っておきます。
割り当て要素の設定画面。変数oppNumbersに取得した商談件数を代入している
取得した商談の件数を変数へ入れます。表示ラベルは当時のまま商談取得です。
数えた件数商談数に入れる値
1以上数えた件数から1を引いた値
00のまま

0のときにも分岐を用意するのは、他の処理と重なって件数が0になっている場合に、マイナスの値を書き込まないようにするためです。

決定要素の設定画面。oppNumbersが1以上かどうかで結果を分けている
件数で分岐する決定です。1以上の結果と、デフォルトの結果に分かれます。
割り当て要素の設定画面。oppNumbersから1を減算している
1以上のときの調整です。削除対象の商談自身の分を、減算で1件引きます。
割り当て要素の設定画面。oppNumbersから定数const_Zeroを減算している
0件のときの分岐です。定数の0を引くだけなので、マイナスにはなりません。

取引先責任者を更新する

調整した件数を、取得した取引先責任者レコード変数の商談数へ代入し、レコードを更新要素で保存します。取得元のレコード変数をそのまま使えば、IDを別途指定する必要はありません。

レコードを更新要素の設定画面。取引先責任者のOppCounts__cへ変数を代入している
取引先責任者の商談数を書き換えます。値に変数oppNumbersを指定します。
フロー全体図。2つの取得、割り当て、決定、2つの割り当て、更新の順に並ぶ
組み上がったフローの全体です。決定のあと2本に分かれ、更新で合流します。

一括削除時に気をつけること

同じ取引先責任者にひもづく商談を、一括削除でまとめて消すこともあります。この場合も削除トリガーフローは商談1件につき1回のインタビューとして動き、それぞれが同じ取引先責任者を更新しようとします。フロー全体の一括処理で更新はまとめられますが、1つのバッチで許可される重複更新の合計数は12件です。同じ取引先責任者にぶら下がる商談を13件以上まとめて削除すると、この上限に当たる可能性があります。

動作確認

  1. 既存の商談と取引先責任者を確認する

    削除前の商談数が、実際の商談件数と一致しているかを確認します。

  2. 商談を削除する

    対象の取引先責任者にひもづく商談を1件削除します。

  3. 取引先責任者の商談数を確認する

    削除前より1件減っていれば成功です。0件だった取引先責任者で試すと、0のまま変わらないことも確認できます。

商談テスト1の詳細画面。取引先責任者にContactBが入っている
削除前の商談の1件目です。取引先責任者がContactBであることを確認します。
商談テスト2の詳細画面。取引先責任者にContactBが入っている
同じ取引先責任者にひもづく2件目の商談です。これを削除して件数を見ます。
取引先責任者ContactBの詳細画面。商談数が2と表示されている
削除前の商談数です。赤枠のとおり2件で、実際の商談件数と一致しています。
商談テスト2の詳細画面。右上のメニューで削除が強調されている
商談を削除するところです。赤枠の削除を押すと、削除トリガーフローが動きます。
商談テスト2の詳細画面。フェーズ帯まで含めてメニューの削除が見えている
同じ操作を画面全体で見たところです。削除の位置を確かめてから押します。
取引先責任者ContactBの詳細画面。商談数が1と表示されている
削除後の商談数です。赤枠が1に変わっていれば、再集計は成功しています。

ここで間違えやすい

間違い何が起きるか
数えた件数をそのまま商談数へ入れる削除対象の商談自身も数に含まれたままになります
件数が0のときに1を引いてしまう商談数がマイナスになります
一度に13件以上の商談を同じ親から削除する重複更新の上限に当たり、更新が失敗することがあります

確認した環境

  • 2026年9月 / Salesforce Summer '26(APIバージョン67.0)時点の公式ヘルプで、削除トリガーフローの実行タイミングとフローの上限を確認しています
  • 項目名は、ご自身の組織のものに置き換えてください

まとめ

  • 削除トリガーフローは、商談が実際に削除される前に実行されます。項目値はそのまま読み取れます
  • そのため、削除前に数えた件数には削除対象の商談自身が含まれます。1を引いてから保存します
  • 件数が0のときは1を引かず、0のまま保存します
  • 同じ取引先責任者から13件以上の商談を一度に削除すると、重複更新の上限(12件)に当たることがあります
  • 動作確認は、0件の取引先責任者でも試し、マイナスにならないことを確かめます

Salesforceの導入・運用についてご相談ください

導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。