现代命令概述
命令驱动模型驱动应用的核心应用程序行为。 它们是用户在播放应用时进行交互的按钮,以及在选择按钮时执行的结果操作。 每个命令都相对于其他命令定位,并绑定到应用中的命令栏位置。
在较高级别上,命令自定义适合以下类别。 每个类别中都存在各种功能,整个现代命令文档中对这些功能进行了更深入的介绍:
- 显示。 按钮的显示方式以及它在应用中的位置。 例如,按钮的标签、图标和辅助功能标签以及在命令栏中的位置和放置。
- 操作。 选择按钮时执行的逻辑。 例如,创建和更新数据或与应用内的各个控件和页面进行交互。
- 可见性。 指定按钮何时对用户可见或隐藏的逻辑条件。 例如,您可能希望按钮对某些用户可见,而对其他用户隐藏。 或者,也许按钮应该仅在满足数据记录的某些条件时才可见。
命令栏位置
主网格。 此命令栏在使用应用左侧导航功能查看此表中记录的完整页面列表时显示。
主窗体。 此命令栏在表的主要窗体上显示。 它将显示在窗体顶部,与将出现在窗体不同区域的关联视图或子网格视图不同。
子网格视图。 此命令栏在呈现子网格中此表数据的其他表的窗体上显示。 例如,客户主窗体有一个子网格控件,用于列出与客户记录相关的联系人记录。 要编辑下面的命令栏,请编辑联系人表的命令栏,然后编辑子网格视图。
关联视图。 此命令栏在查看此表中的相关数据时在父表的窗体上显示。 例如,从客户记录的主窗体中选择相关选项卡,然后选择一个相关表,如联系人。
快速操作。 快速操作与主网格位置关联。 要为快速操作和主网格位置添加或编辑命令,从现代应用程序设计器中选择所需的表,然后编辑命令栏并选择主网格位置。 按顺序确定的前五个命令也将在播放应用时显示为快速操作。
备注
命令设计器不支持不常自定义的命令栏位置。 有关为这些位置自定义命令的详细信息,请参阅全局命令栏和其他功能区一节。
命令类型
- 命令。 标准按钮。 被选择时执行操作。 也可以嵌套在下拉列表和拆分按钮中的组中。 请注意,它们在经典命令中称为弹出项目。
- 下拉列表。 创建您可以在其中组织组内的命令的菜单。
- 组。 向嵌套在下拉列表和拆分按钮中的命令组添加标题。
- 拆分按钮。 与下拉列表类似,但具有主命令。 选择拆分按钮时,将执行来自主命令的操作。 如果选择了 v 形展开图标,将不会执行主命令。 列表将展开,显示其他组、弹出项目和命令。
经典命令和现代命令之间的主要区别
经典命令(以前称为功能区)无法使用低代码进行自定义。 使用代码,命令自定义很困难、乏味且容易出错。 为了将命令扩展到低代码以及使用自定义页面来融合画布和模型驱动应用,改造和重建命令基础结构至关重要。
现代命令提供了很多新功能,并且使用起来会简单很多。
功能 | 经典 | 现代 |
---|---|---|
受模型驱动应用运行时支持 | 是 | 是,还支持 Power Fx 运行时。 |
在解决方案文件中 | 使用手动编辑 XML 或使用第三方工具进行自定义。 需要耗时的解决方案导出和导入操作。 | 命令设计器以及 Dataverse API 支持。 |
支持 Power Fx。 | No | 是的。 针对操作和可见性。 |
自定义所需时间 | 速度慢,易于出错。 | 快速 |
可靠性和性能 | 容易出错。 自定义效果不佳以及缺乏范围通常会影响应用的性能 | 内联错误处理可防止出错。 Power Fx 经过优化,具有更好的运行时性能。 |
共享 | 标准的基于 Dataverse 角色的安全性。 | 非 Power Fx 命令使用标准的基于 Dataverse 角色的安全性。 Power Fx 命令当前除了需要具有适当的安全角色外,还需要共享命令组件库。 |
解决方案和 ALM 行为 | 解决方案分层不一致且有问题,在解决方案界面中不存在。 很多标准解决方案行为不受支持,如修补程序、细分、解决方案升级、托管属性,等等。 | 多个解决方案对象类型的标准解决方案分层在 Dataverse 中集中管理。 在解决方案界面中存在。 支持所有标准解决方案行为。 |
本地化 | 非标准 | 对整个解决方案使用导出和导入翻译进行标准化。 |
数据模型 | 复杂。 针对经典功能区进行了优化,包含很多不再需要的属性。 | 简单,针对当前的模型驱动应用命令栏进行了优化。 |
使用 JavaScript | 是 | 是。 现在更简单。 注意:可对经典和现代命令使用相同的 JavaScript。 |
自定义现成可用的命令 | 是 | 迁移到现代框架后,命令即可以在命令设计器中进行编辑。 |
应用特定命令 | 否 | 是。 使用现代命令设计器可确保命令仅在所选应用中可见。 |
将在包含该表的所有应用中显示的特定于表的命令 | 是 | 是。 需要修改解决方案文件中的 appaction 定义。 |
将为指定命令栏位置的所有表和应用显示的全局命令 | 是 | 是。 需要修改解决方案文件中的 appaction 定义。 |
创建拆分按钮、弹出项目和组 | 是 | 是 |
使用代码动态填充弹出项目 | 是 | 否。 我们建议以声明方式创建命令。 |
自定义全局应用程序标题命令 | 是 | 否 |
为其他/不常见或过时的命令栏位置自定义命令 | 是 | 否 |
运行现代流或工作流 | 使用 JavaScript | 使用 JavaScript。 使用自定义页面时也支持。 |
经典与现代可见性规则比较
经典可见性规则通常对每个场景都有一个特定的规则。 使用 Power Fx 时,声明性函数将取代很多经典规则。 而且使用起来要简单得多。
请注意,现代命令很快也将支持经典可见性规则。 但是,需要对经典规则的支持才能将经典命令可靠地迁移到现代命令,不支持命令设计器中的经典规则自定义。 我们建议您继续使用 Power Fx。
用例 | 经典规则 | 经典选项 | Power Fx 可见属性 |
---|---|---|---|
基于数据值显示/隐藏 | CustomRule | 使用 JavaScript | !IsBlank(Self.Selected.Item.Email) |
基于表权限显示/隐藏 | EntityPrivilegeRule | 多个 | DataSourceInfo() |
基于记录权限显示/隐藏 | RecordPrivilegeRule | 多个 | RecordInfo() |
引用主表和相关表的控件上下文 | EntityRule | PrimaryEntity。 SelectedEntity | Self.Selected |
引用控件上下文 | EntityRule | 窗体。 HomePageGrid。 SubGridStandard。 SubGridAssociated | Self.Selected |
表元数据属性 | EntityPropertyRule | DataSourceInfo() | |
基于窗体状态显示/隐藏。 例如,为创建窗体显示 | FormStateRule | 创建。 现有。 只读。 禁用。 BulkEdit | Self.Selected.State = FormMode.New |
在网格中选择 1 个以上记录时显示 | SelectionCountRule | CountRows(Self.Selected.Items) > 1 | |
在多态查找中为相关表显示/隐藏。 例如,检查查找是用户还是团队 | CustomRule | PrimaryEntityTypeCode | IsType()、AsType |
引用环境属性(组织) | CustomRule | OrgName。 OrgLcid。 UserLcid | 目前不可用 |
常见问题解答
- 为什么我在设计器中看到的命令比在我的应用中看到的多?
- 有几个原因。 有时有可见性逻辑会在运行应用时隐藏命令。 另一些时候,这些命令在运行时通过自定义 JavaScript 动态注入并且不可配置。
- 为什么我在设计器中看到重复命令?
- 这是与经典命令一起使用的常见模式。 这两个命令都不会在运行时出现,因为它们是由可见性规则控制的。 命令设计器将显示所有命令,不管它们的可见性规则如何。