Salesforceのカスタムメタデータを活用すると、メールアクションの本文に動的な値を埋め込むことができます。しかし、フローの種類によって、その動作に違いが生じる場合があります。レコードトリガーフローとスケジュールトリガーフローでは、変数の解釈や利用可能なコンテキストが異なるため、意図した結果が得られないことがあるのです。
カスタムメタデータ値のフローでの呼び出し
レコードトリガーフローでの動的な値の埋め込み
レコードトリガーフローは、特定のレコードが作成や更新された際に起動します。このフローでは、トリガーとなったレコードのコンテキストを利用できるため、{!Account.Name} のような変数をメールアクションの本文内で使用できます。フローがレコードのスコープ内で実行され、関連するレコードのデータを直接参照可能だからです。
スケジュールトリガーフローでの動的な値の埋め込み
一方、スケジュールトリガーフローは定期的なスケジュールに基づいて実行されます。そのため、多くの場合、特定のレコードに紐づいたコンテキストが存在しません。これにより、{!Account.Name} のような具体的なレコードに紐づいた変数を動的に解釈して埋め込むことができなくなります。
スケジュールトリガーフローでは、事前に定義された変数やカスタムメタデータの値を直接参照することはできますが、動的なコンテキストをもとにした変数の解釈はサポートされていないのです。
スケジュールトリガーフローでのグローバル変数の使用における注意点
スケジュールトリガーフローでグローバル変数を使用する際は、いくつかの注意点があります。
- $Recordや$Record__Priorなどの、レコード固有の情報を持つグローバル変数は使用できません。
- バッチ処理全体を通して$Recordの値が一貫しているとは限らないため、注意が必要です。
- グローバル変数の値を変更しても、その変更がデータベース内のレコードに直接反映されるわけではありません。変更を反映するには、Update Recordsエレメントを使用し、組織のプロセス自動化設定で [フロー要求のアクセスできない項目を絞り込む] を有効にすることが推奨されます。
- $Labelグローバル変数は、フローリソースの選択リストへの読み込みに時間がかかる場合があります。
解決策
スケジュールトリガーフローで動的な値をメールアクションに埋め込みたい場合は、次のような方法が考えられます。
- フロー内でレコードの検索を行い、その結果を変数に格納してからメール本文に使用する
- スケジュールトリガーフローの代わりに、レコードトリガーフローを使用する
- プロセスビルダーやApexトリガーを用いて、より柔軟な条件下での動的な値の埋め込みを実現する
ただし、レコードの検索を行う方法では、どのレコードのデータを使用するかをフロー内で明示的に指定する必要があります。状況に応じて最適な方法を選択することが重要です。
まとめ
カスタムメタデータの値をフローで呼び出す際は、フローの種類によって動作が異なることを理解しておくことが大切です。特にスケジュールトリガーフローでは、レコードのコンテキストに基づく動的な値を直接扱うことは制限されるため、代替手段を検討する必要があります。
さらに、グローバル変数の特性や制約を考慮しながら、フローを設計・実装することが求められます。レコードトリガーフローやプロセスビルダー、Apexトリガーなどを状況に応じて使い分け、これらの知識を深めて実践に活かしていくことが、Salesforceを用いた効果的な業務自動化の鍵となるでしょう。