Descripción general del esquema de formularios
En el catálogo de servicios, un tipo de solución compatible son las opciones de configuración de Deployment Manager. Para ayudarte a crear e implementar opciones de configuración de Deployment Manager, tenemos el esquema de formularios.
El esquema de formulario se usa para distribuir los componentes de la interfaz de usuario (IU) en un formulario HTML. Específicamente, permite a los administradores y desarrolladores de la nube proporcionar una IU para ingresar parámetros cuando se crean una instancia nueva o una implementación en la nube.
Los administradores de Cloud usan el esquema de formularios para crear formularios que les permitan a los usuarios personalizar las soluciones basadas en plantillas de Deployment Manager antes de iniciar las soluciones. Por ejemplo, los usuarios pueden seleccionar el tipo de máquina, el tamaño del disco, la zona y la cantidad de CPU que tendrá una máquina virtual. Estos formularios tienen el aspecto de los formularios que se usan en Cloud Marketplace.
En la siguiente captura de pantalla, se muestra cómo se ve un formulario de implementación:
Alternativas al esquema del formulario
El esquema de formulario es una alternativa a un método existente para crear formularios de IU, llamado metadatos en la pantalla.
En comparación con los metadatos en la pantalla, el esquema de formularios mejoró la flexibilidad y es de código abierto.
Relación con el esquema JSON
El esquema de formulario se basa en formulario de esquema de JSON, un esquema de código abierto escrito en JSON para especificar y validar un conjunto de parámetros.
El esquema de formulario hace referencia a los campos en el esquema JSON y hereda sus atributos.
Puedes incluir un esquema de formulario dentro del esquema de JSON si incluyes un array de objetos form entry
dentro del atributo form
, como se muestra en el siguiente ejemplo:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": {...} "form": [ ...Form List goes here... ] }
Cómo especificar una instancia de esquema del formulario
Puedes especificar instancias de esquema de formulario en formato YAML.
Crea un archivo de esquema que coloque los widgets de la IU en el orden en que deben aparecer en la IU. Este archivo de esquema tiene la extensión de archivo .py o .jinja, como se describe en la documentación de Deployment Manager.
Luego, agrega los archivos a un archivo ZIP de la plantilla de Deployment Manager y sube el archivo ZIP.
Cómo se ajusta el esquema del formulario en el flujo de trabajo del catálogo de servicios
Los administradores de la nube hacen uso del esquema de formularios con el catálogo de servicios de la siguiente manera:
- Crea una plantilla de Deployment Manager
- Especifica un esquema JSON para definir o validar qué campos de entrada se pueden usar en la IU para la configuración de la plantilla de Deployment Manager.
- Define en el esquema de formulario qué campos incluir para una solución en particular y el orden en el que deben aparecer esos campos. Además del orden, puedes usar el esquema del formulario a fin de proporcionar texto fácil de usar para los campos enumerados, como menús desplegables y agrupar los campos con títulos de sección.
Lista de formularios
Un array de objetos form entry
. Cada objeto representa un componente de IU en un formulario. Debes especificar campos en el orden en que quieres que aparezcan en el formulario, sin importar su ubicación en el esquema.
Ingreso de datos en formularios
Una entrada de formulario especifica la apariencia de un componente de IU en un formulario. Puede ser una string, en la que especifica la clave para un campo en el esquema de JSON o un objeto. Cuando una entrada de formulario es una string, los valores predeterminados para la apariencia se heredan de la entrada del esquema en JSON.
Cuando una entrada de formulario es un objeto, el atributo key
se refiere a la entrada del esquema en JSON. Usa un punto .
para separar los nodos de un valor anidado. Por ejemplo, usa name.first
para hacer referencia a un campo first
dentro de un objeto name
. Todos los demás campos son opcionales y, cuando se especifica, heredan un valor predeterminado del esquema de JSON.
Campos | |
---|---|
key* | String Especifica la definición de campo en el esquema JSON. |
widget | Widget Especifica el widget de la IU que se usa para este campo. Predeterminado: Se basa en la asignación del tipo de campo. |
title | String Título del campo. Hereda title del esquema. |
notitle | Boolean Determina si se ocultará el título. Valor predeterminado: false. |
description | String Se usa como una sugerencia o información sobre la herramienta para el campo. Hereda description del esquema. |
validationMessage | String Mensaje para mostrar cuando el campo no es válido. |
placeholder | String Marcador de posición para el campo. Nota: Material Design usa title como marcador de posición. |
readonly | Boolean Si el campo es de solo lectura. Hereda readonly del esquema. |
condition | String Una expresión lógica que determina si se muestra el campo. |
titleMap | Title map Proporciona etiquetas de texto para las opciones en los widgets checkboxes , radio y select . |
* bligatorio
Manejo especial para tipos
Objeto
Para el tipo object
, el campo additionalProperties
define si pueden presentarse o no propiedades adicionales. El campo puede tener un valor verdadero (permitir algo), falso (no se permiten propiedades adicionales) o algún esquema JSON que restringe las propiedades adicionales permitidas. Cuando el valor es falso o no está presente, se muestran los widgets para los campos enumerados en el atributo items
. Para otros valores (esquema verdadero o JSON), se muestra un área de cierre para ingresar un valor JSON.
Mapeo type-to-widget
Si no se especifica ningún widget en el esquema de formulario, se usa un valor predeterminado según el tipo de esquema JSON del campo, de la siguiente manera:
Tipo de esquema | Widget de formulario de esquema |
---|---|
string | texto |
número | número |
número entero | número |
boolean | Casilla de verificación |
objeto | fieldset |
string + enum | radio (3 opciones o menos) |
string + enum | selección (4 o más opciones) |
array + enum | Casillas de verificación |
array | array |
Widget
Un widget se especifica como una string que hace referencia a una de las siguientes estructuras de datos.
Matriz
Una lista en la que se pueden agregar, quitar y reordenar filas. El esquema JSON permite que la propiedad items
del tipo array
sea un esquema o una lista de esquemas. La lista no es compatible con el esquema de formularios.
Arrays con elementos primitivos
Debido a que el esquema de formularios requiere que todas las entradas de formulario tengan una clave y los arreglos que contienen elementos básicos (que no son de objeto) no tienen una clave para hacer referencia a ellas, el formulario debe hacer referencia a la entrada básica del arreglo mediante una palabra clave reservada: “x-googleProperty”.
Por ejemplo, debes definir un array de esquemas JSON que contenga strings de la siguiente manera:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'string' } } }
Entonces, se debe hacer referencia a ella en el esquema del formulario de la siguiente manera:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.x-arrayPrimitive' } ] }, ]
Arrays con elementos de objeto
Los arreglos que contienen objetos deben especificar cada clave en el tipo de elemento que se debe renderizar en el formulario.
Por ejemplo, considera un array de esquemas JSON que contiene un objeto:
{ 'exampleArray': { 'type': 'array', 'items': { 'type': 'object', 'properties': { 'someArrayItemAttribute': { 'type': 'string' } } } } }
El esquema del formulario requerido a fin de crear un arreglo de formularios con una entrada para el atributo someArrayItemAttribute
sería el siguiente:
[ { 'key': 'exampleArray', 'widget': 'array', 'items': [ { 'key': 'exampleArray.someArrayItemAttribute' } ] }, ]
Casilla de verificación
Un campo de entrada con el tipo checkbox
.
Casillas de verificación
Una lista de campos de entrada de tipo checkbox
. El campo del esquema de JSON debe ser del tipo array
y tener un atributo enum
. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Expansor
Es muy similar a una sección, pero coloca los campos dentro de un widget de panel de expansión que los usuarios pueden abrir y cerrar si hacen clic en el título.
Número
Un campo de entrada con el tipo number
. Los siguientes atributos del esquema de JSON son validadores para el campo: minimum
, maximum
, exclusiveMinimum
, exclusiveMaximum
y multipleOf
.
Contraseña
Un campo de entrada con el tipo password
.
Radio
Un campo de entrada con el tipo radio
. Usa esto para los campos que tienen una lista enum
en el esquema JSON o son de tipo booleano. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Sección
Este widget agrupa un conjunto de campos. El campo key
se ignora. Una sección tiene un atributo items
obligatorio, que es un array de objetos de entrada de formulario. Una sección puede tener los siguientes atributos opcionales: title
, description
, condition
.
Seleccionar
Un campo de entrada select
. Usa esto para los campos que tienen una lista enum
en el esquema JSON o son de tipo booleano. Para proporcionar etiquetas a las opciones, puedes especificar un titleMap.
Texto
Un widget de entrada con el tipo text
. Si el esquema JSON contiene un atributo pattern
, el patrón se usa como validador de regex.
Textarea
Un widget de entrada de área de texto. Este widget se muestra en algunas situaciones para ingresar directamente JSON. Consulta el objeto.
Title map
Se puede especificar el atributo titleMap
para los widgets de tipo checkboxes
, radio
y select
. Se ignora en otros widgets.
El atributo es un array de objetos que contienen dos atributos, value
y name
. El atributo value
es una referencia a un valor de enumeración para el campo.
El atributo name
es texto que se usa como etiqueta para la opción correspondiente en el widget de la IU. Cuando el widget es radio
o checkboxes
, se agrega un campo description
opcional como subtexto para ese botón de selección o casilla de verificación.
Si no se proporciona un titleMap
, en su lugar se usan los valores de enumeración.
Características no compatibles
Las siguientes funciones actualmente no se admiten en el esquema de formularios:
- Opciones globales
- Mensajes de validación complejos (solo se admite un mensaje)
- Interpolación de mensajes de validación
- Funciones de mensajes de validación
- Validación personalizada
- Estos widgets no son compatibles:
actions
,fieldset
,radios-inline
,radiobuttons
,help
,template
,tab
ytabarray
- No se admiten estas opciones:
onChange
,feedback
,disabledSuccessState
,disabledErrorState
,ngModelOptions
,htmlClass
,fieldHtmlClass
ylabelHtmlClass
.copyValueTo
,destroyStrategy
- Función posterior al proceso
- Eventos
- Inserción manual de campos