この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

Queueable インターフェース

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

名前空間

System

使用方法

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.startTestTest.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}

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

メモ