本文记录了一个在 Zoho CRM 中配置验证规则后仍被用户绕过的真实案例,分析根本原因并给出彻底的解决方案。
背景
在 Zoho CRM 的 Contacts 模块中,我们为 Email 字段配置了如下验证规则:
- 规则名称:Validation Rule for "E-mail"
- 应用对象:Contacts / Indirect
- 执行条件:When criteria is met
- 验证时机:Save Only
- 验证逻辑:Email IS EMPTY → 触发错误
- 错误提示 :
This field is required! - 验证偏好:Stop with error(阻止保存)
配置看起来没有问题,目的也很明确:确保每一条 Contact 记录都必须填写 Email。
然而,我们很快发现,部分用户在 Email 为空的情况下依然成功创建了记录。
排查过程
第一步:排除 API 创建
首先怀疑是通过 API 绕过了前端验证,但经过确认,这些记录并非通过 API 写入,而是用户在界面上手动操作创建的。
第二步:关注 "Indirect" 的含义
规则应用在 Contacts / Indirect,这意味着规则针对的是「间接创建」的场景,例如从 Leads 转化、从 Deals 关联创建等。但这也暗示规则在某些创建路径下可能存在覆盖盲区。
第三步:定位真正的绕过路径
经过进一步排查,发现用户使用的是 快速创建(Quick Create) 入口。
这就是问题的根源。
根本原因
Zoho CRM 的快速创建表单是一个精简版的输入弹窗,只包含少数核心字段,并非完整的创建表单。
Email 字段不在快速创建表单中 → 验证规则检查的目标字段根本不存在于该表单 → 规则无从触发 → 用户成功绕过验证。
用户点击「快速创建」
↓
弹出精简表单(无 Email 字段)
↓
填写其他字段后保存
↓
验证规则:Email 字段未出现,跳过检查
↓
记录创建成功(Email 为空)✗
这不是用户的恶意操作,而是系统配置层面的覆盖缺口。
解决方案
方案一:将 Email 加入快速创建表单(推荐)
在快速创建布局中手动添加 Email 字段,使验证规则有字段可以检查。
路径:设置 → 模块和字段 → Contacts → Quick Create 布局 → 将 Email 字段拖入表单
优点:保留快速创建的便利性,同时让验证规则正常生效。
方案二:禁用快速创建入口
直接关闭快速创建功能,强制用户使用完整的创建表单。
路径:设置 → 模块和字段 → Contacts → 关闭「Quick Create」开关
优点 :操作简单直接。
缺点:牺牲了快速创建的用户体验,影响效率。
方案三:在字段层面设置必填(终极方案)
将 Email 字段直接标记为系统级必填(Required),这是最彻底的解法。
路径:设置 → 模块和字段 → Contacts → Email 字段 → 勾选「Required(必填)」
与验证规则不同,字段级必填是系统底层的强制约束,不依赖表单布局,任何创建路径------包括快速创建、API、导入、工作流------都无法绕过。
方案对比
| 方案 | 是否保留快速创建 | 覆盖所有创建路径 | 实施难度 |
|---|---|---|---|
| 方案一:Email 加入快速创建表单 | ✅ | ❌(仍依赖规则) | 低 |
| 方案二:禁用快速创建 | ❌ | ❌(仍依赖规则) | 低 |
| 方案三:字段设为 Required | ✅ | ✅ | 低 |
| 方案一 + 方案三(推荐组合) | ✅ | ✅ | 低 |
经验总结
这次问题暴露了 Zoho CRM 验证规则的一个重要限制:
验证规则只能检查「表单中存在」的字段。如果字段不在当前表单布局中,规则不会触发。
因此,在依赖验证规则做数据完整性保障时,需要注意以下几点:
- 了解所有创建路径:除了标准创建表单,还要考虑快速创建、模块转化、关联创建、导入、API 等场景。
- 验证规则 ≠ 数据层约束:验证规则是 UI 层的保障,不是数据库层面的约束,存在被绕过的可能。
- 关键字段用 Required 兜底:对于真正不能为空的字段,直接设置字段级必填是最可靠的方式,可以和验证规则同时使用,互为补充。
结语
配置验证规则是 Zoho CRM 数据治理的常见手段,但它并非万无一失。理解各创建入口的差异、结合字段级必填约束,才能真正确保数据质量。希望本文的排查思路和解决方案对遇到类似问题的团队有所帮助。