表单视图概述 (uiFormDefinition)

表单视图是 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 resourceGroupIdlocationparameters 大多数资源。 部署到资源组。
Subscription subscriptionIdlocationparameters 模板的 $schema 值为 subscriptionDeploymentTemplate.json.
ManagementGroup managementGroupIdlocationparameters 模板的 $schema 值为 managementGroupDeploymentTemplate.json.
Tenant locationparameters 模板的 $schema 值为 tenantDeploymentTemplate.json.

parameters 键映射与 ARM 模板参数 1:1 对应。 值通常是读取步骤输出的表达式。

对于资源组部署,公共架构支持 Microsoft.Common.ResourceScope,而《为模板规范创建门户表单》教程会将其用于常见的订阅、资源组和位置选择流程。 下面的示例假定 basics 步骤包含一个名为 Microsoft.Common.ResourceScoperesourceScope 元素。 当表单包含根据部署范围推断其订阅和位置的控件(如 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.SubscriptionSelectorMicrosoft.Common.ResourceGroupSelectorMicrosoft.Common.LocationSelector 元素,而不是 Microsoft.Common.ResourceScope,请确保具有作用域感知能力的控件通过其 scope 属性显式绑定到所选的订阅和位置。

Expressions

形如 "[ ... ]" 的字符串会被求值为表达式。 这些函数与 CreateUiDefinition functions 中记录的一组函数相同:

功能 Returns
steps('<stepName>') 包含已命名步骤中每个控件输出的对象。
basics('<elementName>') 旧版 Basics 步骤中的元素输出(仅限 CreateUiDefinition)。
equalsnotandorifcoalesceempty 逻辑帮助程序。
concatsplitsubstringindexOftoLowertoUpperlastfirst 字符串和数组帮助程序。
lengthminmaxaddsubmuldiv 数值辅助函数。
subscription()resourceGroup()location() 所选范围。

在控件中,visibledefaultValue 以及大多数 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。 你也可以稍后在命令面板中通过 首选项:配置受信任的域 添加它。

后续步骤