[Apex] Queueable 비동기 실행
Queueable インターフェース | Apex 開発者ガイド | Salesforce Developers
これは、Queueable インターフェースの実装例です。この例の execute メソッドは、新規取引先を挿入します。 public class AsyncExecutionExample implements Queueable { public void execute(QueueableContext context) { Account
developer.salesforce.com
Queueable インターフェース
名前空間
使用方法
Apex を非同期ジョブとして実行するには、Queueable インターフェースを実装し、execute メソッドの実装に処理ロジックを追加します。
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)
キュー可能ジョブを実行します。
execute(context)
署名
public void execute(QueueableContext context)
戻り値
型: Void
Queueable の実装例
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 です。
キュー可能ジョブのテスト
@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 を返します。