ADVERTISEMENT

【Salesforce】サブフローで困った時の管理者が見るべき原因

【Salesforce】サブフローで困った時の管理者が見るべき原因
🛡️ 超解決

Salesforceのフローでサブフローを活用していると、予期せぬエラーや動作不良に遭遇することがあります。サブフローはフローをモジュール化できる便利な機能ですが、呼び出し元とサブフローの間で変数や権限、バージョン管理などに不整合が生じると、複雑なトラブルの原因になります。管理者として適切に対処するためには、原因を体系的に切り分ける必要があります。本記事では、サブフロー関連の問題を解決するために管理者が見るべき原因と具体的な確認手順を解説します。

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

  • 最初に見る場所: サブフローが呼び出されない、またはエラーが出る場合、まず呼び出し元フローの「サブフロー」要素の設定と、サブフロー自体の公開バージョンを確認してください。
  • 切り分けの軸: 問題の原因は主に「権限・共有」「変数の不一致」「バージョン管理」「ガバナ制限」「実行コンテキスト」の5つに分類できます。どの軸に当てはまるかを症状から見極めます。
  • 注意点: フローの権限設定やプロファイルによるアクセス制限は組織全体に影響するため、安易に変更せず、影響範囲を確認した上で管理者が対応してください。

ADVERTISEMENT

目次

1. サブフローエラーの主な原因と切り分けの基本

サブフローで問題が発生した場合、まずは原因を大きく5つのカテゴリに分けて考えると整理しやすくなります。以下に代表的な症状と原因の対応表をまとめました。

症状 考えられる原因 確認すべき項目 推奨アクション
サブフローが実行されない 権限不足、バージョン未公開 フローのアクセス設定、公開状態 権限付与、最新バージョンを公開
変数の値が正しく渡らない 入力変数・出力変数の不一致 変数名、データ型、必須設定 呼び出し元とサブフローの変数を一致させる
ガバナ制限エラー(SOQL 101等) サブフロー内でのクエリ超過 デバッグログ、制限値 クエリ最適化、バッチ化検討
サブフローが予期せぬ結果を返す バージョンの不一致、ロジック変更 フローのバージョン履歴 意図したバージョンを公開

2. アクセス権限と共有設定の確認

サブフローが呼び出し元から実行されるためには、適切なアクセス権限が設定されている必要があります。特に、システム管理者以外のユーザーがフローを実行する場合、権限不足が原因で動作しないことがよくあります。

2.1. フローのアクセス設定を確認する

サブフロー自体にアクセス権限が付与されているか確認します。フロー設定画面の「アクセス」タブで、実行するユーザーやプロファイルがフローを使用できるようになっている必要があります。さらに、サブフローが参照するオブジェクトへのアクセス権(参照、作成、更新、削除)も必要です。権限が不足していると、フローはエラーになるか、何も行われずに終了します。

2.2. 共有設定の影響を考慮する

サブフロー内でレコードを更新する場合、組織の共有モデルにより、レコードへのアクセスが制限されることがあります。例えば、参照のみの権限しかないユーザーがフローを実行すると、更新権限不足でエラーになります。管理者は、フロー実行ユーザーのプロファイル権限と、共有ルールや「組織全体の共有設定」を合わせて確認してください。

2.3. 失敗パターン:権限不足でサブフローがスキップされる

あるプロファイルのユーザーが呼び出し元フローを実行した際、サブフローが全く実行されない場合があります。デバッグログを見ると「フローが見つかりません」というエラーが出ていることがあります。これは、サブフローへのアクセス権限がそのプロファイルに与えられていないためです。この場合、フローのアクセス設定で該当プロファイルにアクセス権を追加する必要があります。

3. 入力変数・出力変数の不一致

サブフローを呼び出す際、変数の受け渡しは非常に重要です。呼び出し元フローの「サブフロー」要素で指定する入力変数と出力変数が、サブフローの定義と完全に一致していなければなりません。

3.1. 変数名とデータ型の一致確認

サブフローで定義されている入力変数名と、呼び出し元でマッピングする変数名が異なるとエラーになります。また、データ型(テキスト、数値、日付、レコードIDなど)も一致している必要があります。例えば、サブフローがテキスト型を期待しているのに、呼び出し元が数値型を渡すと失敗します。

