更新到v16后我的工作区或桌面图标消失了

将站点从 v15 更新到 v16,或升级到更高的 v16 版本后,你依赖的某个工作区或桌面图标可能会变得不一样:自定义布局恢复为默认布局、桌面上缺少某个图标,或者整个工作区都不见了。这是三种不同的情况,对应三种不同的解决办法,所以先要把它们区分清楚。

你会看到的现象

  • 你自定义过的工作区(例如在 Home、Accounting 或 Stock 等标准工作区中添加了卡片、数字卡片或 HTML 块)显示的是新的默认布局,你添加的内容不见了。
  • 你自己创建的工作区或桌面图标(不是随应用一起提供的)完全不见了:它不在 Workspace 列表中,不在桌面图标网格中,也不在侧边栏中。
  • 工作区仍然存在,但看起来被清空了:你记得的卡片和链接都不见了,只剩下一个快捷方式面板。
  • 你创建的桌面图标不见了,但它链接到的 Workspace 仍然存在。

为什么会这样

v16 同时改变了两件事:它重新设计了每个应用自带的标准工作区(因此 Home、Accounting 等内置工作区与 v15 相比会有意呈现不同的外观),并且把许多原本位于工作区主体内的 doctype 和报表链接移到了左侧边栏。这两项改动都不会删除你的数据,但如果你之前自定义过某个工作区,它可能会看起来被清空了。

另外,更新站点时会运行 bench migrate,它会从应用的 JSON 文件中重新导入每个标准工作区,并删除更新清理步骤无法与已安装应用中的文件匹配的任何工作区、桌面图标或侧边栏行——将其视为不再属于任何应用的 fixture。你通过 desk 自行创建的工作区本应被排除在此清理之外,但在某些 v16 版本中,migrate 打上了应用或模块标签的站点创建的公共工作区被误清理并删除了。Frappe 已在多个 v16 补丁版本中修复了若干此类情况;保持在最新的补丁版本是避免遇到未修复问题的最佳保护措施。

这两件事组合起来形成三种不同的情况:

  1. 标准工作区的自定义内容被覆盖了,而不是被删除了。 旧布局仍保留在该工作区的编辑历史中。
  2. 你创建的工作区或图标被彻底删除了。 它已从实时列表中消失,但可能仍作为 Deleted Document 存在,或存在于备份中。
  3. 没有任何内容被删除或覆盖——它移动了位置,或者对你隐藏了。 内容现在在侧边栏中,或者某个权限或角色把该图标过滤掉了。

如何判断你属于哪种情况

  1. 打开 Workspace 列表(在 Awesome Bar 中搜索“Workspace”),按名称查找该工作区。
  • 如果它存在但看起来不一样:请转到“如果标准工作区被覆盖了”。
  • 如果它完全不存在:继续执行第 2 步。
  1. 在 Awesome Bar 中搜索“Deleted Document”,并将 Deleted Doctype 筛选为 Workspace、Desktop Icon 或 Workspace Sidebar。如果你找到一行包含缺失名称的记录,说明它被删除了——请转到“如果它被删除了”。
  2. 如果某个桌面图标不见了,但它的 Workspace 仍在列表中,则该图标的链接可能是被过滤掉了,而不是被删除了。请检查:
  • 该图标在 Desktop Icon 列表中的 Hidden 字段。
  • 该图标或其工作区是否带有你的用户不具备的角色(Has Role)。
  • 该工作区是否为 Private——私有工作区以及链接到它的任何图标,仅对拥有它的用户可见。
  1. 如果以上都不能解释,请清除缓存的桌面状态:注销后重新登录,或请系统管理员在站点上运行 bench clear-cache。

如果标准工作区被覆盖了

在 v16.50 及更高版本中,Frappe 可以为你重放编辑:

  1. 在 Awesome Bar 中搜索“Restore Workspace”。此页面需要 Workspace Manager 角色——如果你没有该角色,请让系统管理员授予。
  2. 该页面会列出此站点在更新覆盖之前编辑过的所有标准工作区,以及最后编辑时间和编辑者。
  3. 点击工作区旁边的 Restore。这会将你的旧布局作为站点自定义写回,因此该工作区会在其通常地址上再次显示该布局。
  4. 如果页面显示的是警告而不是恢复所有内容,请阅读它——某些编辑(例如,修改随应用提供的卡片的现有行,而不是新增一行)无法带入自定义中,需要手动重做。

如果您的站点运行的是较早的 v16 版本,则此页面尚不存在。请将站点更新到 v16.50 或更高版本后再使用,或者手动重建布局——通过 编辑工作区 重新添加卡片、链接或 HTML 块,如果有更新前后的截图可以参考。

如果它被删除了

  1. 打开您找到的 已删除文档 记录,然后点击 恢复。这会用原始名称和内容重新创建该文档。要使其生效,您需要对被恢复的 doctype(Workspace、Desktop Icon 或 Workspace Sidebar)拥有创建权限。
  2. 如果相关行是一起被删除的(例如,一个工作区及其侧边栏和桌面图标同时被删除),请逐一恢复——仅恢复工作区不会带回其图标或侧边栏。
  3. 如果 已删除文档 中也没有显示任何内容,或者您需要站点完全恢复到更新前的状态,请改用更新前所做的备份来恢复站点。在 Frappe Cloud 上,使用仪表板中站点的 备份 选项卡;在自托管的 bench 上,使用 bench --site [site-name] restore [backup-file]。恢复数据库备份会替换该备份之后站点上的所有数据,而不仅仅是工作区,因此在执行此操作前请与站点管理员确认。
  4. 工作区或图标恢复后,在再次允许站点迁移之前,请将站点更新到 v16 系列的最新补丁。如果删除是由上述迁移时清理导致的,保持最新是确保避免再次发生的唯一方法——清除工作区的 应用 或 模块 字段并非在每个版本上都经过确认的修复方法,因为至少在一个站点上,该字段在保存时会自行重置。

如何预防

  • 避免就地自定义标准(应用自带)工作区。请改为构建您自己的工作区,否则就要预期在下次更新后需要使用 恢复工作区(v16.50+)或手动重做。
  • 将您自己构建的任何内容保持为 私有 工作区,这样它只需要对您可见。私有工作区永远不会成为上述迁移时 fixture 清理的候选对象。
  • 将站点保持在 v16 系列的最新补丁版本上。上述大多数删除情况已在后续补丁中修复。
  • 在任何更新之前进行备份,或者至少对您的工作区布局截图。

如果这不能解决问题

提交支持工单,并提供以下信息:站点名称、更新前后从 帮助 → 关于 中获取的 Frappe 和应用版本、缺失或已更改的工作区/图标的准确名称、它是标准工作区还是您创建的工作区、它影响所有用户还是单个用户,以及您是否在 已删除文档 中找到了匹配的行(如果找到,请包含其名称和删除时间戳)。如果更新是自动运行的(共享的 Frappe Cloud bench),还请注明日期,以便支持人员将其与站点的更新日志进行匹配。

  • 工作区
  • 工作区自定义
  • 工作区访问