Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Salesforceの「取引の開始」関連項目がnullになるタイミングについての話

はじめに

初めまして、技術本部 Sansan Engineering Unit Data Hubグループの菊池です。

約6年間Salesforce エンジニアとしてさまざまな経験を積み、2021年1月からSansan株式会社に入社しました。

現在は、営業DXサービス「Sansan」とSalesforce連携を実現する、Data Hub AppExchange Packageの開発/運用・保守をしています。

今回とある調査で初めて知った仕様があったので、本ブログで共有します。

背景

とある調査の中で「取引を開始したリードレコードから取引先責任者レコードを見ようとしたら、エラー画面が表示される」という事象が起きました。

エラー画面

「取引の開始」で作成した取引先責任者レコードが削除されていると思い開発者コンソールで対象のデータを見ると、ConvertedContactId には値が設定されていました。

リードレコードの「取引の開始」に関する項目の値

そのため、再度開発者コンソールにて、ConvertedContactId に設定されているIdを基にSOQL(Salesforce Object Query Languageの略。Salesforce オブジェクトクエリ言語のこと)を実行したが、該当の取引先責任者レコードは存在していませんでした。

取引先責任者レコード取得のSOQL結果

以上の事象からここで1つの疑問が出てきました。

  • 参照関係項目で設定している親レコードを削除したら、通常値がnullになるのに ConvertedContactId は何故nullにならないのか

この疑問をSalesforceのサポートに問い合わせして確認してみました。

原因

概要

通常の参照関係項目と「取引の開始」関連項目( ConvertedAccountId, ConvertedContactId, ConvertedOpportunityId)で親レコード削除時のnullになるタイミングが違うことが原因でした。

前提条件

Salesforceのレコード削除には3つの状況があります。

  1. ごみ箱に入れる(標準画面からの削除など)
  2. 物理削除待ちレコード(ごみ箱を空にする)
  3. 物理削除レコード(不定期で実行されている削除プロセス)

それぞれ1. 2.はディスクに残っている(SOQLで取得可能)が、3.はディスク内から削除されている状況になります。

詳細

通常の参照関係項目の親レコードを削除する(ごみ箱に入れる)と、nullになります。

レコード削除前(ごみ箱に入れる)
レコード削除後(ごみ箱に入れる)の親レコード詳細画面
レコード削除後(ごみ箱に入れる)

しかし、「取引の開始」関連項目( ConvertedAccountId, ConvertedContactId, ConvertedOpportunityId)は削除しても(ごみ箱に入れる)消えません。

レコード削除前(ごみ箱に入れる)のレコードの中身
レコード削除後(ごみ箱に入れる)の取引先責任者レコード詳細画面
レコード削除後(ごみ箱に入れる)のレコードの中身

また、ごみ箱を空にしてもnullにはなりません。

空にした後のごみ箱のリストビュー
レコード削除後(ごみ箱を空にした)のレコードの中身

「取引の開始」関連項目がnullになるタイミングは、レコードが完全に物理削除されたときになります。

レコード削除後(物理削除後)のレコードの中身

通常の参照関係項目と「取引の開始」関連項目のnullになるタイミングについて以下の表でまとめました。

ごみ箱に入れる 物理削除待ちレコード 物理削除レコード
通常の参照関係項目 nullになる nullになる nullになる
「取引の開始」関連項目 nullにはならない nullにならない nullになる

したがって、通常の参照関係項目と「取引の開始」関連項目では親レコードが削除された際のnullになるタイミングが異なります。

まとめ

「取引の開始」関連項目は、Apex トリガや画面開発で参照する項目ではあるので、その際に注意しないといけない仕様だと思います。

また、本仕様について公式ドキュメントには記載が無い隠れた仕様なので、今後も細かい仕様がわかったらブログにて共有します。



20240312182329
20240315190344

© Sansan, Inc.