跳转到主要内容
HPO Software 分步式 4D 数据库与低代码应用构建指南 —— 从创建首张表到打造可运行的商业应用。

本站部分链接为联盟营销链接:如果您通过这些链接购买,我们可能会获得佣金,且不会增加您的成本。这绝不会影响我们的推荐建议。详情请参阅我们的联盟披露声明。 联盟营销披露.

第四维度学习基础知识

文件菜单是用户在任何自定义 4D 应用程序中首先接触的东西,也是渴望转向表单和方法的开发人员最有可能将其保留为默认状态的菜单。这是一个错误。文件菜单是您的应用程序声明其用途的地方 - 无论是数据输入工具、报告工具还是通用业务应用程序。尽早做好准备可以节省以后的返工,因为菜单项连接到方法,而方法连接到表结构。

本节将介绍自定义 4D 菜单栏的推荐文件菜单、如何在菜单栏编辑器中构建它,以及在此过程中会遇到的实际限制。

要点

  • 精心设计的自定义文件菜单通常包含四个逻辑组:数据移动(导入/导出)、打印(页面设置、打印记录、打印搜索结果)、应用程序标识(关于)和退出(退出)。
  • 4D 中的菜单栏永久命名为“Menu Bar #1”、“Menu Bar #2”等 - 您无法重命名它们,因此请记录哪个栏有什么用途。
  • 使用 Line 选项将分隔线创建为菜单项本身;它们不是一个单独的属性。
  • 菜单项名称一旦创建就固定。您可以删除并重新创建项目,但无法就地编辑其标签。
  • 重新排序是不对称的:您可以自由向上拖动项目,但要向下移动项目,您必须拖动其上方的其他项目。
  • 键盘快捷键和附加方法是按菜单项配置的,方法是菜单和应用程序逻辑之间的桥梁。

为什么文件菜单值得精心设计

在 FileMaker Pro 中,“文件”菜单基本上是固定的 - 您可以获得平台提供的内容,并且自定义发生在脚本和按钮级别,而不是菜单栏本身。 4D 颠倒了这种关系。菜单栏是一流的设计对象,通过菜单栏编辑器在设计模式下进行编辑,其中的每个项目都可以带有自己的键盘快捷键和自己的方法。

这种权力伴随着责任。出于习惯而镜像 FileMaker 布局的自定义“文件”菜单会让 4D 用户感觉不对劲,而完全省略打印的“文件”菜单会让任何期望标准桌面行为的人感到沮丧。我们的目标是一个“可识别的”菜单——它执行“文件”菜单预期执行的操作——同时“特定于”您的应用程序的工作流程。

该系列的推荐结构故意很小:

文件
  导入数据
  导出数据

页面设置
  打印记录
  打印搜索结果

关于 A

退出        Q

每个组回答不同的用户问题。第一组回答“如何输入和输出数据?”第二个回答“我如何将其写在纸上?”第三个回答“我在运行什么?”第四个回答“我怎么离开?”这是一个连贯的心理模型,用户无需指导即可导航它。

Related: — A spreadsheet-simple interface sitting on top of a real , with automations, views, and shareable interfaces..

在菜单栏编辑器中构建文件菜单

机制很简单,但充满了小陷阱。从 设计模式,打开 工具 菜单并选择 菜单栏编辑器。您将在左侧看到“菜单栏列表”窗口,在右侧看到“当前菜单栏”窗口。

  1. 在“菜单栏列表”窗口中,单击“Menu Bar #1”。请注意,菜单栏名称不可编辑 - 它们始终是“Menu Bar #1”、“Menu Bar #2”等。如果您维护多个栏(例如,一个用于数据输入,一个用于报告),请保留一个单独的注释,将每个编号栏与其用途进行映射。这是 4D 中为数不多的必须维护外部文档以保持理智的地方之一。
  2. 在“当前菜单栏”窗口中,单击“文件”菜单将其选为目标。
  3. 单击“添加项目”以附加新条目,然后键入其名称。
  4. 要插入分隔线,请添加另一个项目并选择 Line 选项,而不是键入名称。
  5. 重复此操作,直到菜单符合您想要的结构。

你实际会遇到的限制

  • 名称是不可变的。 创建菜单项后,您无法对其进行重命名。如果您将“Export Data”误拼为“Exprot Data”,则唯一的解决方法是删除该项目并创建一个新项目 - 这也意味着重新附加您已配置的任何方法和快捷方式。第一次仔细打字。
  • **实际中拖动是单向的。**您可以自由向上拖动项目。要向下移动某个项目,您必须将其上方的项目向上拖过它。在开始添加之前计划好您的顺序,或者接受一些调整。
  • 分隔符算作项目。 分隔符在排序中占据一个位置,因此它参与与命名项目相同的拖动规则。在按大致正确的顺序排列命名项目后,插入分隔线。

原始演练中的图 8 显示了针对“文件”菜单的“添加项目”工作流程,图 9 显示了用户在运行时将看到的结果自定义“文件”菜单。在每组添加之后预览菜单是值得的,而不是盲目地构建整个菜单。

