ADVERTISEMENT

【Salesforce】自動化が二重に動く場合のフロー整理

【Salesforce】自動化が二重に動く場合のフロー整理
🛡️ 超解決

Salesforceで自動化を設定していると、思いがけず同じ処理が二重に実行されてしまうケースが少なくありません。例えば、取引先責任者の作成時に送信されるはずのメール通知が2通届いたり、商談のステージ更新に伴うフィールド更新が重複して行われたりします。これらの問題の多くは、ワークフロールール、プロセスビルダー、フロー、承認プロセス、Apexトリガが複数同時に動いていることが原因です。本記事では、二重実行が発生する原因を体系的に整理し、実際に調査・修正するための手順を具体的に解説します。

【要点】この記事で確認すること

  • 最初に見る場所: 設定の「プロセス自動化」ページにある「自動化設定の一覧」を開き、有効なすべての自動化ルールを把握する。
  • 切り分けの軸: トリガ条件(いつ動くか)、実行順序(Before / After)、更新対象フィールドの競合の3つで整理する。
  • 注意点: 本番環境の変更は影響が大きいため、必ずSandboxで事前テストし、管理者権限でバックアップを取ってから修正すること。

ADVERTISEMENT

1. 二重実行が発生する代表的な原因

二重実行の原因は大きく4つのパターンに分類できます。

原因1:同じオブジェクト・同じタイミングで複数の自動化が重複している

典型的な例として、取引先責任者作成時に「メール送信」をワークフロールールとフローの両方で設定しているケースです。どちらも「レコード作成後」をトリガーにしているため、それぞれが独立してメールを送信し、結果として2通届きます。

原因2:親子関係のレコード更新による連鎖的なループ

商談の金額が更新された際、商談オブジェクトの自動化が取引先オブジェクトのフィールドを更新し、その更新をトリガーに取引先オブジェクトの自動化が再び商談を更新するといったループが発生します。このような連鎖は、一度に複数の自動化が動く原因となります。

原因3:レコードトリガフローとApexトリガの同時実行

特にApexトリガ(Before UpdateやAfter Insert)とレコードトリガフローが同じオブジェクト・同じイベントで動作するよう設定されている場合、両方が実行され、結果としてフィールド更新やメール送信が二重になることがあります。Apexはコードレベルで制御できますが、フローとの調整が不足していると発生します。

原因4:プロセスビルダーとフローの混在(非推奨機能の残存)

プロセスビルダーはSalesforceによって段階的に廃止が進められていますが、まだ動作している組織も多いです。新しいフローと古いプロセスビルダーが同じ条件で動いていると、二重実行が発生しやすくなります。

2. 自動化機能の実行順序を理解する

二重実行を解決するには、Salesforce内での各自動化機能の実行順序を知っておく必要があります。以下の順序で動作します。

  1. システムバリデーションルール
  2. Apexトリガ(Before Insert, Before Update)
  3. 重複ルール
  4. ワークフロールール(即時アクション)
  5. プロセスビルダー(即時アクション)
  6. フロー(レコードトリガ、Before Save)
  7. Apexトリガ(After Insert, After Update)
  8. ワークフロールール(時間依存アクション)
  9. プロセスビルダー(時間依存アクション)
  10. 承認プロセス
  11. フロー(レコードトリガ、After Save)
  12. エスカレーションルール

この順序の中で、同じタイミングで複数の自動化が同じオブジェクト・同じフィールドを更新しようとすると、二重実行やデータ競合が発生します。例えば、ワークフロールールが「レコード作成後」にフィールドAを更新し、続いて実行されるプロセスビルダーが同じフィールドAを別の値に更新する場合、最終的な値が予想と異なることがあります。また、After Saveフローがさらに別の更新を行うと、さらに複雑になります。

3. 原因を特定するための調査手順

二重実行の問題を切り分けるには、以下の手順で調査を進めます。

  1. 1. 自動化設定の一覧を出力する
    設定 → プロセス自動化 → 自動化設定の一覧 を開き、CSVダウンロードします。この一覧には、すべての有効なワークフロールール、プロセスビルダー、フロー、承認プロセスが含まれています。
  2. 2. 対象オブジェクトを絞り込む
    問題が発生しているオブジェクト(例:取引先責任者)に関するルールだけにフィルタリングします。エクスポートしたCSVをExcelで開き、オブジェクト名でフィルタをかけると効率的です。
  3. 3. トリガー条件とアクションを比較する
    各ルールの「トリガー条件」と「アクションの種類」を確認します。例えば、取引先責任者の作成時にメール送信を行うルールが複数ある場合は、それぞれの条件式を比較します。条件が全く同じであれば、原因は重複設定の可能性が高いです。
  4. 4. 実行順序をシミュレーションする
    該当するルールの実行タイミング(Before Save/After Saveなど)を確認し、上記の実行順序に当てはめてシミュレーションします。どのルールが先に動くか、どの順番でフィールドが更新されるかを把握します。
  5. 5. Sandboxで再現テストを行う
    問題の自動化をSandbox環境にコピーし、実際にレコードを作成・更新して挙動を確認します。Debug Logsやフローの「デバッグ」機能を使って、どの自動化が何回実行されたかをログで確認できます。

