0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Salesforce ApexコードがApexトリガーから呼び出されているかどうかを知りたい:Trigger.isExecuting

Posted at

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が役立ついくつかのシナリオを以下に示します:

  1. トリガー実行コンテキストの確認
    コードがトリガー内で実行されているかどうかを確認し、特定のロジックを条件付きで実行する場合に使用します。

    if (Trigger.isExecuting) {
        // トリガー実行に特有のコード
    }
    
  2. 無限ループの回避
    トリガーがメソッドを呼び出してレコードを変更すると、再度トリガーが発火する可能性があります。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について解説しました。ご意見や間違いがありましたら、コメントでご指摘いただけると幸いです。

参照

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?