即将登陆 Salesforce AppExchange

在 Salesforce 中防止重复预订

验证规则看不到其他记录。正是这一个限制,让大多数 Salesforce 预订系统总是晚一天才发现冲突。

发布于 2026 年 7 月 21 日 · 更新于 2026 年 10 月 21 日 · MultiDatePick

重复预订是一个时机问题。等到标准 Salesforce 中的任何功能能告诉您会议室已被占用时,用户早已选好了它,填完了表单的其余部分,并转去做别的事了。

为什么常见的工具都不管用

工具能做什么不足之处
验证规则检查正在保存的记录上的字段完全无法查询其他记录
重复规则按字段值相等匹配9:00 到 10:00 和 9:30 到 10:30 有冲突,但并不匹配
记录触发的 Flow保存时查询并阻止在用户提交之后才触发;写法随意时无法安全处理批量数据
自定义代码完全可控,重叠判断逻辑正确仍然是在保存时拒绝,而且代码要由您来维护

它们的模式都一样:在用户做出选择之后才拒绝。即使是正确的自定义方案,结果也是“该时间段已被占用,请重试”,这种体验远不如一开始就不提供这个时间段。

重叠不等于相等

很多人会想到用重复规则,所以先把规则讲清楚。两个预订冲突的条件是:一个在另一个结束之前开始,并且在另一个开始之后结束。9:00 到 10:00 的预订和 9:30 到 10:30 的预订重叠了半小时,但没有任何一个字段值完全相同。任何基于值匹配的方法每次都会漏掉这种情况。

冲突和容量是两个不同的问题

它们常常被混为一谈。

冲突

两项预订争用一个只能容纳一项的资源。比如一间会议室、一位面试官、一辆车。

容量

一个可容纳多项的资源,问题在于还剩多少。比如有二十个座位的课程、需要四名护士的班次、有六十个工位的办公区。

把容量型资源当成冲突型资源,就永远无法预订第二个人。把冲突型资源当成容量为一的资源,技术上可行,但会丢失您很可能需要用来做报表的数量统计。

MultiDatePick Salesforce 使用率热力图的动画演示:左侧列出顾问,显示每天已预订占容量,悬停在已满的一天上,单击后打开该顾问当周
整个团队的容量:每天显示已预订占容量,超订的日期用橙色圆环标出。

三种合理的处理方式

“一律阻止”并不总是对的。当有人选了十二个日期而其中两个有冲突时,拒绝整个提交很不友好。好用的系统会提供选择:

阻止

拒绝保存并报告冲突。适合每个日期都不可或缺的场景。

跳过

保存空闲的十个,报告不空闲的两个。对于批量选择,这通常是最体贴的默认方式。

允许

有意允许重叠。有些企业就是故意超订的。

Salesforce 预订日历:每个时间段显示容量标记,冲突检测防止重复预订
每个时间段实时显示容量计数,在任何人单击之前冲突就一目了然。

真正的解决办法在更早的环节

上面所有机制都在保存时起作用。解决办法是把检查提前到选择的时候:日历加载时查询已有记录,把它们画到网格上,绝不提供已被占用的时间段。保存时的检查仍然保留,作为两个人同时看中同一空闲时间段这种真实竞争情况的兜底,但不再是第一道防线。

MultiDatePick 的做法。日历呈现时读取现有记录,把已占用的时间段显示为已占用,用实时的“已预订占容量”标记统计容量,并在保存时再次检查冲突。冲突行为可设为 block、skip 或 allow。在屏幕 Flow(Screen Flow)中,Conflict Dates 和 Successful Bookings Count 输出会准确告诉下一个屏幕发生了什么。

在做出选择的那一刻杜绝重复预订

在在线演示中预订一个时间段,看看已占用的时间如何从网格中消失。

  • $20/用户/月,全部功能
  • 30 天免费试用,无需信用卡
  • 100% Salesforce 原生
  • 无需 Apex
  • 即将登陆 Salesforce AppExchange