Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

ループ処理を含むフローで Too many SOQL queries: 101 が発生する原因

公開日: Aug 25, 2025
説明

ループ処理を含むフローを実行すると、 Too many SOQL queries: 101 が発生する場合があります。
1 トランザクションでは、合計 100 個までの SOQL クエリを実行することができるガバナ制限に達した場合に、上記のエラーが表示されます。
このエラーを回避するためには、レコード更新要素を使用して一括処理する方法や、ループ外でレコード更新要素を使用する方法があります。具体的な手順として、フローの設定やレコードの取得・更新方法を詳細に説明しています。ガバナ制限に注意し、適切なフロー設計を行うことが重要です。

SOQLが発行される条件については、トランザクション単位のフローの制限を確認ください。

※ 注意

  • 事象が発生するシナリオと具体的な解決方法を記載しますが、お客様の事象が必ず解決されることを約束したものではありません。
  • こちらの記載内容についての具体的な手順に関しては、Salesforce サポートでは対応できかねますので、あらかじめご了承ください。
  • お客様にて構築しても期待通りの動作にならない場合は、Salesforce サポートにお問い合わせください。
解決策

Too many SOQL queries: 101 が発生するシナリオ

〇 要望

 取引先が更新された時に、取引先に関連したケースレコードの項目を更新したい。

〇 Too many SOQL queries: 101 が発生する可能性がある実装

 フローでループを用いてループ内でケースレコードの更新を実施
制限に抵触する恐れがあるフローの例

〇 回避方法 1 レコード更新要素を使用して一括で処理する

 ※ すべて同じ値に更新する場合は利用できます。

1. [設定] で、[クイック検索] ボックスに「フロー」と入力して、[フロー] を選択します。
2. [新規フロー] を選択します。
3. [レコードトリガフロー] を選択して [作成] をクリックします。
4. 開始要素にて下記を設定し、[完了] をクリックします。

[オブジェクト] : 取引先
[フローをトリガする条件] : レコードが更新された
[フローを最適化] : アクションと関連レコード

5. 開始要素の下の [+] をクリックして [レコードを更新] 要素をクリックし、下記を入力し[完了] をクリックします。

[表示ラベル] : ケース一覧更新
[API 参照名] : Update_CaseRecord
[更新するレコードを検索してその値を設定する方法] : レコードを識別する条件を指定し、項目を個別に設定
[オブジェクト] : ケース
ケースレコードを絞り込み
[項目] : AccountId
[演算子] : 次の文字列と一致する
[値] : {!$Record.Id}
更新する項目を割り当てる
レコード更新要素の設定例

6. [保存] をクリックし、表示ラベル名、API参照名を入力し、[保存] をクリックします。
7. [有効化] をクリックします。
 

〇 回避方法 2 ループ外でレコード更新要素で処理する


完成イメージ図
完成イメージ図

1. [設定] で、[クイック検索] ボックスに「フロー」と入力して、[フロー] を選択します。
2. [新規フロー] を選択します。
3. [レコードトリガフロー] を選択して [作成] をクリックします。
4. 開始要素で下記を設定し、[完了] をクリックします。

[オブジェクト] : 取引先
[フローをトリガする条件] : レコードが更新された
[フローを最適化] : アクションと関連レコード

5. 開始要素の下の [+] をクリックして [レコードを取得] 要素をクリックし、下記を入力後に、[完了] をクリックします。

[表示ラベル] : ケース一覧取得
[API 参照名] : Get_CaseRecord
[オブジェクト] : ケース
ケースレコードを絞り込み
[項目] : AccountId
[演算子] : 次の文字列と一致する
[値] : {!$Record.Id}
[保存するレコード数] : すべてのレコード
[レコードデータの保存方法] : すべての項目を自動的に保存

6. [レコードを更新] 要素の下の [+] をクリックして [ループ] 要素をクリックし、下記を入力後に、[完了] をクリックします。

[表示ラベル] : 取得したケースレコードをループ
[API 参照名] : Loop_CaseRecord
[コレクション変数] : {!Get_CaseRecord}
[方向] : 最初の項目から最後の項目へ

7. [項目ごと] の下の [+] をクリックして [割り当て] 要素をクリックし、下記を入力します。

[表示ラベル] : ケースへ値の割り当て
[API 参照名] : Assign_CaseRecordValue

8. 変数値設定の変数で、レコード単一変数セクションで、ループ要素の API 名と同じ API 名の変数をクリックし、更新する項目を選択し、値を割り当てます。

※優先度に high を割り当てる例です
[変数] : {!Loop_CaseRecord.Priority} 
[演算子] : 次の文字列と一致する
[値] : High

9. [完了] をクリックします。
10. [割り当て]要素の下の [+] をクリックして [割り当て] 要素をクリックし、下記を入力します。

[表示ラベル] : コレクション変数に追加
[API 参照名] : Assign_CaseRecords

11. 変数の入力枠をクリックし、[+ 新規リソース] をクリックし、下記を入力した後に、[完了] をクリックします。

[リソース種別] : 変数
[API 参照名] : CaseRecords
[データ型] : レコード
[複数の値を許可] : チェック
[オブジェクト] : ケース
レコード変数の作成例

12. 下記を入力し、[完了] をクリックします。

[演算子] : 追加
[値] : {!Loop_CaseRecord}
割り当ての例

13. [終了] 要素の上の [+] をクリックして [レコードを更新] 要素をクリックし、下記を入力した後に、[完了] をクリックします。

[更新するレコードを検索してその値を設定する方法] : レコードまたはレコードコレクションからの ID およびすべての項目値を使用
[レコードまたはレコードコレクション] : {!CaseRecords}

コレクション変数を用いたレコード更新の例

14. [保存] をクリックし、表示ラベル名、API 参照名を入力し、[保存] をクリックします。
15. [有効化] をクリックします。

ナレッジ記事番号

000396595

 
読み込み中
Salesforce Help | Article