これらの手順を踏むことで、原因となっている自動化の組み合わせを特定できます。

4. 状況別の修正方法と比較表

原因が特定できたら、適切な修正方法を選びます。以下の比較表を参考にしてください。

状況 推奨修正方法 注意点
ワークフロールールとフローが重複 ワークフロールールを無効化し、フローに統合する ワークフロールールは将来廃止されるため、積極的に移行する
プロセスビルダーとフローが重複 プロセスビルダーを非アクティブにし、フローで置き換える 非推奨機能のため、早めの移行が望ましい
同じフロー内で複数のパスが独立して動作 フローを1つのパスに統合し、条件分岐で処理をまとめる フローの設計を見直し、重複ロジックを除去する
Apexトリガとフローの同時実行 Apexトリガ内でフローの実行を制御する、またはフローを停止する 開発者と協力し、どちらかに統一する
親子ループによる連鎖 再帰トリガを防ぐためのStatic変数やフローの「1回のみ実行」条件を設定 更新しないフィールドを明示的に除外する

5. 修正後の検証と再発防止策

修正が完了したら、Sandboxで徹底的にテストします。具体的な検証手順は以下の通りです。

  1. テストデータの準備:問題が発生したのと同じ条件のレコードを作成します。バリエーションとして、異なる値を複数テストします。
  2. 自動化の実行確認:レコードを作成・更新した後、各自動化が意図した回数だけ実行されたか、Debug Logsやフロー履歴で確認します。
  3. データの整合性チェック:更新されたフィールドの値が正しいか、重複更新による矛盾がないかを確認します。
  4. パフォーマンスの確認:大量データを一括更新する場合、ガバナー制限に引っかからないかテストします。
  5. 影響範囲の洗い出し:変更が関連するレポートやダッシュボード、他システムとの連携に影響を与えていないかをチェックします。

再発防止策としては、以下のルールを運用に組み込みます。

  • 新規自動化の作成時には、必ず「自動化設定の一覧」で既存のルールを確認してから行う。
  • 四半期に1回、定期的な自動化監査を実施し、重複や非推奨機能の有無をチェックする。
  • フローとプロセスビルダーの混在を避け、フローに統一する方針を組織内で合意する。
  • Apexトリガを使う場合は、フローが存在しないか事前に確認し、担当者間で調整する。

6. 管理者に確認すべきポイント

二重実行の問題が解決しない場合や、修正に自信がない場合は、システム管理者に以下の情報を伝えて相談するとスムーズです。

  • 問題の具体的な症状:どのオブジェクトのどの操作で、何が何回発生したか(例:取引先責任者の作成時にメールが2通届く)。
  • 調査に使用した自動化設定の一覧:CSVファイルやスクリーンショットを添付する。
  • 実行順序のシミュレーション結果:どのルールが競合していると推定したか。
  • Sandboxでの再現手順:同じ操作をSandboxで実行してログを取得しておく。
  • 提案する修正案:どのルールを無効にしたいか、あるいは統合したいか、具体的な案を提示する。

管理者は、組織全体の設定を把握しているため、影響範囲の大きい修正を適切に判断できます。

7. よくある質問

Q1:取引先責任者の作成時にメールが2通届くのはなぜですか?

最も多い原因は、ワークフロールールとフローの両方で「メール送信」アクションが設定されていることです。自動化設定の一覧で取引先責任者オブジェクトをフィルタリングし、メール送信に関わるルールをすべて確認してください。重複が見つかれば、どちらかを無効化または統合します。

Q2:データインポート時に二重実行を防ぐ方法はありますか?

データインポート時は、通常のユーザ操作と同じように自動化がトリガされます。二重実行を防ぐには、インポート前に不要な自動化を一時的に無効化するか、Apexトリガ内でインポートかどうかを判定するコードを追加します。また、Data Import WizardやData Loaderの設定で「トリガを無効にする」オプションがあれば活用します。

Q3:フローとワークフロールールが競合した場合、どちらを優先すべきですか?

Salesforceはワークフロールールの段階的廃止を発表しているため、長期的にはフローに統合することを推奨します。ただし、即座に移行できない場合は、まずはどちらか一方を無効にして影響を確認し、問題なければそのままフローに統一してください。移行期間中は、実行順序を考慮して調整する必要があります。

まとめ

Salesforceで自動化が二重に動く問題は、設定の重複や実行順序の誤解が主な原因です。まずは自動化設定の一覧を出力し、対象オブジェクトのルールを洗い出すことが第一歩です。その後、実行順序を考慮しながら修正し、必ずSandboxで検証してから本番に反映します。定期的な自動化監査を組織の運用に組み込めば、再発を効果的に防止できます。この記事の手順を参考に、問題を体系的に解決していってください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT