验证规则(Validation Rules)

验证规则在数据录入时把关,用公式拦截不符合业务规则的记录。本文讲清验证规则的原理与用例,手把手创建账号编号规则并看它触发,再掌握最佳实践(清晰错误消息、唯一错误代码、一次一个场景、用 ISCHANGED/ISNEW/PRIORVALUE 检测变更),最后用自定义权限和权限集实现绕过开关,让正确的用户能跳过规则。...

📅 2026/10/14 ✍️ ponybai 🏷️ salesforce, headless

01 开始了解验证规则(Get Started with Validation Rules)

slide_2
slide_3

本单元学习验证规则是什么、为什么它们保护你的数据,回顾常见用例,理解规则公式的机制,然后构建你的第一条验证规则并看它触发。

学完本单元,你将能够:

  • 描述验证规则及其用例;
  • 创建一条简单的验证规则。

什么是验证规则?(一):强制数据质量

slide_4

你依赖数据来经营业务,而 Salesforce 存储着大量数据。数据出错时,就更难做出好的决策、更难为客户创造价值——这正是验证规则的用武之地。

验证规则是 Salesforce 平台上强大的工具,用来强制数据质量、确保录入 Salesforce 的数据符合你的要求。它像一道防护栏,阻止用户保存不符合预定义业务规则的记录。

什么是验证规则?(二):如何阻止错误保存

slide_5

当用户尝试保存记录时,Salesforce 评估验证规则里定义的判据。如果判据被满足,记录就被阻止保存,并向用户显示错误消息,提示他们在继续前修正数据。简言之,验证规则是一道门,只放行格式正确的记录。

验证规则的用例(一):保持数据干净

slide_6

验证规则天生灵活,用法数不胜数。首先是数据格式:你的数据有长度、范围或格式要求吗?验证规则帮你保持数据干净——例如强制账号编号为特定长度,或让编码匹配某种模式。

验证规则的用例(二):流程与合规

slide_7

另外两大用例:业务流程强制——记录常经历生命周期(如 Case 从 New 开始,分配给客服,再被解决),在每个阶段某些字段可能是必填的、或只能使用特定值。合规与监管——医疗、金融等受监管行业用验证规则按特定判据校验数据,帮助组织满足法律和监管义务。

验证规则的机制(一):公式为 TRUE 即阻止

slide_8

公式评估验证规则的判据。关键思想:如果公式结果为 TRUE,错误消息就提示用户修正数据。所以规则描述的是你想避免的情况——它在坏数据上触发,而不是描述"好数据长什么样"。一个小技巧:你不需要写 IF(condition, TRUE, FALSE),直接用条件本身即可,因为它已经返回 TRUE 或 FALSE。

验证规则的机制(二):了解执行顺序

slide_9

验证规则在自动化(trigger 和 flow)运行之后执行。记住这一点很重要,因为你可能构建出把记录更新成与验证规则冲突的值的自动化——这会阻止用户保存,即使他们并没有做违反规则的直接修改。设计自动化和验证规则时,要把执行顺序放在心上。

创建验证规则(一):启动并定义规则

slide_10

动手创建一条验证规则:目标是要求 Account Number 在非空时恰好 8 个字符。在 Setup 打开 Object Manager,点击 Account,在左侧边栏点 Validation Rules,再点 New。填入属性:Rule Name 为 ACT001_Account_Number_8_Characters,Description 为 "Account numbers must be exactly eight characters long when populated.",Error Condition Formula 在账号编号非空且非 8 字符时触发,Error Message 为 Account number must be 8 characters long [ACT001],Error Location 选 Account Number 字段。用 Check Syntax 检查公式,然后 Save。

上图是填好各值的验证规则编辑界面。

创建验证规则(二):看它触发

slide_11

现在看规则生效:打开 Sales 应用,点 Accounts 标签页,点 New,Account Name 填 Northern Trail Outfitters、Account Number 填 1,点 Save。

验证规则错误消息显示在 Account Number 字段下方。试试不同值:不填账号编号 → 可保存;恰好 8 字符 → 可保存;超过 8 字符 → 被阻止。接下来看构建验证规则的最佳实践。

02 实施最佳实践(Implement Best Practices)

slide_12

本单元学习设计对用户友好的验证规则——清晰的错误消息、有用的错误代码、一次一个场景——然后优雅处理现有数据,并构建一条只在数据真正变更时才触发的规则。

学完本单元,你将能够:

  • 设计用户友好的验证规则;
  • 创建考虑现有数据的验证规则。

让验证更用户友好(一):清晰的错误消息

slide_13

把错误消息当作帮助用户导航规则的路标。看一个有效的消息示例(Amount 字段):"When the stage is Qualification or higher, you must enter an amount. [OPP003]"。它为什么有效?错误消息应该简洁,并明确告诉用户什么触发了规则以及该做什么来修复。从这个例子我们知道是哪个阶段要求金额——如果还没准备好填金额,可以调整阶段。

让验证更用户友好(二):错误代码与位置

slide_14

两条最佳实践。第一,在消息里包含唯一的错误代码——用户求助时,它能帮你快速定位规则。好的做法是用命名约定标识对象,例如商机(Opportunity)的验证规则都以 OPP 开头加顺序号。这在验证规则因 rollup 或自动化更新相关记录而触发时尤其有用,省得你在错误的对象上浪费时间。第二,谨慎选择错误位置:尽量把错误显示在字段上,这样 Salesforce 会在消息里提供一个链接,让用户直接跳到该字段去修正。

让验证更用户友好(三):一次一个场景

slide_15

假设你要求商机到 Qualification 阶段时同时填 Amount 和 Next Steps。用一条规则检查两个字段会很诱人——但别这样做。因为错误消息无法告诉用户是一个还是两个字段需要填值,也无法把错误同时显示在两个字段上。更好的做法是拆成多条独立规则,公式更简单,给用户的反馈也更好。

优雅处理记录变更(一):现有数据问题

slide_16

业务需求会变,你可能要新增验证规则来跟上。想想上一单元的账号编号规则:如果现有数据里有不符合"8 字符"要求的账号编号呢?用户编辑这些记录时,即使没动账号编号字段,也会碰到"需要 8 字符账号编号"的错误——如果用户没有权限编辑该字段就更糟了。解决方法是给公式加函数,检测记录是新建还是字段真的变了。

优雅处理记录变更(二):需要了解的函数

slide_17

几个好用的函数:ISCHANGED(field_name) 在特定字段值改变时返回 TRUE,用它让规则只在该字段变化时触发;ISNEW() 在记录被创建时返回 TRUE,通常和 ISCHANGED 一起用(创建时字段不会被检测为"已变更");PRIORVALUE(field_name) 让你看到字段原来的值——例如检查 Stage 的旧值来阻止商机从 Closed Won 改走。

构建检测变更的验证规则(一):创建 OPP001

slide_18

创建一条要求 Close Date 为今天或之后的规则——针对新商机或关闭日期有变更的商机。在 Object Manager 打开 Opportunity,进 Validation Rules 点 New。Rule Name 为 OPP001_Close_Date_After_Today,公式用 ISNEW 和 ISCHANGED 让规则只在新商机或关闭日期改早于今天时触发,Error Message 为 The close date must be today or later [OPP001],Error Location 选 Close Date 字段,然后 Save。想测现有数据,先在 Playground 里准备一个关闭日期早于今天的商机。

构建检测变更的验证规则(二):测试场景

slide_19

测试不同场景:用早于今天的关闭日期新建商机 → 被阻止;把商机关闭日期改成昨天 → 被阻止;把关闭日期改成今天 → 允许;编辑关闭日期在过去、但其他字段 → 允许。因为规则检测新记录和变更的关闭日期,编辑现有记录上的无关字段不会触发它。

03 绕过你的验证规则(Bypass Your Validation Rules)

slide_20

本单元构建绕过开关:创建自定义权限、通过权限集授予它,再写一条只在用户缺少该权限时才触发的验证规则。

学完本单元,你将能够:

  • 在验证规则中实现绕过开关(bypass switches)。

绕过验证规则(一):何时需要绕过

slide_21

精心设计的规则很少需要绕过。一旦用了 ISCHANGED 和 ISNEW,规则只在数据被改成不再符合要求时才触发。通常绕过是为了修正历史数据或执行数据加载。注意:如果你这样改了数据,其他用户之后可能难以编辑那些记录。

绕过验证规则(二):设置路径

slide_22

目标是阻止用户在 Lead 的 Product Interest 字段填值后被清空,同时允许特定用户清空它。路径是四步:创建自定义权限 → 把它加进权限集 → 把权限集分配给用户 → 创建一条只在用户没有该权限时才为真的验证规则。

创建自定义权限

slide_23

第一步创建自定义权限。在 Setup 搜索 Custom Permissions 并进入,点 New。Label 填 Bypass Lead Validation Rules,Name 填 Bypass_Lead_Validation_Rules,Description 填 "Allows users to bypass lead validation rules.",然后 Save。这个权限就是规则要检测的开关。

创建权限集(一):构建集合并启用权限

slide_24

现在需要一个权限集来承载这个自定义权限。在 Setup 打开 Permission Sets,点 New。Label 和 Name 都填 Bypass Lead Validation Rules,License 选 None,Description 同样填,然后 Save。在权限集概览页滚到 Custom Permissions,点它,再点 Edit,把 Bypass Lead Validation Rules 移入 Enabled Custom Permissions 区,然后 Save。

创建权限集(二):分配给用户

slide_25

在权限集概览页点 Manage Assignments,再点 Add Assignment,勾选你自己的名字,点 Next、Assign、Done。一个实用技巧:你可以用会话型权限集并构建一个 Flow,让用户在需要时把权限集应用到当前会话——这样默认大家都遵守验证规则,只有真正需要绕过时才运行 Flow 获得保存能力。

创建带绕过的验证规则(一):构建 LEAD002

slide_26

在 Lead 对象上创建规则:Setup → Object Manager → Lead → Validation Rules → New。Rule Name 为 LEAD002_Product_Interest_Required,Description 为 "Once Product Interest has been populated, it cannot be cleared.",Error Message 为 Once Product Interest has been populated, it cannot be cleared [LEAD002],Error Location 选 Product Interest 字段,然后 Save。公式是重点,下面分解。

创建带绕过的验证规则(二):分解公式

slide_27

公式用 AND 包裹三个条件,只有三者同时为真才触发:

  • NOT($Permission.Bypass_Lead_Validation_Rules) —— 用户没有绕过权限;
  • NOT(ISBLANK(TEXT(PRIORVALUE(ProductInterest__c)))) —— 字段的旧值非空(因为是 picklist,需用 TEXT 判断是否为空);
  • ISBLANK(TEXT(ProductInterest__c)) —— 字段的当前值为空。

合起来就是:一个没有权限的用户正在把已填的 Product Interest 清空——规则触发、阻止保存,直到他恢复一个值或获得绕过权限。


文章来源:Trailhead - Validation Rules