选择什么属于什么,什么不属于

可定制菜单栏的诱惑是暴露所有内容。抵制它。您添加的每一项都保证该功能有效、可发现并且具有合理的键盘快捷键。完整连线的短文件菜单胜过带有死条目的长菜单。

If you are shopping: — A that plugs into the wider Zoho suite and prices per user rather than per app..

一个有用的决策框架:

候选项目包含条件…考虑省略条件
导入数据用户定期引入外部文件(CSV、制表符分隔、电子表格导出)数据仅通过您自己的表单或自动同步到达
导出数据用户需要将数据交给Excel、另一个系统或同事报告完全由打印输出或屏幕列表处理
页面设置只要有任何打印操作该应用程序仅限屏幕
打印记录用户打印当前屏幕上的记录打印始终是搜索结果或报告
打印搜索结果用户使用查询结果并需要将其记录在纸上打印始终是单记录
关于您希望一键获取版本和支持信息应用程序是内部的,版本控制在其他地方处理
退出始终 - 用户需要一个可以运行清理代码的干净退出千万不要忽略这一点;缺少 Quit 会强制操作系统级窗口关闭

退出项目值得特别提及。在 4D 中,Quit 可以附加到执行有序关闭的方法 - 关闭窗口、提交或取消事务、释放锁、写入会话日志。如果您从菜单中省略退出,用户将关闭应用程序窗口,并且您的清理方法永远不会运行。这是一种数据完整性风险,而不是外观问题。

同样,关于也不仅仅是虚荣心。精心构建的“关于”项可以显示应用程序版本、4D 引擎版本、当前数据文件路径和支持联系人。当用户寻求帮助时,“单击“关于”并阅读前三行”可以在问题升级之前解决数量惊人的支持请求。

键盘快捷键和方法连接

除了名称之外,每个菜单项还附加了两个属性:键盘快捷键和方法。

键盘快捷键严格遵循桌面惯例,用户会猜到它们。传统的配对是 Command-Q (macOS) 或用于退出的等效平台加速器,以及用于打印的 Command-P。当您分配快捷方式时,请检查是否有冲突 - 两个菜单项共享一个加速器意味着其中一个菜单项永远不会触发,用户会将其报告为“菜单项不执行任何操作”。

方法 4D 中相当于 FileMaker 脚本的功能,它们使菜单项“执行”某些操作。没有方法的菜单项是惰性的:它出现、突出显示,并且单击它不会执行任何操作。这是第一个自定义菜单栏中最常见的缺陷。在您认为“文件”菜单完成之前,请检查每个项目并确认它附加了方法,或者有刻意的装饰目的。

Related: — A builder aimed at portals, directories, and internal tools — with flat-rate pricing instead of per-user fees..

分工值得说清楚:

  • 菜单项处理发现和调用。
  • 方法 处理逻辑、验证、错误处理和用户反馈。
  • 表单和列表框处理实际的数据呈现。

保持这些层独立是 4D 应用程序可维护的原因。其方法是调用命名良好的项目方法的单行的菜单项比其方法包含五十行内联逻辑的菜单项更容易调试。

本系列的后续部分将介绍方法;现在,重要的是把钩子留在原处。尽早添加菜单项并附加存根方法意味着您可以稍后连接真正的逻辑,而无需重新访问菜单栏编辑器。

Our pick: — The long-running relational database platform for teams that need custom apps on desktop, web, and mobile from a single file..

常见错误以及如何避免它们

  • 在数据模型之前构建菜单。 菜单项意味着功能。如果您在决定哪些表和字段可导出之前添加“导出数据”,则您要么会发布半工作的导出,要么稍后重写菜单。
  • 忘记分隔线项目。 如果没有分隔线,具有八个条目的文件菜单将读取为无差别的列表。视觉分组使结构清晰易读。
  • 假设您可以稍后重命名。 您不能。在单击“添加项目”之前决定标签 - 包括大写和复数形式。
  • 让 Quit 保持未连接状态。 如前所述,这会促使用户关闭窗口并跳过清理逻辑。
  • 大量复制FileMaker约定。 4D的菜单栏比FileMaker的菜单栏更灵活,因此复制FileMaker的文件菜单完全浪费了平台的优势。为您的用户设计,而不是为不同的产品设计。

这在该系列中的位置

本节专门介绍“文件”菜单。本系列的后续部分介绍了 4D 菜单与 FileMaker 菜单的比较、如何从头开始构建自定义菜单栏,以及如何处理“记录”菜单(这是搜索结果集、记录导航和删除的位置)。它们共同构成了菜单层的完整画面。

如果您正在构建第一个 4D 应用程序,合理的操作顺序是:定义表,构建表单,然后在知道用户实际需要哪些操作后设计菜单栏。菜单就是地图;应该在了解领土后绘制。

常见问题

为什么我无法在 4D 中重命名菜单栏或菜单项?

