SalesforceのTrigger.isExecutingは、トリガーが実行中であるときにtrue
となるコンテキスト変数です。詳しくはこちらを参照してください。
この変数を使用すると、コードがトリガー内で実行されていることを確認できます。これは、次のような複数のエントリポイントからロジックが呼び出される場合に特に便利です:
- トリガー
- Lightning Web Components
- Visualforceページおよびコンポーネント
- APEX RESTおよびSOAP Webサービス
- バッチApex
- スケジュールされたApex
- Queueable Apex
- Futureメソッド
- Invocableメソッド
- Apex匿名実行
- カスタムREST/SOAPサービス
Trigger.isExecutingの使用方法
Trigger.isExecutingが役立ついくつかのシナリオを以下に示します:
-
トリガー実行コンテキストの確認
コードがトリガー内で実行されているかどうかを確認し、特定のロジックを条件付きで実行する場合に使用します。if (Trigger.isExecuting) { // トリガー実行に特有のコード }
-
無限ループの回避
トリガーがメソッドを呼び出してレコードを変更すると、再度トリガーが発火する可能性があります。Trigger.isExecutingを使用して、コードがトリガーによって呼び出されているかどうかを確認し、無限ループを防止します。public class AccountHelper { public static void updateAccount(Account acc) { if (!Trigger.isExecuting) { // 無限ループを防いでコードを更新する update acc; } } }
注意ポイント
-
トリガー内では常に
true
である
トリガー内では、Trigger.isExecutingは常にtrue
です。そのため、ほとんどの場合、if (Trigger.isExecuting == true)
のようなコードは不要です。 -
ループ条件としては使用しない
Trigger.isExecutingをwhileループで使用するのは間違いです。これは、実行中に変わることはなく、トリガー内では常にtrue
であり続けます。❌ 間違った使用例:
while (Trigger.isExecuting) { // 無限ループ - これでは停止しない }
まとめ
今回はTrigger.isExecutingについて解説しました。ご意見や間違いがありましたら、コメントでご指摘いただけると幸いです。
参照