Salesforceフローの非同期処理を使ってみた

今回は、Salesforceフローで "待たせない" 堅牢なシステムを構築するための鍵となる『非同期処理』についてご紹介します。

はじめに

「ユーザーが保存ボタンを押してから画面が固まってしまう」 「大量のデータを処理させたら、タイムアウトエラーが出てしまった」

こんな経験はありませんか? フローの処理順序はあっているはずなのに、なぜかパフォーマンスが出ない…。もしかすると、それは「重い処理」をユーザーの保存操作と同時に実行しているせいかもしれません。

今回は、Salesforceフローにおける「非同期処理」とはどんなものか、そして同期処理とどう使い分けるべきか、その具体的な実装方法について理解を深めていきたいと思います。

「同期処理」と「非同期処理」ってどんなもの?

まず、Salesforceのレコード保存における2つの処理方法の違いを見てみましょう。

同期処理の場合

同期処理の場合は処理の完了を待って、次の処理を実行する方法です。 ユーザーが「保存」ボタンを押すと、入力規則、Apexトリガー、フローなど一通りの処理がすべて完了するまで、ユーザーは画面の前で待たされます。

非同期処理の場合

一方、非同期処理の場合は処理の完了を待たずに、次の処理を実行する方法です。 ユーザーが「保存」ボタンを押すと、システムは「重い処理」(例:外部連携、大量計算)の実行をバックグラウンドに予約し、ユーザーにはすぐに「保存完了」と応答します。

このように、非同期処理で実装すると、ユーザーは画面の前で待つことなく、優れたUXを体験できます。
また、非同期処理は、ユーザーの保存操作と「重い処理」を切り離して実装することだということがわかりました。

非同期処理のメリットと考慮点

非同期処理の最大のメリットは、同期処理に比べてユーザーを待たせないこと、そしてガバナ制限が緩和される点です。

Salesforceには、1回のトランザクションで使用できるCPU時間やSOQLクエリ数に厳しい制限があります。 非同期処理は、元の保存処理とは別のトランザクションとして実行されます。これにより、同期処理の制限とは別に、より緩和されたガバナ制限枠を利用できるため、外部システム連携や大量データ処理が安定して実行可能になります。

一方で、考慮すべき点もあります。

非同期処理はバックグラウンドで実行されるため、処理の開始までに若干のタイムラグがあります。「保存したら即座に画面に計算結果を反映したい」といったリアルタイム性が必要な要件には使えません。

また、非同期処理は元の保存トランザクションとは別で実行されるため、もし非同期処理が失敗しても、すでに完了している元のレコード保存はロールバックされません。 非同期処理が失敗したケースに備え、フローの「障害パス」などでエラーを検知し、管理者に通知するような仕組みを作成しておくことで、より堅牢なシステム構築が可能となります。

実装方法:レコードトリガーフローの「非同期パス」

フローで非同期処理を実装するのは非常に簡単です。今回は「レコードトリガーフロー」の非同期パスを使います。 非同期パスとは、レコードが保存された後に、バックグラウンドで実行される専用の処理ルートです。

【設定手順】
1.レコードトリガーフローを新規作成します。

2.開始コンポーネントで、フローを最適化:「アクションと関連レコード」を選択します。
(高速項目更新はレコードが保存される前に実行される処理のため、高速項目更新を選択した場合、非同期処理フローは作成できません。)

3.開始コンポーネントの下部にある「非同期パスを追加」をチェックします。

これだけで、「非同期に実行」というラベルの付いた新しいパスがフローキャンバスに表示されます。

あとは、外部システムとの連携、大量の関連レコードの処理といった「ユーザーを待たせる必要がない重い処理」を、すべてこの「非同期に実行」パスの中に配置していくだけとなります。

実装例:商談完了時にChatter通知

実装例として、非同期パスの中でChatter通知を行うフローを見てみましょう。 条件は「商談のフェーズが完了に変更された時」です。

同期パスには、即時反映が必要なトリガーされたレコード及びそのレコードに紐づくレコードを更新する処理を置きます。 非同期パスに、[Chatterに投稿] アクションを配置します。

この実装にすることで、ユーザーが商談を「完了」にして保存した際、Chatterへの投稿処理の完了を待つことなく、即座に保存が完了します。
今回は、例としてChatterへの投稿処理を非同期処理に加えましたが、外部システムとの連携や大量レコードの更新を非同期処理として実装するのが一般的です。

おわりに

いかがだったでしょうか。普段あまり意識せずにフローを組んでいると、つい同期処理にすべてのロジックを詰め込んでしまいがちです。 しかし、非同期処理の仕組みを知ることで、なぜパフォーマンスが低下していたのか、どうすればユーザーに快適な操作を提供できるのか、その「設計思想」が理解できます。

「外部連携や大量データ処理は非同期処理で実装」「即時性が必要な要件は見極め同期処理で実装」ということを理解し、非同期処理を有効に活用することでSalesforceのフローを効果的に実装することができます!ぜひ、日々の開発・改修にお役立てください。