将来のメソッド vs. Salesforce のキュー可能な Apex

公開: 2023-11-20

ペースの速い Salesforce 開発の世界では、効率的かつ効果的なコーディングに最適なツールと方法を理解することが重要です。 この記事では、Future Method と Queueable Apex という 2 つの重要な概念について詳しく説明します。 どちらも Salesforce で非同期操作を処理するために使用される強力な手法ですが、それぞれに異なる機能と使用例があります。

Future Method と Queueable Apex の微妙な違いを調べ、機能、利点、Salesforce プロジェクトでそれぞれをいつ使用するかを比較します。 経験豊富な開発者であろうと、Salesforce を初めて使用する開発者であろうと、この比較は貴重な洞察を提供し、情報に基づいてコードを最適化するための意思決定を行うのに役立ちます。

複雑さを解明し、Salesforce における Future Method と Queueable Apex の可能性を明らかにするのにご期待ください。

目次

なぜフューチャーメソッドなのか?

後で別のスレッドでプロセスを実行し、コードを非同期で実行したい場合は、future メソッドを使用する必要があります。

いつ使用されますか?

これらは、外部 Web サービスへのコールアウトや独自のスレッドで実行したい操作など、長時間実行される操作に使用されます。

Queueable Apex を使用する理由

future と同様に、非同期コードの実行にも使用され、キューにジョブを追加し、future メソッドと比較して非同期コードの実行方法を強化できます。

いつ使用されますか?

大規模なデータベース操作や外部 Web サービスのコールアウトなど、長時間実行される Apex プロセスの場合、Queueable インターフェイスを実装することで非同期で実行できます。

こちらもお読みください: OAuth を使用して Salesforce SSO を実装する方法?

Future と Queueable Apex の違い:

将来のメソッドキュー可能な頂点
1. Future は、SObject またはオブジェクト タイプの操作に使用されることはありません。

2. future メソッドを使用する場合、進行中のジョブを監視することはできません。

3. future メソッドは、future クラスまたはバッチ クラス内で呼び出すことはできません。

4. future メソッドはキューに入れられることはありません。

1.キュー可能ジョブには、SObject またはカスタム Apex タイプとしてメンバー変数を含めることができます。

2.キュー可能ジョブを使用すると、スケジュールされたジョブと同様に監視できる AsyncApexJob が作成されます。

3. Queueable Apex は、Future およびバッチクラスから呼び出すことができます。

4.キュー可能 Apex を使用すると、キュー可能ジョブまでチェーンされますが、Developer Edition ではジョブは 5 つだけです。

キュー可能な頂点

Queueableクラスは、あらかじめ定義されたインターフェース「Queueable」を実装して作成されるクラスです。 このインターフェイスにより、将来のメソッドと比較して非同期ジョブまたはジョブのコードを実行する方法が可能になります。 これにより、キュー内のジョブを監視できるようになります (このキューは、ジョブが非同期で実行できるように Queueable インターフェイスによって作成されます)。

構文:

 public class <キュー可能クラスの名前> は Queueable {を実装します
//これは Queueable インターフェイスに含まれる唯一のメソッドであり、Queueable クラスでこのメソッドを継承する必要があります。
public voidexecute (QueueableContext context) {
//実行する必要があるコード
}
}

大規模なデータベース操作や外部 Web サービスのコールアウトなど、実行に長時間かかる Apex プロセスは、Queueable インターフェイスを実装し、ジョブを Apex ジョブキューに追加することで非同期で実行できます。

非同期 Apex ジョブは、独自のスレッドのバックグラウンドで実行され、メインの Apex ロジックの実行を遅らせることはありません。 キューに入れられた各ジョブは、システム リソースが使用可能になると実行されます。 インターフェイスメソッドを使用する利点は、ヒープサイズ制限など、一部のガバナ制限が同期 Apex よりも高いことです。

Future Apex メソッド

Future apex は、後でシステム リソースが利用可能になったときに、別のスレッドでプロセスを実行するために使用されます。 future apex を使用する場合、クラスを作成する必要はありません。必要なのは、 「@future」アノテーションを使用して、非同期で実行されるメソッドを識別し、このアノテーションの下に記述されているメソッドが future メソッドであることを示すことだけです。

同期処理を使用する場合、すべてのメソッド呼び出しは Apex コードを実行している同じスレッドから行われ、プロセスが完了するまで追加の処理は発生できません。 独自のスレッドで非同期に実行したい操作には、future メソッドを使用できます。 これにより、ユーザーによる他の操作の実行がブロックされず、プロセスのガバナおよび実行制限がより高く設定されるという利点が得られます。
構文:

 グローバル クラス <クラス名> {
// 以下は、指定されたメソッドが future メソッドであることを定義する future アノテーションです。
@未来
public static void <FutureMethodName>(List<Id> RecordIds) {
List<連絡先> アカウント = [ID が :recordIds にある連絡先から ID、名、姓を選択];
// 素晴らしいことを行うために連絡先レコードを処理します
}
}

こちらもお読みください: Pipedrive と Salesforce 統合を接続する方法?

Future メソッドは通常、次の目的で使用されます。

外部 Web サービスへのコールアウト。 トリガーからコールアウトを行う場合、または DML 操作の実行後にコールアウトを行う場合は、future メソッドまたは queueable メソッドを使用する必要があります。 トリガー内のコールアウトは、コールアウトの有効期間中、データベース接続を開いたままにします。

ある種のリソースを大量に消費する計算やレコードの処理など、時間の許す限り独自のスレッドで実行したい操作

注:オブジェクトはメソッドの呼び出し時と実際の実行時との間に変更される可能性があるため、オブジェクトの理由を引数として future メソッドに渡すことはできません。 システム リソースが利用可能になると、将来のメソッドが実行されます。 future メソッドが実行されると、古いオブジェクト値が含まれる可能性があり、これがあらゆる種類の悪いことを引き起こす可能性があります。

覚えておくべきこと

  • future メソッドは静的である必要があります
  • 戻り値の型は void である必要があります
  • 指定するパラメーターは、プリミティブ データ型、プリミティブ データ型の配列、またはプリミティブ データ型のコレクションである必要があります。
  • 他のメソッドを呼び出すのと同じ方法で、future メソッドを呼び出すことができます。 ただし、future メソッドは別の future メソッドを呼び出すことはできません。
  • Apex 呼び出しあたりのメソッド呼び出しは 50 回以下です
  • startTest ブロックや stopTest ブロックで呼び出される @future やexecuteBatch などの非同期呼び出しは、キューに入れられたジョブの数の制限にはカウントされません。
Salesforce開発者を雇う

Future メソッドと Queueable クラスの例

Future メソッドとキュー可能クラス

ここではカナダドルで 4 つの通貨の価値を取得しています。 ポンド、米ドル、豪ドル、カナダドルの場合。 そして、値をカスタム メタデータ通貨に保存します。 ここの HTTPREQUEST には Future メソッドを使用しました。 また、バッチの実行中に複数のレコードを同時に更新するため、一度に複数のレコードを更新する Queueable Apex を使用しました。

カスタムメタデータのカスタム更新

カスタムメタデータのカスタム更新

キュー可能クラス

キュー可能クラス

Future メソッドを呼び出し、Queueable クラスで更新するリストを送信する

Future メソッドの呼び出し

Emizentech は本格的で経験豊富な Salesforce コンサルティング会社であり、当社の熟練した Salesforce 開発者が次の Salesforce プロジェクトに対して専門的な支援を提供します。

こちらもお読みください: Salesforce Lightning Map コンポーネントを作成する方法?