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

Newer Version Available

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

Future アノテーション

非同期で実行するメソッドを特定するには future アノテーションを使用します。future を指定すると、Salesforce に使用可能なリソースが存在するときにこのメソッドが実行されます。

たとえば、外部サービスへの非同期の Web サービスコールアウトを実行するときに future アノテーションを使用できます。このアノテーションを使用しない場合、Web サービスコールアウトは Apex スクリプトを実行している同じスレッドから実行され、コールアウトが完了するまで他の処理は実行されません (同期処理)。

future アノテーションのあるメソッドは静的メソッドである必要があり、void 型のみを返します。指定するパラメータはプリミティブデータ型、プリミティブデータ型の配列、プリミティブデータ型のコレクションである必要があります。future アノテーションのあるメソッドは、sObject またはオブジェクトを引数として取ることはできません。

クラスのメソッドを非同期に実行するには、future アノテーションのあるメソッドを定義します。次に例を示します。

1global class MyFutureClass {
2
3  @future 
4  static void myMethod(String a, Integer i) {
5    System.debug('Method called with: ' + a + ' and ' + i);
6    // Perform long-running code
7  }
8}

future メソッドでコールアウトを許可するには、(callout=true) を指定します。デフォルトは (callout=false) です。このデフォルトでは、メソッドはコールアウトを実行できません。

次のスニペットでは、メソッドがコールアウトを実行するように指定する方法を示します。

1@future (callout=true)
2  public static void doCalloutFromFuture() {
3   //Add code to perform callout
4}

future メソッドに関する考慮事項

  • future アノテーションを使用するすべてのメソッドは、メソッドがコールされた順番に実行されるとは限らないため、特別な考慮が必要です。
  • future アノテーションのあるメソッドは、Visualforce コントローラの getMethodName または setMethodName メソッド内でも、コンストラクタ内でも使用できません。
  • future アノテーションのあるメソッドを、同じく future アノテーションのあるメソッドからコールすることはできません。また、アノテーションのある別のメソッドをコールするアノテーションのあるメソッドからトリガをコールすることはできません。