未来方法与。 Salesforce 中的可排队 Apex

已发表: 2023-11-20

在快节奏的 Salesforce 开发世界中,了解高效编码的最佳工具和方法至关重要。 本文深入探讨两个关键概念:Future Method 和 Queueable Apex。 两者都是 Salesforce 中用于处理异步操作的强大技术,但它们具有不同的功能和用例。

我们将探讨 Future Method 和 Queueable Apex 的细微差别,比较它们的功能、优势以及何时在 Salesforce 项目中使用它们。 无论您是经验丰富的开发人员还是 Salesforce 新手,这种比较都将提供宝贵的见解,帮助您做出优化代码的明智决策。

请继续关注,我们将揭开复杂性并揭示 Salesforce 中 Future Method 和 Queueable Apex 的潜力!

目录

为什么选择未来方法?

如果您想稍后在单独的线程中运行进程并希望异步执行代码,我们需要使用 future 方法。

什么时候使用?

它们用于长时间运行的操作,例如调用外部 Web 服务或您想要在其自己的线程中运行的任何操作

为什么要使用可排队 Apex?

就像 future 也用于执行异步代码一样,它使您能够将作业添加到队列中,并与 future 方法相比增强了运行异步代码的方式。

什么时候使用?

对于长时间运行的 Apex 进程,例如大量的数据库操作或外部 Web 服务调出,您可以通过实现 Queueable 接口来异步运行它们

另请阅读:如何使用 OAuth 实施 Salesforce SSO?

Future 和可排队 Apex 之间的区别:

未来法可排队的 Apex
1. Future 永远不会用于处理 SObject 或对象类型。

2.当使用 future 方法时,我们无法监控正在进行的作业。

3. future方法不能在future或batch类内部调用。

4. future方法永远不会排队。

1.可排队作业可以包含成员变量作为 SObject 或自定义 Apex 类型。

2.当使用可排队作业时,它将生成我们可以像计划作业一样监控的 AsyncApexJob。

3. Queueable Apex可以从future和batch类中调用。

4.使用 Queueable Apex 将链接到可排队作业,在 Developer Edition 中只有 5 个作业。

可排队的 Apex

Queueable 类是通过实现预定义接口“Queueable”创建的类。 与 future 方法相比,此接口支持运行异步作业或作业代码的方式。 它将使您能够监视队列中的作业(该队列是由 Queueable 接口创建的,以便作业可以异步运行)。

句法:

 public class <Queueable 类的名称> 实现 Queueable {
//这是Queueable接口包含的唯一方法,并且需要在Queueable类中继承该方法。
公共无效执行(QueueableContext上下文){
//需要执行的代码
}
}

任何需要长时间执行的 Apex 进程(例如大量数据库操作或外部 Web 服务调出)都可以通过实现 Queueable 接口并将作业添加到 Apex 作业队列来异步运行它们。

您的异步 Apex 作业在其自己的线程中在后台运行,并且不会延迟主 Apex 逻辑的执行。 每个排队作业在系统资源可用时运行。 使用接口方法的一个好处是某些调控器限制高于同步 Apex,例如堆大小限制。

未来顶点方法

Future apex 用于在系统资源可用时在单独的线程中运行进程。 为了使用 future apex,我们不需要创建任何类,我们只需要使用“@future”注释来标识异步运行的方法,并表示该注释下面描述的方法是 future 方法。

使用同步处理时,所有方法调用均从执行 Apex 代码的同一线程进行,并且在该过程完成之前不会发生任何其他处理。 您可以使用 future 方法来执行您想要在其自己的线程中异步运行的任何操作。 这样做的好处是不会阻止用户执行其他操作,并为进程提供更高的调控器和执行限制。
句法:

 全局类 <类名> {
//下面是 future 注释,它定义给定的方法是 future 方法。
@未来
公共静态无效 <FutureMethodName>(List<Id> recordIds) {
List<联系人> 帐户 = [从联系人中选择 ID、名字、姓氏,其中 Id IN :recordIds];
// 处理联系人记录来做一些很棒的事情
}
}

另请阅读:如何连接 Pipedrive 和 Salesforce 集成?

未来的方法通常用于

对外部 Web 服务的调用。 如果您从触发器进行调出或在执行 DML 操作后进行调用,则必须使用 future 或可排队方法。 触发器中的标注将在标注的生命周期内保持数据库连接打开。

当时间允许时您希望在自己的线程中运行的操作,例如某种资源密集型计算或记录处理

注意:对象的原因不能作为参数传递给未来的方法,因为对象可以在您调用该方法的时间和它实际执行的时间之间发生变化。 未来的方法将在系统资源可用时运行。 当未来的方法执行时,它可能具有旧的对象值,这可能会导致各种不好的事情发生。

要记住的事情

  • future 方法必须是静态的
  • 返回类型必须为 void
  • 指定的参数必须是原始数据类型、原始数据类型数组或原始数据类型集合
  • 您可以像调用任何其他方法一样调用未来的方法。 但是,一个 future 方法不能调用另一个 future 方法
  • 每次 Apex 调用不超过 50 次方法调用
  • 在 startTest、stopTest 块中调用的异步调用(例如@future 或executeBatch)不会计入排队作业数量的限制
聘请销售人员开发人员

Future 方法和可排队类的示例

Future 方法和可排队类

这里我得到了 4 种货币的加元价值。 适用于英镑、美元、澳元、加元。 并将值保存为自定义元数据货币。 对于这里的 HTTPREQUEST,我使用了 Future 方法。 因为它在运行批处理时同时更新多个记录,所以我使用了 Queueable Apex,它一次更新多个记录。

自定义元数据的自定义更新

自定义元数据的自定义更新

可排队类

可排队类

调用 Future 方法并发送列表以在 Queueable 类中更新

调用Future方法

Emizentech 是一家真正且经验丰富的销售人员咨询公司,我们熟练的销售人员开发人员可以为您的下一个销售人员项目提供专业帮助。

另请阅读:如何创建 Salesforce Lightning 地图组件?