3.2. 必須変数の設定漏れ

サブフローの入力変数が「必須」に設定されている場合、呼び出し元で値を指定しないとエラーが発生します。逆に、出力変数が必須でない場合でも、呼び出し元で受け取る変数を設定していないと、サブフローの結果が利用できません。管理者は、サブフローの変数設定画面で「必須」チェックボックスを確認し、呼び出し元のマッピングが過不足なく行われているか、各バージョンごとに検証する必要があります。

3.3. 失敗パターン:変数名のタイポでデータが渡らない

呼び出し元の「サブフロー」要素で、変数名を手入力する際にタイポがあると、エラーにはならずに空の値が渡されることがあります。特に、大文字小文字の違い(例えば「accountId」と「AccountId」)もSalesforceでは区別されます。この場合、サブフロー内で予期しないNULL参照エラーが発生します。管理者は、変数名をコピー&ペーストするか、ドロップダウンから選択するように徹底してください。

4. フローのバージョン管理と公開状態

サブフローは常に最新の公開バージョンが呼び出されるとは限りません。呼び出し元フローが保存された時点でのサブフローのバージョンが参照される仕組みを理解しておく必要があります。

4.1. 公開バージョンの確認手順

  1. セットアップで「フロー」を検索し、該当のサブフローを開きます。
  2. 「バージョン」タブをクリックし、公開状態(「公開済み」)のバージョンを確認します。
  3. 呼び出し元フローがどのバージョンを参照しているか確認するには、呼び出し元フローの「サブフロー」要素を開き、バージョン番号が「最新の公開バージョン」になっているか、特定のバージョン番号が指定されているかを確認します。
  4. もし特定のバージョン番号が指定されていて、そのバージョンが公開されていない場合はエラーになります。必要に応じてバージョンを公開するか、呼び出し元のバージョン指定を「最新の公開バージョン」に変更します。
  5. バージョン管理の影響をテストするには、サンドボックスで異なるバージョンを作成し、呼び出し元が意図したバージョンを参照しているか検証します。

4.2. バージョン固定と最新追従の使い分け

サブフローの呼び出し方法には「最新の公開バージョン」と「特定のバージョン」の2種類があります。最新の公開バージョンを常に使うと、サブフローを更新した際に自動的に反映されるため便利ですが、予期せぬ変更が発生するリスクもあります。一方、特定のバージョンを固定すると、変更の影響を受けませんが、サブフローを更新した後に呼び出し元も手動で更新する必要があります。管理者は、組織のポリシーに応じてどちらの方式を採用するか統一することをおすすめします。

5. ガバナ制限と実行コンテキストの影響

Salesforceにはガバナ制限(1回の実行で許容されるリソース量)が存在します。サブフローを含むフローは全体として制限値を消費するため、サブフロー内で多くのSOQLクエリやDML操作を行うと、制限を超過する可能性があります。

5.1. ガバナ制限の確認方法

デバッグログを有効にしてフローを実行し、制限に関する項目(SOQLクエリ数、DML行数、CPU時間など)を確認します。特に「サブフロー」要素の中で呼び出されたサブフロー内の制限消費も合計されるため、呼び出し元だけでなくサブフロー内の制限も合わせて最適化する必要があります。

5.2. 実行コンテキストの違い

サブフローが実行されるコンテキスト(ワークフロー、プロセスビルダー、別のフローなど)によっても動作が異なる場合があります。例えば、レコードトリガフローから呼び出されたサブフローは、同じレコードのコンテキストを共有しますが、自動起動フローから呼び出された場合は新たなコンテキストになります。この違いにより、参照できるレコードや権限が変わるため、問題が発生した場合は実行コンテキストを見直してください。

5.3. 失敗パターン:サブフロー内で大量データを処理してガバナ制限に引っかかる

呼び出し元のフローがループ内でサブフローを複数回呼び出すと、それぞれのサブフロー内でSOQLクエリが発行され、すぐに制限に達します。このような場合は、サブフロー自体をバッチ処理に変更するか、呼び出し元でデータをまとめて取得し、サブフローにはコレクション変数を渡すように設計を改善します。

