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

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(QueueableContext)

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

署名

public void execute(QueueableContext context)

パラメータ

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

戻り値

型: Void

Queueable の実装例

これは、Queueable インターフェースの実装例です。この例の execute メソッドは、新規取引���を挿入します。
1swfobject.registerObject("clippy.codeblock-3", "9");public 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}
このクラスをジョブとしてキューに追加するには、次のメソッドをコールします。
1swfobject.registerObject("clippy.codeblock-4", "9");ID jobID = System.enqueueJob(new AsyncExecutionExample());

キュー可能クラスを実行のために送信すると、ジョブはキューに追加され、システムリソースが使用可能になると処理されます。ジョブの状況は、プログラムで AsyncApexJob をクエリするか、ユーザインターフェースの [設定] で [ジョブ] | [Apex ジョブ] をクリックすることで監視できます。

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

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

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

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

次の例では、テストメソッドでキュー可能ジョブの実行する方法を示します。キュー可能ジョブは、非同期プロセスです。このプロセスがテストメソッド内で実行されるようにするには、ジョブを Test.startTestTest.stopTest 間のブロック内でキューに送信する必要があります。システムは、テストメソッドで開始されたすべての非同期プロセスを、Test.stopTest ステートメントの後に同期して実行します。次に、テストメソッドは、ジョブで作成された取引先をクエリして、キュー可能ジョブの結果を検証します。
1swfobject.registerObject("clippy.codeblock-6", "9");@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 を返します。

メモ