Programming/Apex

[Apex] Queueable 비동기 실행

Plone 2022. 5. 22. 21:19

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_System_Queueable.htm

 

Queueable インターフェース | Apex 開発者ガイド | Salesforce Developers

これは、Queueable インターフェースの実装例です。この例の execute メソッドは、新規取引先を挿入します。 public class AsyncExecutionExample implements Queueable { public void execute(QueueableContext context) { Account

developer.salesforce.com

Queueable インターフェース

監視可能な Apex ジョブの非同期実行を有効にします。

名前空間

System

使用方法

Apex を非同期ジョブとして実行するには、Queueable インターフェースを実装し、execute メソッドの実装に処理ロジックを追加します。

Queueable インターフェースを実装するには、最初に implements キーワードでクラスを次のように宣言する必要があります。
 
 
 
public class MyQueueableClass implements Queueable {
次に、クラスで次のメソッドの実装を提供する必要があります。
 
 
 
public void execute(QueueableContext context) {
    // Your code here
}

クラスとメソッドの実装は、public または global として宣言する必要があります。

クラスを非同期実行するために送信するには、Queueable インターフェースのクラス実装のインスタンスを次のように渡して System.enqueueJob をコールします。

 
 
 
ID jobID = System.enqueueJob(new MyQueueableClass());

Queueable のメソッド

Queueable のメソッドは次のとおりです。

execute(context)

キュー可能ジョブを実行します。

署名

public void execute(QueueableContext context)

パラメータ

context型: QueueableContextジョブ ID が含まれます。

戻り値

型: Void

Queueable の実装例

これは、Queueable インターフェースの実装例です。この例の execute メソッドは、新規取引先を挿入します。
 
 
 
public class AsyncExecutionExample implements Queueable {
    public void execute(QueueableContext context) {
        Account a = new Account(Name='Acme',Phone='(415) 555-1212');
        insert a;        
    }
}
このクラスをジョブとしてキューに追加するには、次のメソッドをコールします。
 
 
 
ID jobID = System.enqueueJob(new AsyncExecutionExample());

キュー可能クラスを実行のために送信すると、ジョブはキューに追加され、システムリソースが使用可能になると処理されます。ジョブの状況を監視するには、プログラムで AsyncApexJob を照会するか、ユーザインターフェースの [設定] から、[クイック検索] ボックスに「Apex ジョブ」と入力して [Apex ジョブ] を選択します。

送信したジョブに関する情報を照会するには、System.enqueueJob メソッドが返したジョブ ID で絞り込んで AsyncApexJob に対する SOQL クエリを実行します。次の例では、前の例で取得された jobID 変数を使用します。

 
 
 
AsyncApexJob jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob WHERE Id=:jobID];

future ジョブと同様、キュー可能ジョブはバッチを処理しません。そのため、処理されたバッチ数と合計バッチ数は常に 0 です。

キュー可能ジョブのテスト

次の例では、テストメソッドでキュー可能ジョブの実行する方法を示します。キュー可能ジョブは、非同期プロセスです。このプロセスがテストメソッド内で実行されるようにするには、ジョブを Test.startTest  Test.stopTest 間のブロック内でキューに送信する必要があります。システムは、テストメソッドで開始されたすべての非同期プロセスを、Test.stopTest ステートメントの後に同期して実行します。次に、テストメソッドは、ジョブで作成された取引先を照会して、キュー可能ジョブの結果を検証します。
 
 
 
@isTest
public class AsyncExecutionExampleTest {
    static testmethod void test1() {
        // startTest/stopTest block to force async processes 
        //   to run in the test.
        Test.startTest();        
        System.enqueueJob(new AsyncExecutionExample());
        Test.stopTest();
        
        // Validate that the job has run
        // by verifying that the record was created.
        // This query returns only the account created in test context by the 
        // Queueable class method.
        Account acct = [SELECT Name,Phone FROM Account WHERE Name='Acme' LIMIT 1];
        System.assertNotEquals(null, acct);
        System.assertEquals('(415) 555-1212', acct.Phone);
    }
}
 

メモ

キュー可能 Apex ジョブの ID はテストコンテキスト内では返されません。実行テストで System.enqueueJob  null を返します。