表单视图是 Azure 门户创建体验流程的 JSON 描述。 Azure 门户在运行时根据 JSON 呈现该表单;无需编写任何客户端代码。 表单视图使用 uiFormDefinition.json 格式,并由 模板规范门户表单 使用。 Azure 托管应用程序使用单独的 createUiDefinition.json 格式。
最低文件如下所示:
{
"$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#",
"view": {
"kind": "Form",
"properties": {
"title": "Create my resource",
"steps": []
},
"outputs": {
"kind": "ResourceGroup",
"resourceGroupId": "",
"location": "",
"parameters": {}
}
}
}
表单视图始终具有:
| 领域 | 必需 | 说明 |
|---|---|---|
$schema |
推荐 | 将 2021-09-09/uiFormDefinition.schema.json 模式固定用于 IntelliSense。 |
view.kind |
是的 | 必须是 "Form"。 |
view.properties.title |
是的 | 显示在表单上方的页面标题。 |
view.properties.steps |
是的 | 一个或多个步骤(标签页)。 请参阅 步骤。 |
view.outputs |
是(部署时) | 部署上下文 - 部署目标订阅、资源组、管理组或租户,以及Azure 资源管理器模板参数值。 请参阅 输出。 |
Steps
steps 是有序数组。 每个步骤都呈现为选项卡。用户在 “下一步 ”和 “上一步”之间移动。
"steps": [
{
"name": "basics",
"label": "Basics",
"description": "Provide the basic settings for the resource.",
"elements": [
{
"name": "name",
"type": "Microsoft.Common.TextBox",
"label": "Resource name",
"toolTip": "Provide a unique name.",
"constraints": {
"required": true,
"regex": "^[a-z0-9]{3,24}$",
"validationMessage": "3-24 lowercase letters or digits."
}
}
]
}
]
每个步骤都有:
| 领域 | 必需 | 说明 |
|---|---|---|
name |
是的 | 步骤 ID。 在表达式中以 steps('<name>') 的形式引用它。 |
label |
是的 | 选项卡标题。 |
description |
否 | 选项卡标题下呈现的可选说明。 |
elements |
是的 | 表单控件数组。 请参阅 窗体视图元素。 |
使用 Microsoft.Common.Section 对相关字段进行分组,而不是让一个步骤承载过多内容。 部分不能嵌套。
输出(部署上下文)
当表单视图用于部署 Azure 资源管理器 模板时(这是常见情况),view.outputs是部署上下文。 门户使用它来确定要部署的位置以及要传递给模板的参数值。 支持四个 kind 值:
kind |
必填字段 | 使用时 |
|---|---|---|
ResourceGroup |
resourceGroupId、location、parameters |
大多数资源。 部署到资源组。 |
Subscription |
subscriptionId、location、parameters |
模板的 $schema 值为 subscriptionDeploymentTemplate.json. |
ManagementGroup |
managementGroupId、location、parameters |
模板的 $schema 值为 managementGroupDeploymentTemplate.json. |
Tenant |
location、parameters |
模板的 $schema 值为 tenantDeploymentTemplate.json. |
parameters 键映射与 ARM 模板参数 1:1 对应。 值通常是读取步骤输出的表达式。
对于资源组部署,公共架构支持 Microsoft.Common.ResourceScope,而《为模板规范创建门户表单》教程会将其用于常见的订阅、资源组和位置选择流程。 下面的示例假定 basics 步骤包含一个名为 Microsoft.Common.ResourceScope 的 resourceScope 元素。 当表单包含根据部署范围推断其订阅和位置的控件(如 Microsoft.Compute.SizeSelector)时,这也是最安全的默认值。
"outputs": {
"kind": "ResourceGroup",
"resourceGroupId": "[steps('basics').resourceScope.resourceGroup.id]",
"location": "[steps('basics').resourceScope.location.name]",
"parameters": {
"keyVaultName": "[steps('basics').name]",
"location": "[steps('basics').resourceScope.location.name]",
"sku": "[steps('keyvault').sku]"
}
}
如果表单使用独立的 Microsoft.Common.SubscriptionSelector、Microsoft.Common.ResourceGroupSelector 和 Microsoft.Common.LocationSelector 元素,而不是 Microsoft.Common.ResourceScope,请确保具有作用域感知能力的控件通过其 scope 属性显式绑定到所选的订阅和位置。
Expressions
形如 "[ ... ]" 的字符串会被求值为表达式。 这些函数与 CreateUiDefinition functions 中记录的一组函数相同:
| 功能 | Returns |
|---|---|
steps('<stepName>') |
包含已命名步骤中每个控件输出的对象。 |
basics('<elementName>') |
旧版 Basics 步骤中的元素输出(仅限 CreateUiDefinition)。 |
equals、not、and、or、if、coalesce、empty |
逻辑帮助程序。 |
concat、split、substring、indexOf、toLower、toUpper、last、first |
字符串和数组帮助程序。 |
length、min、max、add、sub、mul、div |
数值辅助函数。 |
subscription()、resourceGroup()、location() |
所选范围。 |
在控件中,visible、defaultValue 以及大多数 constraints.* 字段都接受字面量或表达式。
Localization
面向用户的字符串可以内联为文本(如上面的示例所示)。
创作工具
表单视图沙盒可以从 ARM 模板生成默认表单并预览结果。 有关端到端演练,请参阅为模板规范创建门户表单。
该架构发布于
https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json。 若要在 Visual Studio Code 中启用 IntelliSense,请将架构 URL 添加为表单文件中的顶级$schema值:{ "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#", "view": { "kind": "Form" } }如果Visual Studio Code提示你信任架构域,请选择“配置受信任的域”并添加
https://schema.management.azure.com。 你也可以稍后在命令面板中通过 首选项:配置受信任的域 添加它。
后续步骤
- 表单视图元素
- 为模板规范创建门户表单
- CreateUiDefinition 函数 - 相同的函数适用于窗体视图表达式。