菜单栏永久命名为“Menu Bar #1”、“Menu Bar #2”等,菜单项标签在创建时固定。这是菜单栏编辑器中的故意限制,而不是错误。实际的解决方法是保留您自己的映射文档(一个将每个编号菜单栏与其用途配对的简单列表),并在单击“添加项目”之前校对项目名称,因为唯一的更正路径是删除并重新创建。

我需要为每个菜单项附加一个方法吗?

从功能上来说,是的,如果你想让这个项目做任何事情的话。菜单中出现一个没有方法的菜单项,并且可以选择,但没有任何反应。分隔线是个例外,它是结构性的,而不是可操作的。对于尚未编写逻辑的项目,请附加一个显示占位符消息的存根方法,以便该项目至少能够诚实地了解其状态。

每个应用程序中的“文件”菜单都应该包含“导入”和“导出”吗?

不。当用户真正将数据移入和移出系统时,请包括它们——例如,接收合作伙伴导出的电子表格或将查询结果交给分析师。如果所有数据都通过您自己的表单输入,并且所有输出都在屏幕上打印或查看,则“导入”和“导出”会增加复杂度,但不会增加价值。根据观察到的工作流程而不是其他应用程序的行为来做出决定。

如何在列表中向下移动菜单项?

您不能直接向下拖动项目。菜单栏编辑器仅允许您向上拖动项目。要向下移动某个项目,请将其上方的项目向上拖过它,这会有效地将其移低。因为分隔线也是项目,所以它们遵循相同的规则。如果您按预期的最终顺序添加项目并且之后仅进行小幅更正,那么这是最容易管理的。

“打印记录”和“打印搜索结果”有什么区别?

“打印记录”打印当前显示的单个记录,适合表单式输出,例如发票或客户资料。 “打印搜索结果”打印当前选择中的每条记录,这适合列表式输出,例如过滤报告。许多应用程序都包含这两种模式,因为用户根据他们正在审阅一个项目还是一批项目来在两种模式之间切换。

当用户退出时,菜单项可以运行清理代码吗?

是的 - 这是包含退出项目而不是依赖用户关闭应用程序窗口的最有力的原因之一。将一个方法附加到“退出”,该方法提交或取消打开的事务、释放记录锁、按顺序关闭窗口以及选择性地写入会话日志。如果菜单中没有“退出”,则该方法永远不会运行,并且应用程序将以用户离开的任何状态关闭。

Frequently asked questions

为什么我无法在 4D 中重命名菜单栏或菜单项?

菜单栏永久命名为“菜单栏 1”、“菜单栏 2”等,菜单项标签在创建时固定。这是菜单栏编辑器中的故意限制,而不是错误。实际的解决方法是保留您自己的映射文档(一个将每个编号菜单栏与其用途配对的简单列表),并在单击“添加项目”之前校对项目名称,因为唯一的更正路径是删除并重新创建。

我需要为每个菜单项附加一个方法吗?

从功能上来说,是的,如果你想让这个项目做任何事情的话。菜单中出现一个没有方法的菜单项,并且可以选择,但没有任何反应。分隔线是个例外,它是结构性的,而不是可操作的。对于尚未编写逻辑的项目,请附加一个显示占位符消息的存根方法,以便该项目至少能够诚实地了解其状态。

每个应用程序中的“文件”菜单都应该包含“导入”和“导出”吗?

不。当用户真正将数据移入和移出系统时,请包括它们——例如,接收合作伙伴导出的电子表格或将查询结果交给分析师。如果所有数据都通过您自己的表单输入,并且所有输出都在屏幕上打印或查看,则“导入”和“导出”会增加表面积,但不会增加价值。根据观察到的工作流程而不是其他应用程序的行为来做出决定。

如何在列表中向下移动菜单项?

您不能直接向下拖动项目。菜单栏编辑器仅允许您向上拖动项目。要向下移动某个项目,请将其上方的项目向上拖过它,这会有效地将其移低。因为分隔线也是物品,所以它们遵循相同的规则。如果您在预期的最终订单中添加商品并且之后仅进行小幅更正,那么这是最容易管理的。

“打印记录”和“打印搜索结果”有什么区别?

“打印记录”打印当前显示的单个记录,适合表单样式的输出,例如发票或客户资料。 “打印搜索结果”打印当前选择中的每条记录,这适合列表式输出,例如过滤报告。许多应用程序都包含这两种模式,因为用户根据他们正在审阅一个项目还是一批项目来在两种模式之间切换。

当用户退出时,菜单项可以运行清理代码吗?

是的 - 这是包含退出项目而不是依赖用户关闭应用程序窗口的最有力的原因之一。将一个方法附加到 Quit,该方法提交或取消打开的事务、释放记录锁、按顺序关闭窗口以及选择性地写入会话日志。如果菜单中没有“退出”,则该方法永远不会运行,并且应用程序将以用户离开的任何状态关闭。


Try FileMaker Free for 45 Days

The long-running relational database platform for teams that need custom apps on desktop, web, and mobile from a single file.