6. デバッグとログの活用

問題の原因を特定するには、デバッグログが最も有効です。管理者は、フローのデバッグ機能を使い、サブフロー内の各要素の実行状況を追跡できます。

6.1. フローデバッガーの使い方

  1. サブフローを開き、「デバッグ」ボタンをクリックします。
  2. デバッグ画面で入力変数に適切なテスト値を入力します。
  3. 「実行」ボタンを押して、フローの各要素がどのように処理されるかステップ実行します。
  4. 特にサブフローが呼び出される箇所で、変数の値や条件分岐が正しいか確認します。
  5. エラーが発生した場合は、エラーメッセージを記録し、その内容を基にSalesforceのヘルプやコミュニティで検索します。

6.2. ログレベルと監査ログ

プロダクション環境では、フローデバッガーが使えない場合もあります。その場合は、ユーザーのデバッグログを有効にしてフローを実行し、ログを分析します。また、イベント監査ログやフローログ(Flow Execution Log)を参照することで、どのユーザーがいつフローを実行し、どのような結果になったかを確認できます。

7. よくある質問と解決策

ここでは、サブフロー関連で管理者からよく寄せられる質問とその回答をまとめました。

Q1. サブフローが実行された形跡がない。どこを確認すればいいですか?

最初に、呼び出し元フローの「サブフロー」要素が有効になっているか確認してください。要素の条件分岐によってスキップされている可能性もあります。次に、サブフローへのアクセス権限と公開バージョンを確認します。さらに、フローの実行ログからサブフローが呼び出されているかどうかをログで確認するとよいでしょう。

Q2. サブフロー内でエラーが発生したが、エラーメッセージが不明瞭です。

エラーメッセージをコピーして、Salesforceの「フローエラーコード」で検索してみてください。多くの場合、エラーコード(例:FLOW_ELEMENT_ERROR)が含まれています。また、デバッグログの詳細を確認し、どの要素でエラーが起きたかを特定します。必要に応じて、サブフローの各要素にコメントを追加して、エラー箇所を特定しやすくすることも有効です。

Q3. サブフローを更新したのに、呼び出し元が古いバージョンを参照しているのはなぜ?

呼び出し元の「サブフロー」要素のバージョン設定が「特定のバージョン」になっていて、そのバージョンが古いままになっている可能性があります。呼び出し元を開き、サブフロー要素のプロパティでバージョンを最新の公開バージョンに変更してください。もしくは、サブフローを更新した後に公開処理を行っていないケースも多いので、サブフローのバージョンが正しく公開されているか確認しましょう。

Q4. サブフロー内でSOQLクエリが多くなりすぎてガバナ制限に引っかかる。どうすればいい?

サブフロー内のSOQLクエリを削減するためには、呼び出し元で必要なデータをまとめて取得し、コレクション変数としてサブフローに渡す方法が効果的です。また、サブフロー自体をループ内で呼び出すのではなく、まとめて処理するロジックに変更するか、バッチフローやキューアブルフローの利用を検討してください。

Q5. サブフローのテストがうまくいかない。どうやってデバッグすれば?

サブフロー単体でデバッグするには、サブフローを開いて「デバッグ」ボタンからテスト実行します。このとき、入力変数に適切なテスト値を入れ、出力変数が期待通りに返ってくるか確認します。呼び出し元を含めた全体のテストは、呼び出し元フローをデバッグするか、実際のレコードで動作確認を行います。どうしても問題が解決しない場合は、Salesforceのサポートケースを開くことも検討してください。

まとめ

サブフローで問題が発生した場合、原因は権限、変数、バージョン、ガバナ制限、実行コンテキストのいずれかに集約されることが多いです。管理者はまず、エラーメッセージとデバッグログを確認し、どのカテゴリに当てはまるかを見極めてください。その上で、アクセス権限の見直し、変数マッピングの再確認、バージョン管理の統一、ガバナ制限の最適化を実施することで、多くの問題は解決できます。定期的にフローの動作を監視し、更新管理を徹底することで、トラブルを未然に防ぐことが可能です。本記事の手順を参考に、サブフローを安定して運用してください。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT