Queueable インターフェース
名前空間
使用方法
Apex を非同期ジョブとして実行するには、Queueable インターフェースを実装し、execute メソッドの実装に処理ロジックを追加します。
Queueable インターフェースを実装するには、最初に implements キーワードでクラスを次のように宣言する必要があります。
1public class MyQueueableClass implements Queueable {
次に、クラスで次のメソッドの実装を提供する必要があります。
1public void execute(QueueableContext context) {
2 // Your code here
3}クラスとメソッドの実装は、public または global として宣言する必要があります。
クラスを非同期実行するために送信するには、Queueable インターフェースのクラス実装のインスタンスを次のように渡して System.enqueueJob をコールします。
1ID jobID = System.enqueueJob(new MyQueueableClass());Queueable のメソッド
Queueable のメソッドは次のとおりです。
execute(context)
署名
public void execute(QueueableContext context)
パラメーター
- context
- 型: QueueableContext
- ジョブ ID が含まれます。
戻り値
型: Void
Queueable の実装例
これは、Queueable インターフェースの実装例です。この例の execute メソッドは、新規取引先を挿入します。
1public class AsyncExecutionExample implements Queueable {
2 public void execute(QueueableContext context) {
3 Account a = new Account(Name='Acme',Phone='(415) 555-1212');
4 insert a;
5 }
6}このクラスをジョブとしてキューに追加するには、次のメソッドをコールします。
1ID jobID = System.enqueueJob(new AsyncExecutionExample());キュー可能クラスを実行のために送信すると、ジョブはキューに追加され、システムリソースが使用可能になると処理されます。ジョブの状況を監視するには、プログラムで AsyncApexJob を照会するか、ユーザーインターフェースの [設定] から、[クイック検索] ボックスに「Apex ジョブ」と入力して [Apex ジョブ] を選択します。
送信したジョブに関する情報を照会するには、System.enqueueJob メソッドが返したジョブ ID で絞り込んで AsyncApexJob に対する SOQL クエリを実行します。次の例では、前の例で取得された jobID 変数を使用します。
1AsyncApexJob jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob WHERE Id=:jobID];future ジョブと同様、キュー可能ジョブはバッチを処理しません。そのため、処理されたバッチ数と合計バッチ数は常に 0 です。
キュー可能ジョブのテスト
次の例では、テストメソッドでキュー可能ジョブの実行する方法を示します。キュー可能ジョブは、非同期プロセスです。このプロセスがテストメソッド内で実行されるようにするには、ジョブを Test.startTest と Test.stopTest 間のブロック内でキューに送信する必要があります。システムは、テストメソッドで開始されたすべての非同期プロセスを、Test.stopTest ステートメントの後に同期して実行します。次に、テストメソッドは、ジョブで作成された取引先を照会して、キュー可能ジョブの結果を検証します。
1@isTest
2public class AsyncExecutionExampleTest {
3 static testmethod void test1() {
4 // startTest/stopTest block to force async processes
5 // to run in the test.
6 Test.startTest();
7 System.enqueueJob(new AsyncExecutionExample());
8 Test.stopTest();
9
10 // Validate that the job has run
11 // by verifying that the record was created.
12 // This query returns only the account created in test context by the
13 // Queueable class method.
14 Account acct = [SELECT Name,Phone FROM Account WHERE Name='Acme' LIMIT 1];
15 System.assertNotEquals(null, acct);
16 System.assertEquals('(415) 555-1212', acct.Phone);
17 }
18}