使用 YAML
解压缩应用后,可以使用 YAML 的子集在文本文件中存储提取的公式。 YAML 是用户友好的数据序列化语言。 目标是简化读取和写入源的流程,并确定版本之间的差异。 此外,如果遵循已采用的 Microsoft Power Fx YAML 公式惯例,则可使用任何文本编辑器编辑这些文件。
此处的标签控件表示为 YAML:
LblAppName1 As label:
Fill: =RGBA(58, 58, 58, 0)
Height: =88
Size: =27
Text: ="Companies"
Width: =Parent.Width - Self.X - IconSortUpDown1.Width - IconNewItem1.Width - IconRefresh1.Width
Wrap: =false
X: =20
ZIndex: =2
YAML 使用键/值对表示数据,并且它支持嵌套对。 例如,诸如 lblAppName1 的项可以具有 Fill、Height 和 Size 等缩进的键/值对。 YAML 使用缩进来确定缩进的结构和空格,但它不允许制表符。
YAML 嵌入 Power fx 公式的三个独特方面:
As 关键字定义控件类型。 您可以定义标签控件,例如在上一个示例中使用的是 lblAppName1 as Label: 表达式。 通常,当您提供属性值时,YAML 的冒号 (:) 左侧只有一个名称。 但是,YAML 规范中没有任何内容会排除更复杂的左侧表达式,并且 Power Fx YAML 语法利用本省略来为属性命名并提供其类型。
所有公式都以等号开头。 Microsoft Excel 与此类似,等号 (=) 引入公式而不是静态值。 无需在 Power Apps Studio 中键入开头的等号 (=),但如果加以注意,会发现它始终位于公式栏中。 此外,开头的等号 (=) 符号可帮助避免 YAML 对静态值执行的正常数据类型解释,而静态值不适用于公式。
某些公式必须用 YAML 多行语法表示。 如果有包含嵌入了 # 的字符串的公式,则 YAML 将其解释为注释的开始;因此,它将截断该行的其余部分。 为了避免发生此情况,请确保使用 YAML 的多行语法来表达公式;最常见的是使用 | 语法。
有关详细信息,请参阅 Microsoft Power Fx YAML 公式语法。
文件夹结构
当解压缩画布应用时,查看如何创建一组文件和文件夹。 运行解包流程后,您将找到以下密钥文件和文件夹:
\src - 控件和组件文件。 本文件包含源。
*.fx.yaml - 从 control.json 文件中提取的公式。 本位置是可以编辑公式的位置。
CanvasManifest.json - 包含标头、属性和 publishInfo 中的常规内容的清单文件。
*.json - 原始 control.json 文件。
\EditorState*.editorstate.json - 缓存 Power Apps Studio 要使用的信息。
\DataSources - 应用使用的所有数据源。
\Connections - 连接实例,这些实例已与本应用一起保存,并在重新加载到 Power Apps Studio 时使用。
\Assets - 嵌入在应用中的媒体文件。
\pkgs - 已下载的外部引用副本,例如模板、API 定义文件和组件库。 这些文件与 nuget/npm 引用相似。
\other - 重新创建 .msapp 文件所需的所有其他文件。
entropy.json - 将波动元素(如时间戳)提取到本文件。 本文件有助于减少其他文件中的噪音差异,同时确保您仍可以往返。 保留 .msapp 文件中的其他文件,例如引用中的内容。
文件格式
以 *.fx.yaml 结尾的文件包含可编辑的公式。 在浏览提取的文件时,您会发现并非所有文件都包含 YAML;很多都采用原生格式,不能在 Power Apps Studio 之外进行编辑。
合并源更改
通过解包启用的一个应用场景是,多人编辑应用并合并源代码管理中的更改的功能。 在本应用场景中,您将想最小化冲突。 例如,在同一控件上编辑公式可能会导致冲突,但两个人编辑不同屏幕的应用场景不太可能发生冲突。
如果在云中创建应用,下载该应用,然后对其进行编辑,请知道,在上传重新打包的版本时,它将覆盖对云版本所做的任何更改。
为了避免因为您之前下载了应用而覆盖和丢失联机完成的任何工作,应再次从云中下载应用并进行解包,提交文件更改,解决冲突,然后重新打包并上传新应用。 请确保源代码管理包含应用的主副本。
同样,当多人同时进行编辑时,可能会发生冲突。 例如,如果两个人在不同的屏幕上选择了相同的控件名称,则会产生合并冲突。 有关详细信息,请参阅 Microsoft Power Platform CLI 文档。