ブログ

Salesforceの大量レコード更新を効率化する:関連レコードの一括更新機能の活用

#Salesforce #レコード更新 #一括更新

積極採用中
セミナー情報

Salesforceを運用していると、関連する複数のレコードを一度に更新したいシーンに度々遭遇します。たとえば、商談が成立した際に関連するすべてのToDoを完了にしたい、契約締結後に進行中のタスクをまとめて終了させたいといったケースです。
このような大量レコードの更新処理は、一見単純な作業に思えますが、実装方法を誤るとガバナ制限に抵触したり、システムのパフォーマンスに影響を与えたりする可能性があります。特に、フローを使用した実装では、ループ処理による更新を選択しがちですが、これは処理件数が増えた際に深刻な問題を引き起こす可能性があります。

本記事では、このような課題を解決する「関連レコードを更新」機能に注目します。この機能を活用することで、複雑なループ処理を実装することなく、効率的に大量のレコード更新を実現できます。設定方法から実運用における注意点まで、実践的な知見を交えながら解説していきます。

大量レコード更新の基礎知識

Salesforceでレコードを更新する際、私たちは常にガバナ制限という見えない壁と向き合っています。このガバナ制限は、システムの安定性と他のユーザーへの影響を最小限に抑えるために設けられた重要な仕組みです。

実務では、商談の成立や契約の締結といったビジネスイベントをきっかけに、関連する複数のレコードをまとめて更新する必要性が生じます。従来、このような処理はフローのループ要素を使用して実装されることが一般的でした。具体的には、更新対象のレコードを取得し、1件ずつループ処理で更新していく方法です。
しかし、この方法には重大な課題があります。Salesforceには1トランザクションあたりのDML(データ操作)処理に制限があり、ループ処理での更新は1レコードごとに1回のDMLをカウントします。そのため、更新対象が数百件を超えるような場合、簡単にガバナ制限に達してしまいます。

また、ループ処理には別の課題もあります。処理時間が更新対象のレコード数に比例して増加するため、ユーザーの待ち時間が長くなってしまいます。特に、リアルタイム処理が求められるケースでは、この待ち時間は大きな問題となります。
これらの課題に対して、Salesforceは「関連レコードを更新」という機能を提供しています。この機能は、内部的に最適化された一括処理を行うため、DML消費を最小限に抑えることができます。また、非同期実行オプションを活用することで、ユーザーの待ち時間を気にすることなく、大量のレコード更新を実現できます。
次章では、この「関連レコードを更新」機能の詳細と、具体的な使い方について解説していきます。

関連レコードを更新機能の詳細

「関連レコードを更新」機能の本質は、親レコードと子レコードの関係性を活用した更新の仕組みにあります。この機能は、フローのレコードトリガーで提供されており、特定のレコードが更新された際に、それに関連する複数のレコードを一括で更新することができます。

とりわけ重要なのは、更新対象となるレコードの選び方です。この機能では、主従関係や参照関係といったSalesforceのオブジェクト間の関係性に基づいて、更新対象を特定します。たとえば、商談に紐づくToDoをすべて更新したい場合、商談を親レコードとして、そこから参照されているToDoレコードを一括で更新することができます。

設定画面では、更新対象となる関連レコードを選択する際に、以下のような情報が表示されます。

  • 子レコード(「>」マークなし):現在のレコードを親として持つレコード群
  • 親レコード(「>」マークあり):現在のレコードが参照している上位のレコード

表示される項目名は、オブジェクト間の関係を定義する際に設定した「子リレーション名」に基づいています。これは、システム内部でデータの関係性を管理するために使用されているAPI名です。

更新時に設定できる値には一定の制限があります。具体的には、すべての対象レコードに対して同じ値を設定することはできますが、レコードごとに異なる値や、計算結果に基づく値を設定することはできません。
例えば、

  • 設定可能:すべてのToDoのステータスを「完了」に変更
  • 設定不可:各Todoの期日を現在の値から3営業日後に延長

