Why Can't You Build this Logic Declaratively?

DEX450 - Module 8: Trigger Essentials

📄 第 220 页 🎬 视频课程

课程章节介绍

让我们来聊聊为什么Jason Beck不能使用声明性的方式来实现这个逻辑。首先,我们需要理解Salesforce中的声明性工具,比如验证规则、工作流程、Process Builder等,它们都是非常强大的工具,可以帮助我们自动化很多业务流程,但有时候它们也有自己的限制。 在这个案例中,Jason想要阻止在特定假日(Holiday)期间创建培训交付记录(TLR)。听起来很简单,对吧?但是,问题出在Holiday对象上。Holiday对象是一个特殊的对象,它不是标准的Salesforce对象,也不是全局对象,这意味着我们不能直接通过跨对象公式字段来访问它。跨对象公式字段通常用于访问相关对象的字段,但Holiday对象并不在Course_Delivery_c对象的关联范围内。 接下来,我们来看看工作流程。工作流程可以用来自动化一些任务,比如发送电子邮件或者更新字段,但它不能直接访问Holiday对象,也不能阻止对象的创建。所以,工作流程在这里也帮不上忙。 验证规则呢?验证规则是用来确保数据输入的准确性的,它们可以在数据保存之前检查某些条件。但是,验证规则只能处理当前对象的字段,不能处理不相关对象的字段。所以,验证规则也无法帮助我们检查Holiday对象。 最后,我们来看看Process Builder。Process Builder是一个非常强大的工具,可以用来创建复杂的业务流程。理论上,Process Builder可以访问Holiday对象,但是这样做会让流程变得非常复杂,尤其是当你需要处理多个条件和多个对象时。而且,使用Process Builder来处理这种情况,可能会涉及到使用流的收件箱,这会让整个流程变得更加复杂。 所以,总结一下,虽然Salesforce提供了很多声明性的工具来帮助我们自动化业务流程,但在某些情况下,比如需要访问特殊对象或者处理复杂的跨对象逻辑时,这些工具可能就不够用了。这时候,我们可能需要考虑使用Apex代码来实现这些逻辑,因为Apex提供了更大的灵活性和控制力。