Formula Evaluation in Apex

DEX455 - Flow 与 Formula Evaluation:Apex 集成 Flow Builder 完全指南

📄 第 300 页 🎬 视频课程

课程章节介绍

同学们,咱们今天来聊一个非常实用的小技巧:怎么用 Apex 里的公式引擎,帮咱们省去那些不必要的数据库操作。 你想想,很多时候我们想在代码里算出一个公式字段的值,或者根据某个对象动态地算一个表达式,按老办法,是不是得先把记录保存到数据库,让系统触发公式字段的重新计算,再查出来?这一来一回的 DML 语句,不光浪费资源,还拖慢性能。现在不用了,Apex 直接提供了一套公式计算工具,可以让你在内存里就把这事儿办了。 具体怎么做呢?核心是借助一个叫 `FormulaBuilder` 的类。你只要调用它的 `withType()` 方法,告诉它你想基于哪种对象来算——这个对象可以是标准的 sObject,比如账户、联系人,也可以是咱们自定义的 Apex 类对象。相当于你把一个上下文对象传进去,说“嘿,帮我基于这个家伙身上的字段,算一下这个公式”。 那支持哪些类型的上下文呢?除了我们熟悉的 sObject 字段,像地址、位置、网址还有 UUID 这些系统类型也都能当上下文丢进去。更有意思的是,标准查找、自定义查找,甚至多态关系字段,它都能处理。比如你有一个“负责人”字段,不管它指向的是用户还是联系人,公式引擎都能顺着这张关系拿出来用。 这里有几个贴心的限制要记住:你写的公式文本本身不能超过 3900 个字符,这跟咱们在验证规则里写的公式基本一个样。但是别担心,它不会受到 Apex 代码整体编译大小的限制,也就是说,即使你有很多公式表达式,也不会让你的类编译不过去。用起来相当自由。 还有一个好搭档叫 `Formula.recalculateFormulas()`。当你手上有一批记录,想把上面那些不需要存盘就能算的公式值刷新一遍,就可以直接调用这个方法。它会代替你完成一次“数据库往返”——但这并不是真的 DML,而是用一种高效的方式重新计算公式字段,让你在没做任何修改保存的情况下,拿到最新的计算结果。 简单总结一下,以后你在代码里遇到需要动态计算公式、或者想批量刷新公式值却不想碰数据库的时候,就记得用 `FormulaBuilder` 搭上下文,`Formula.recalculateFormulas` 拿结果。公式写法和验证规则完全一样,限制在 3900 字符以内,随便用。这招用好了,你的触发器、批处理操作会轻快很多。 咱们今天就先讲到这,你可以回去试试,特别方便。

关键词

Apex Salesforce Developer Guide