この制限は一見デメリットに思えるかもしれませんが、むしろこれにより処理が単純化され、大量のレコードを効率的に更新できるというメリットがあります。

次章では、この機能を実際に活用するための具体的な設定手順と、運用時の注意点について解説していきます。

実装手順と運用のポイント

実際の設定手順について、具体的なユースケースに沿って説明していきます。ここでは、商談が成立した際に、関連するすべてのToDoを完了状態に更新するケースを例に解説します。

まず、フロービルダーでレコードトリガーフローを新規作成します。トリガーの条件は、商談レコードが「成立」に更新された場合としましょう。この設定により、商談のステージが成立に変更された時点で、フローが起動します。

次に、「関連レコードを更新」要素をフローに追加します。この要素は2つの方法で追加できます。

  1. 要素を追加メニューから直接「関連レコードを更新」を選択
  2. 通常の「レコードを更新」要素を追加し、その中から「フローをトリガーした商談レコードに関連するレコードを更新」を選択

実行時のパフォーマンスを考慮する上で、重要なのが実行モードの選択です。フローには「即時実行」と「非同期実行」の2つのモードがあります。

即時実行の場合:

  • 処理結果をその場で確認できる
  • 3,000件程度までの更新なら問題なく処理可能
  • 処理完了まで1分程度かかることもある

非同期実行の場合:

  • 5,000件以上の大規模な更新でも安定して動作
  • 処理結果の即時確認は不可
  • ユーザーの待ち時間が発生しない

実運用においては、以下のポイントに注意が必要です。

更新対象の件数が予測できない場合は、非同期実行を選択するのが安全です。また、更新内容の即時反映が重要なケースでは、条件分岐を設けて以下のような対応も検討できます。

  1. まず更新対象の件数を取得
  2. 件数が3,000件以下なら即時実行
  3. 3,000件を超える場合は非同期実行に切り替え

これにより、少数レコードの更新は即座に反映しつつ、大量更新時も確実に処理を完了させることができます。

まとめ

「関連レコードを更新」機能は、Salesforceにおける大量レコード更新の課題を効果的に解決する手段として活用できます。この機能の特徴を理解し、適切な実行モードを選択することで、ガバナ制限を気にすることなく、安定した更新処理を実現できます。
ただし、更新値に制限があることや、非同期実行時の結果確認に時間差が生じることなど、機能面での制約もあります。そのため、以下のような判断基準で使い分けを検討するとよいでしょう。

関連レコード更新機能の使用が適している場合:

  • 一括で同じ値に更新したい場合
  • 更新対象が数千件規模になる可能性がある場合
  • 更新処理の即時完了にこだわらない場合

代替手段の検討が必要な場合:

  • レコードごとに異なる値で更新したい場合
  • 更新結果を即座に次の処理に利用する必要がある場合
  • 更新対象が常に少数件数で収まる場合

システム設計において、データ更新の処理方法を検討する際は、この機能の特徴を十分に理解した上で、業務要件に合わせて最適な実装方法を選択することをお勧めします。

<Salesforce>
弊社ではSalesforceをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら

また、弊社ではSalesforceの導入支援のサポートも行っています。ぜひお気軽にお問い合わせください。
>>Salesforceについての詳細はこちら
>>Salesforceの導入支援実績はこちらからご覧いただけます!

医療業界に特化した営業支援、顧客管理(SFA/CRM)のコンサルティングも提供しております。こちらもぜひお気軽にお問い合わせください。
>>顧客管理(SFA/CRM)のコンサルティングの詳細はこちら

CONTACT
お問い合わせ

ご相談やご依頼、病院マスタなどについてのお問い合わせはこちらのお問い合わせフォームから。

サービスなどについてのお問い合わせ 病院マスタについてのお問い合わせ

メールお問い合わせ