Platform Event触发器与自定义对象触发器的区别
在 Salesforce 中,Platform Event 触发器和自定义对象触发器均使用 Apex 触发器实现自动化,但由于事件驱动架构与基于记录的数据模型存在本质差异,二者在用途、行为和技术限制方面有显著区别。以下是详细对比:
1. 核心用途
-
自定义对象触发器
用于在自定义对象的记录被创建、更新、删除或恢复时自动执行操作。它们用于执行业务规则、验证数据或同步相关记录的变更(例如,当父账户被修改时更新关联的联系人)。
-
Platform Event 触发器
用于响应在 Salesforce 事件总线上发布的事件。它们充当事件消息的 “监听器”,支持组件之间的异步通信(例如,订单创建后与 Slack 或 ERP 等外部系统集成)。
2. 触发时机与执行上下文
-
自定义对象触发器
-
可同步或异步执行,取决于触发事件(例如,
before insert同步运行,用于在保存前验证数据)。 -
与记录操作的数据库事务绑定。如果事务失败(例如,违反验证规则),触发器的操作会被回滚。
-
示例:
Sales_Order__c自定义对象上的触发器在用户保存订单时立即运行,确保在插入前计算订单总额。
-
-
Platform Event 触发器
-
始终异步执行,即使事件是在同步上下文中发布的。它们在独立事务中运行,与事件发布过程解耦。
-
与发布事务无关。如果原始事务(例如,发布事件的过程)失败,事件及其触发器执行不会回滚(事件一旦发布便不可变)。
-
示例:
Order_Created__e(Platform Event)上的触发器在事件发布后运行,即使触发事件的订单记录后来被删除,该触发器仍会执行。
-
3. 数据访问与可修改性
-
自定义对象触发器
-
可通过触发器上下文(
Trigger.New、Trigger.Old)直接访问记录的字段值。 -
能够修改正在处理的记录(例如,
before update触发器可在字段保存到数据库前修改其值)。 -
示例:
Customer__c上的before insert触发器可根据公式自动填充Customer_Code__c字段。
-
-
Platform Event 触发器
-
通过事件对象访问事件字段(例如,
Order_Created__e触发器中的event.Order_Id__c)。 -
无法修改事件本身——Platform Event 一旦发布便不可变。触发器只能读取事件数据并基于此执行操作(例如,调用外部 API)。
-
示例:Platform Event 触发器可从事件中解析
Order_Id__c,但无法修改事件的Amount__c字段。
-
4. 事务限制与批量处理行为
-
自定义对象触发器
-
受严格的事务限制约束(例如,每个事务最多 100 次 SOQL 查询、150 次 DML 操作),因为它们与记录操作在同一上下文中运行。
-
使用 Data Loader 或 API 批量操作时,按批量处理记录(每批最多 200 条)。触发器必须处理批量数据以避免超出限制。
-
-
Platform Event 触发器
-
拥有独立的事务限制,与事件发布事务无关。这可防止发布过程因触发器失败而受影响。
-
按批次处理事件(每批最多 2000 个事件,可通过事件设置配置)。这种高批量处理能力支持高容量事件流(例如,物联网设备数据)。
-
5. 适用场景
-
自定义对象触发器
最适合以记录为中心的自动化:
-
执行数据验证(例如,确保
Discount__c不超过 30%)。 -
更新相关记录(例如,添加新订单时更新账户的
Total_Orders__c)。 -
在相关对象间同步数据(例如,将
Account.BillingCity复制到其所有联系人)。
-
-
Platform Event 触发器
最适合事件驱动的集成和解耦工作流:
-
向外部系统发送数据(例如,订单创建时通知 Slack)。
-
触发异步流程(例如,订单确认后在后台生成 PDF 发票)。
-
协调不相关系统间的操作(例如,Salesforce 订单提交后触发 ERP 中的库存检查)。
-
6. 错误处理
-
自定义对象触发器
错误(例如,未处理的异常)会终止整个事务,回滚记录操作。用户会立即看到错误消息(例如,“订单无法保存”)。
-
Platform Event 触发器
错误不影响原始事件发布事务。失败的触发器执行会自动重试(可通过事件设置配置)或记录下来供人工审核。
- 示例:如果 Platform Event 触发器调用 ERP API 失败,发布事件的订单记录仍会保存,触发器稍后会重试。
汇总表
| 特性 | 自定义对象触发器 | Platform Event 触发器 |
|---|---|---|
| 用途 | 执用以记录为中心的业务规则 | 异步响应事件消息 |
| 执行方式 | 同步或异步 | 始终异步 |
| 数据可修改性 | 可修改记录 | 无法修改事件(不可变) |
| 事务关联 | 与记录的事务绑定 | 与发布事务解耦 |
| 批处理大小 | 最多 200 条记录 | 最多 2000 个事件 |
| 错误影响 | 终止记录事务 | 自动重试;不影响发布过程 |
简言之,自定义对象触发器用于对记录数据执行规则,而 Platform Event 触发器用于实现跨系统通信—— 选择哪种触发器取决于目标是修改记录还是响应事件。
716

被折叠的 条评论
为什么被折叠?



