【ローコード民待望】SFフローでの大量データ処理が可能に!

【Salesforceローコード民待望】SFフローでの大量データ処理が可能に! フロー/LWC
【Salesforceローコード民待望】SFフローでの大量データ処理が可能に!

Salesforceでの大量データ処理はApexで行う、数100〜数1000件程度ならフローでも可能、というのが従来の考え方でした。

この記事ではフローでも大量データ処理が可能になったため、ローコードだけでも対応できるという内容を検証していきます。

フローで使える「一括処理ジョブ」が登場

Salesforceの設定で[バッチ管理]という機能が登場しています。
この機能では「一括処理ジョブ」が作成できます。

この機能の登場でフローの大量データ処理が可能となっています。


フローで大量データ処理ができるようになったカラクリは?

下記の順番でSalesforceフローでの一括処理が可能になります。

①自動起動フローで大量データの処理内容をフローとして作成
②「一括処理ジョブ」で①のフローを指定し、バッチサイズや処理レコード条件を指定(=フローで使える”アクション”となる)
③スケジュールレコードトリガーフローを作成し、開始要素で起動時刻や処理レコード条件を定義、処理内容では②のアクションを使用する

②でバッチサイズを指定するので、大量データであっても分割して処理されるんですね。
従来のApexの処理で言うとおおよよ下記に該当しますが、それがローコードで実現可能になりました。
●Apexでの処理時は下記であった
  ①Batchableクラス
  ②Database.executeBatch(batchInstance, batchSize)
  ③Schedulableクラス


フローで大量データ処理の仕組みをつくる3つのステップ

①自動起動フローで大量データの処理内容をフローとして作成

まずはSalesforce自動起動フローを作成します。
今回は自動起動フローで取引先を取得、更新するというシンプルな構成です。

【ポイント】コレクション変数ではない入力変数を1つ定義しておく必要があります。次のステップでオブジェクト内の各レコードを一意に識別する入力変数を使用するためです。


②「一括処理ジョブ」で①のフローを指定し、バッチサイズや処理レコード条件を指定(=フローで使える”アクション”となる)

[バッチ管理]から[新規]ボタンにて一括処理ジョブを作成していきます。



実行プロセスでは①で作成した自動起動フローを指定します。コレクションではない入力変数が定義されてないと次に進めません。
その他にバッチサイズ(1〜2000)、再試行回数(3回まで)、再試行間隔(1000~10000ミリ秒)を指定します。
プロセス種別では「フロー」しか選べないので、まさにフローに特化した一括処理用の機能です。



最後に②の自動起動フローで作成した入力変数を指定し、処理対象とするオブジェクトと条件を定義します。



③スケジュールレコードトリガーフローを作成し、開始要素で起動時刻や処理レコード条件を定義、処理内容では②のアクションを使用する

最後にSalesforceスケジュールレコードトリガーフローを作成します。

アクション要素として②で作成した一括処理ジョブを呼び出します。
アクション内で「一括処理ジョブ」カテゴリ内に先ほど②で作成したジョブを指定します。


以上で作成が完了となります。
②で指定したバッチサイズで1トランザクションとして処理されるため、DMLやSOQL、CPUタイムアウトといったガバナ制限を回避する有効な手段となります。


想定FAQ

・Q1:スケジュールトリガーフロー単体でもある程度の大量データ処理は可能では?
・A1
確かにスケジュールトリガーフローでは自動である程度の一括処理は走ります。
下記記事で紹介している通りスケジュールトリガーフローは数1000件程度であれば処理可能です。

  ・あるタイミングでスケジュールトリガーフローの起動条件に合致するのが5000件の場合に
  ・スケジュールトリガーフローが5000回起動するのではなく、1回だけ起動する
  ・そのためDMLとSOQLの発行回数はそのスケジュールトリガーフロー内の各要素を1回ずつ実行するだけとなる(フロー内の要素がレコード取得要素1つ(検索条件無し)、更新要素1つの場合はSOQLとDMLの発行回数はそれぞれ1回だけ)
  ・つまり数1000件程度ならガバナ制限であるSOQL100回まで、DML150回までという制限には抵触する可能性は低い

ただし一方でSOQLでの取得合計レコード5万件、DMLでの処理合計レコード1万件というのは抵触の可能性が出てくるため要注意です(上記例では処理5000件なので抵触はしないが)
→SOQL5万件、DML1万件に抵触する可能性があるシーンでは今回紹介した「一括処理ジョブ」を使用しましょう。


・Q2:スケジュールトリガーフローだけでなく、レコードトリガーフロー内でもアクションとして「一括処理ジョブ」が使えるようになればいいんだけど
・A2
たしかにレコードトリガーフローでも使用できればより便利です。ただ2025年8月現在では「一括処理ジョブ」が使用できるのはスケジュールトリガーフローのみのようです。

・Q3:Apex、フロー、大量データの一括処理はどちらで行うのが良いのか
・A3
数十万件程度であれば、本記事で紹介したフローの一括処理ジョブでも対応可能です。
ただし、フローではTry&Catchの柔軟なエラー処理や、途中で失敗したバッチだけ再試行する、条件に応じて再処理するといった細かい制御は難しいです。
その点Apexであれば Database.Stateful を使ったバッチ間の状態保持やカウンタ管理、リトライロジックの組み込みが容易で、大量データ処理でも柔軟に対応できます。

フロー/LWC
ノーザントレイルから始めよう
タイトルとURLをコピーしました