即将登陆 Salesforce AppExchange

应用程序页面、主页和 Experience 站点

MultiDatePick 可用于所有 Lightning 页面,不仅限于记录页面。诀窍就是一个属性:Static Parent Record Id。

观看设置演示 故障排除

这些页面有何不同

MultiDatePick 会把您选的日期保存为相关对象上的记录,每条都关联回一条父记录。组件只需要知道是哪一条父记录。

  • 在记录页面上(例如某条 Event 记录),Salesforce 会自动把当前记录的 Id(即 recordId)传给组件。无需额外配置。
  • 在应用程序页面、主页或 Experience 站点上,没有“当前记录”,Salesforce 什么也不会传。没有父记录,组件就无处保存,因此它按设计会隐藏“保存”按钮,而不是显示一个一单击就出错的按钮。
解决方法是 Static Parent Record Id 属性。把某条父记录的 Id 粘贴进去,组件的行为就和放在该记录页面上完全一样。这是在构建器中设置的一个属性,与 Salesforce 的静态资源 (Static Resource) 毫无关系,后者是用于上传文件的另一项功能。

在 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 参数来驱动。真正按用户区分的日历需要登录用户。

一分钟完成设置

通过 Config Name 设置的动画演示:在 MultiDatePick 设置向导中复制配置名称,在 Lightning App Builder 中将 Resource Booking 组件拖到页面上,粘贴 Config Name 并填写 Static Parent Record Id,预订日历随即显示,所有设置均来自该配置
在设置向导中复制配置名称,连同父记录 Id 一起粘贴,日历就绪。其余所有设置都由配置提供。

“保存”按钮出现的条件

四项缺一不可,否则“保存”按钮保持隐藏:

#属性(构建器中的标签)记录页面应用程序 / 主页 / 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。

还有其他问题?故障排除页面列出了每条设置提示,附截图和解决方法。

遇到这里没有涵盖的问题?

欢迎发邮件提问,我们乐意帮忙。

发送邮件至 Support@MultiDatePick.com 返回入门指南 试用在线演示