这些页面有何不同
MultiDatePick 会把您选的日期保存为相关对象上的记录,每条都关联回一条父记录。组件只需要知道是哪一条父记录。
- 在记录页面上(例如某条 Event 记录),Salesforce 会自动把当前记录的 Id(即
recordId)传给组件。无需额外配置。 - 在应用程序页面、主页或 Experience 站点上,没有“当前记录”,Salesforce 什么也不会传。没有父记录,组件就无处保存,因此它按设计会隐藏“保存”按钮,而不是显示一个一单击就出错的按钮。
在 Lightning App Builder 中把 MultiDatePick 拖到应用程序页面或主页上,或在 Experience Builder 中拖到页面上之后,即可在属性面板中找到 Static Parent Record Id。
Static Parent Record Id 与 Flow:何时用哪个
Static Parent Record Id 让组件指向一条固定的父记录,因此每位访问者看到的都是同一条记录。这在有些场景下恰到好处,在另一些场景下则不合适。如果记录需要因用户或每次访问而变化,请改用屏幕 Flow(Screen Flow)来驱动。把组件放到 Flow 屏幕上,再将其 Parent Record Id 绑定到 Flow 在运行时解析出的变量。
记录对所有人都相同时,使用 Static Parent Record Id
- 公共预订页面:面向访客的“申请预约”页面,所有预订都关联到同一条父记录(一个办公室、地点或资源)。固定 Id 正合适。
- 全组织共用的日历:一条“公司停业日”记录,或一个所有人都预订的共享资源,不因用户而变化。
- 固定的看板锚点:应用程序页面或主页上始终指向同一条主记录的日历。
经验法则:如果“这是谁的记录?”的答案是“对所有人都是同一条”,就用 Static Parent Record Id。
记录在运行时才确定时,使用 Flow
- 按用户区分的记录:每个人只看到自己的记录(例如每位外包人员都进入自己的休假日历)。Flow 用“获取记录”(Get Records) 查找所有者或关联联系人 =
{!$User.Id}的记录,保存其 Id,再传给组件。 - 由 URL 驱动:Flow 的输入变量从链接中读取
?id=…,一个页面即可服务多条记录。访客同样适用,无需登录。 - 先选后看:第一个屏幕让用户搜索或选择(员工、会议室、客户);第二个屏幕显示该记录的日历。
$User) 解析并不适用。要么通过 Static Parent Record Id 共享一条记录,要么通过 Flow 用 URL 参数来驱动。真正按用户区分的日历需要登录用户。一分钟完成设置
“保存”按钮出现的条件
四项缺一不可,否则“保存”按钮保持隐藏:
| # | 属性(构建器中的标签) | 记录页面 | 应用程序 / 主页 / Experience |
|---|---|---|---|
| 1 | 父记录 | 自动(recordId) | Static Parent Record Id |
| 2 | 子对象 API 名称 | 必填 | 必填 |
| 3 | 日期字段 API 名称 | 必填 | 必填 |
| 4 | 关系字段 API 名称 | 必填 | 必填 |
把 Config Name 设为设置向导中的配置,第 2 到 4 项会自动填好。
放在哪里
| 页面类型 | 在哪里构建 | 如何上线 | 谁需要访问权限 |
|---|---|---|---|
| 应用程序页面 | Lightning App Builder,新建,应用程序页面 | 激活并添加到一个或多个应用程序(成为一个选项卡) | MultiDatePick - User 权限集 |
| 主页 | Lightning App Builder,新建,主页 | 激活为组织默认主页,或在应用程序管理器的“页面”中按应用程序分别激活 | MultiDatePick - User 权限集 |
| Experience 站点 | Experience Builder,位于“自定义组件”下 | 发布站点 | 成员简档(或访客用户):对象和字段的读取和创建权限,以及一条共享规则。公共站点:访客清单 |
主页小技巧:将 Existing Dates Mode 设为 readonly,即可得到一个只读的“已安排事项”视图。
公共访客站点:五步清单
公共 Experience Cloud 页面让任何人无需登录即可预订。以访客身份测试之前,请完成全部五步。第 4 步和第 5 步最常被遗漏。可以在在线演示(一个公共访客站点)中查看实际效果。
| # | 步骤 | 需要设置的内容 |
|---|---|---|
| 1 | 对象权限 | 为站点访客用户授予组件所用每个对象的“读取”权限;如果访客要提交,还需授予“创建”权限。访客永远无法编辑或删除。这是 Salesforce 对所有应用程序的访客许可证规则,因此编辑和取消功能应放在需要登录的页面上。 |
| 2 | 字段级安全性 | 日历显示的每个字段都需要“读取”权限。日历写入的每个字段都需要“编辑”权限,包括状态、时间和关系字段。资源的营业时间字段和停业日字段也要包括在内。 |
| 3 | 访客共享规则 | 为访客用户创建一条“读取”共享规则,让访客能看到记录。对象的外部组织范围默认设置必须为“私有”,规则才会生效。以元数据部署的规则需要在“共享设置”中单击一次重新计算。 |
| 4 | 访客权限集 | 将 MultiDatePick - Guest 分配给站点的访客用户。它包含日历加载数据所需的 Apex 类访问权限,以及访客在 MultiDatePick 对象上可拥有的读取和创建权限。 |
| 5 | 发布并激活 | 发布和激活是两个独立的步骤。访客只能看到已激活的站点。 |
访客还需要的两项组织设置
| 设置项 | 原因 |
|---|---|
| 默认记录所有者 | 访客不能拥有记录,因此 Salesforce 会把每个访客预订分配给一个默认所有者。在 Experience 工作区的“管理”>“首选项”中设置。 |
| 对所引用记录的读取权限 | 指向某个资源或父记录的预订,需要访客对该记录有“读取”权限,否则保存时会出现交叉引用错误。凡是供访客预订的内容,请使用自定义对象:访客对联系人和客户的访问受到严格限制。 |
正在规划公共预订页面?在 Salesforce Experience Cloud 站点上实现自助预订介绍了访客能做什么,以及应该向他们展示哪种视图。
记录页面之外的六种模式
| 模式 | 页面类型 | 组件 | 附加设置 |
|---|---|---|---|
| 内部预订中心(“预订会议室”) | 应用程序页面 | Booking | 容量字段,实时显示“3/10”这样的可用名额 |
| 客户自助预约 | Experience 站点 | Booking 或 Date Time | 当父记录是每位客户自己的个案或订单时,使用 Flow |
| 个人可用时间 / 休假 | 主页 | Dates | 状态颜色:Pending 和 Approved 一目了然 |
| 活动与班级报名 | Experience 站点或应用程序页面 | Date Time | 用 Max Dates Allowed(最大选择数) 限制每人可报的场次 |
| 志愿者与班次报名 | Experience 站点 | Booking | 容量字段显示“剩余名额”,状态颜色区分 Open 与 Full |
| 项目里程碑 | 应用程序页面 | Dates 或 Date Time | 状态颜色(Planned、In Progress、Done)和双月视图 |
故障排除
| 现象 | 解决方法 |
|---|---|
| “保存”按钮始终不出现 | 四项中有一项为空。在记录页面之外,通常是 Static Parent Record Id。 |
| 日历能加载,但保存失败 | 缺少对象访问权限。分配 MultiDatePick - User 权限集;在站点上,为成员或访客简档授予读取和创建权限。 |
| 保存时提示“字段不存在” | API 名称拼写错误。请从“设置”的“对象管理器”中复制。命名空间前缀只用于其他软件包的对象(例如 acme__Visit_Date__c)。 |
| 站点成员看不到自己的记录 | 在子对象上添加共享规则(或放宽组织范围默认设置)。 |
| 已保存的日期刷新后消失 | 保持 Load Existing Dates 开启(默认即为开启)。 |
| Static Parent Record Id“无效” | 使用父对象(即关系字段所指向的对象)的真实 15 或 18 位 Id。 |
还有其他问题?故障排除页面列出了每条设置提示,附截图和解决方法。