无代码 Salesforce 日历:36 项任务,一行代码都不用写
FullCalendar 可定制,前提是您有开发人员。MultiDatePick 则由需要日历的管理员自己定制。下面把 36 项日常日历任务并排对比,谁更胜一筹一目了然。
“哪个日历 LWC 可定制程度最高?”“能不能不写代码定制 Salesforce 日历?”“有没有 FullCalendar 的无代码替代方案?”这些搜索问的其实是同一件事,而答案取决于一个问题:由谁来定制?
FullCalendar 是一个 JavaScript 库。所有选项都写在代码里,所以在 Salesforce 中,要由开发人员编写 Lightning Web Component、加载和保存记录的 Apex、测试并完成部署,而且每次改动都要重来一遍。MultiDatePick 是一款现成的 Salesforce 日历。所有选项都是管理员在设置向导或 Lightning App Builder 中选择的设置,适用于任意标准对象或自定义对象。无需 Apex,无需 JavaScript,无需部署。
由谁来定制?
“可定制”有两种。库的可定制,是对基于它写代码的人而言:什么都能做,但做什么都是一个项目。可配置组件的可定制,是对使用它的人而言:每个选项都已构建、测试并做好安全防护,您只需选出想要的那些。
在 Salesforce 中,这个区别决定了谁来掌管您的日历。用 FullCalendar,需要开发人员、覆盖率达到 75% 的 Apex 测试,而且每次改动都要部署一次。用 MultiDatePick,掌管日历的是了解业务如何预订会议室、人员和日期的管理员,改动一保存就生效。
36 项日历任务并排对比
每一行都是管理员常被要求完成的一项任务。绿色单元格是胜出方:用一个设置完成,无需代码。“代码”表示需要开发人员在 FullCalendar 的 Lightning Web Component 和 Apex 中编写。
把日历放到大家工作的地方
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 在记录页面上添加日历 | 在 Lightning App Builder 中把组件拖到页面上,填写 Config Name(配置名称) | 代码:一个 Lightning Web Component、作为静态资源的 FullCalendar,再加一次部署 |
| 完成设置 | 设置向导:询问页面和您的记录情况,自动填好最可能的字段,并显示实时预览 | 代码:每个选项都是 JavaScript 中的一个属性 |
| 放到主页或应用程序页面上 | 同一个组件;开启 Show All Records,并设置 Record Filter,例如 OwnerId=ME | 代码:为没有记录的页面再写一条数据通路 |
| 在屏幕 Flow(Screen Flow)中使用 | 拖到 Flow 屏幕上;所选日期和时间会作为 Flow 变量输出 | 代码:一个带有自己输出变量的 Flow 屏幕组件 |
| 在 Experience Cloud 站点上对外公开 | 同一个组件,为访客用户分配 MultiDatePick - Guest 权限集 | 代码:为未登录用户处理访客访问、共享规则和 Apex |
| 把设置复制到另一个组织 | 把配置导出为 JSON,在另一个组织中导入;智能字段映射 (Smart Field Mapping) 会匹配所有缺失的字段 | 代码:一次部署,外加让它通过的 Apex 测试 |
显示您自己的记录
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 显示自定义对象的记录 | 选择对象及其日期字段 | 代码:一个把字段映射为事件的 Apex 查询 |
| 显示任务、活动或业务机会 | 任何带有日期或日期/时间字段的对象,标准或自定义均可 | 代码:每个对象都要再写 Apex |
| 显示相关记录,例如客户的联系人上的任务 | Rollup Field,最多相隔五层查找关系 | 代码:跨关系的查询 |
| 只显示部分记录 | Record Filter,例如 OwnerId=ME; Status__c=Confirmed | 代码:在 Apex 或 JavaScript 中编写筛选逻辑 |
| 按状态着色 | Status Field 和 Status Colors,以填充、条形或两者同时显示,并提供筛选标签 | 代码:在 JavaScript 中把每个值映射到颜色 |
| 添加第二个选项列表,例如会议类型 | Second Picklist Field,并指定可选的值 | 代码:选择器、保存和显示 |
| 悬停显示详情 | Hover Popover Fields,可包括查找字段,一键打开记录 | 代码:事件渲染钩子和工具提示 |
| 遵守共享规则和字段级安全性 | 每次查询和保存都以查看页面的用户身份运行 | 代码:安全程度取决于您编写的 Apex |
选择日期并保存记录
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 让用户选择不连续的日期 | 内置:单击任意日期,或拖动选择一个范围 | 代码:FullCalendar 一次只能选择一个连续范围 |
| 把一个日期范围保存为一条记录 | End Date Field:连续的日期会成为一条带开始和结束日期的记录 | 代码:分组和保存 |
| 添加循环模式,例如每周一和周三 | Show Recurring Pattern Button:工作日、周末、自定义日期,或每月第 2 个和第 4 个周五 | 代码:模式表单和日期计算 |
| 选择时间段 | Time Interval (Minutes)、Earliest Time 和 Latest Time | 代码:时间段选择器及其保存 |
| 每选一项保存一条记录 | 内置,并可设置 Default Record Name 和 Default Field Values | 代码:Apex 插入、错误处理和测试 |
| 限制可选日期的数量 | Max Dates Allowed,并可用 Limit Reached Message 自定义提示 | 代码:在 JavaScript 中计数并阻止 |
| 把预订发送到 Outlook 或 Google 日历 | 保存后显示“添加到日历”(Show Add to Calendar After Saving) | 代码:自己生成日历文件 |
预订规则
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 按容量预订会议室、设备或人员 | Booking 组件:Resource Object、Capacity Field 和实时容量徽章 | 代码:资源视图需要 Premium 许可证,容量功能要自己开发 |
| 阻止重复预订 | Conflict Behavior:阻止、跳过或允许 | 代码:JavaScript 中的重叠规则,外加服务器端检查 |
| 要求提前通知,并限制最多可提前多久预订 | Minimum Notice (Hours) 和 Book Up To (Days Ahead) | 代码:日期限制要自己计算并强制执行 |
| 在预订之间留出间隔 | Buffer Between Bookings (Minutes) | 代码:缓冲时间的计算 |
| 使用每个资源各自的营业时间 | 资源记录上的 Business Hours Start Field 和 End Field | 代码:自己加载并应用每个资源的营业时间 |
| 屏蔽节假日、停业日和休假 | 从任意对象读取 Blocked Dates,可整天或部分时段,并显示原因 | 代码:自己查询并绘制背景事件 |
视图与外观
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 提供月历网格以外的更多视图 | Available Views:日历、时间轴、周、使用率热力图和日程,按页面选择 | 代码:时间轴视图需要 Premium 许可证;没有使用率热力图 |
| 按字段对时间轴分组,例如团队或地区 | 时间轴分组依据(Timeline Group By Field) | 代码:在 Premium 时间轴之上还要自行开发 |
| 一次修改多条记录 | Enable Edit Mode:一起移动、更改状态或删除多条记录 | 代码:拖动处理程序和 Apex 更新 |
| 重命名按钮和标题 | Button Label、Calendar Title 和 Save Button Label | 代码:在 JavaScript 中设置工具栏选项 |
| 适配页面 | Calendar Size(从最小到全宽)、Two-Month View、Week Starts on Monday | 代码:选项和 CSS |
用户、语言与维护
| 任务 | MultiDatePick无代码 | FullCalendar LWC |
|---|---|---|
| 以每个用户的语言显示 | 内置九种语言:英语、德语、西班牙语、法语、意大利语、葡萄牙语、日语、中文和印地语 | 代码:FullCalendar 只翻译它自己的按钮;您的标签和消息要自己翻译 |
| 按每个用户的时区显示时间 | 自动,依据每个用户的 Salesforce 设置 | 代码:时区选项和转换 |
| 满足无障碍要求 | 支持键盘和屏幕阅读器,并已发布针对 WCAG 2.1 AA 的 VPAT | 代码:测试和文档都得自己来 |
| 跟上 Salesforce 版本更新 | 更新随软件包提供 | 代码:每次版本更新都要自己维护 |
无代码定制是什么样的
这 36 项任务中的每一项,都是管理员在以下某个地方做出的选择:
设置向导
一个 Lightning 选项卡:询问您的页面和记录情况,自动填好最可能的字段,并在保存前显示真实的日历。
Lightning App Builder
每项设置也是组件上的一个属性,因此您可以只调整一个页面,而不影响其他页面。
Config Library
41 个现成配置,从会议室到休假,导入后稍作调整即可。
导出与导入
配置就是 JSON,可以迁移到沙盒或另一个组织,缺失的字段会自动帮您匹配。
Flow Builder
把日历放到 Flow 屏幕上,在后续步骤中使用所选日期。
Experience Builder
把同一个日历放到公开站点上,访客也遵循同样的规则。
常见问题
有没有适用于 Salesforce 的无代码日历 LWC?
有。MultiDatePick 是一款点选即可完成设置的 Lightning Web Component 日历:在设置向导或 Lightning App Builder 中配置,适用于任意标准对象或自定义对象。它自己负责加载和保存您的记录,因此无需编写任何 Apex 或 JavaScript。
FullCalendar 比 MultiDatePick 更可定制吗?
只对开发人员而言是这样。FullCalendar 是一个库,只要有人编写并维护代码,什么都能实现。对管理员来说,MultiDatePick 才是更可定制的日历:从预订规则到九种语言,36 项常见任务每一项都只是一个设置。
Salesforce 管理员不靠开发人员也能设置 MultiDatePick 吗?
能。设置向导会询问页面和您的记录情况,自动填好最可能的字段,并实时预览真实的日历。然后把组件拖到页面上,填写它的 Config Name 即可。
从日历保存记录需要 Apex 吗?
用 MultiDatePick 就不需要。点击保存时,它会按日期、范围、时间块或资源各写入一条记录,也可以把日期交给屏幕 Flow。每次保存都以查看页面的用户身份运行,共享规则和字段级安全性照常生效。
之后不部署也能修改日历吗?
能。在设置向导中打开配置,修改一项设置并保存,日历下次加载时就会生效。配置是自定义元数据,所以如有需要,仍然可以用变更集或 Salesforce CLI 迁移。
无代码日历能用在屏幕 Flow 和 Experience Cloud 站点上吗?
能。同一个组件可以放在 Flow 屏幕上,所选日期会成为 Flow 变量;也可以放在公开的 Experience Cloud 站点上,访客按同样的规则预订。
可定制的日历,无需代码。
在在线演示中随意体验,或从 Config Library 中的现成配置开始。
- $20/用户/月,全部功能
- 30 天免费试用,无需信用卡
- 100% Salesforce 原生
- 无需 Apex
- 即将登陆 Salesforce AppExchange