# Formularios de autoservicio

## Información general

Puedes usar los Formularios de autoservicio para recopilar datos estructurados de los usuarios. Esto puede usarse para permitir que los usuarios informen incidentes o indiquen cambios, como la necesidad de una nueva configuración del puesto de trabajo en una oficina.

"Self Service Forms" es una función opcional que puede habilitarse para tu tenant mediante el soporte de RealmJoin. Si no está habilitada, aún puedes introducir/preparar formularios en la página de configuración, pero los usuarios no podrán ver/usar los formularios de autoservicio.

Usaremos un flujo de trabajo para "indicar una nueva mascota" como ejemplo.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FsHMLCDOPE9VpfxI0H3Uh%2Fimage.png?alt=media&#x26;token=ea570eab-d14a-450c-8959-dd18b3a2d50e" alt=""><figcaption><p>Ejemplo de formulario</p></figcaption></figure>

## Uso de formularios

Usando el ![](https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FEoSZwvVn9NMFPA1LgGVn%2Fimage.png?alt=media\&token=0ef42605-f332-45bc-8a1d-503b842f8c12) elemento de navegación, los usuarios pueden seleccionar un formulario para rellenar y enviar.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FPUnJnLhYCdcgI9aTfJew%2Fimage.png?alt=media&#x26;token=6455eb83-923f-4a39-b871-43d73f2d43c5" alt=""><figcaption><p>Selector de formularios</p></figcaption></figure>

Cuando un usuario rellena y envía un formulario, su contenido se enviará por correo electrónico al destinatario indicado en la definición del formulario. El correo se enviará a través de la infraestructura de RealmJoin y no procederá de las direcciones de correo de tu empresa.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FOk30wlZKDMEe3MWvzxS1%2Fimage.png?alt=media&#x26;token=c40cb2ea-113c-4b4f-9da0-ff085a808b65" alt=""><figcaption><p>Correo de ejemplo de un formulario</p></figcaption></figure>

{% hint style="info" %}
Cuando los Formularios de autoservicio están habilitados para tu tenant, todos los usuarios pueden usar/enviar formularios.
{% endhint %}

## Revisar envíos

Usando el ![](https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FzLUitkjFFMieHZaQppjS%2Fimage.png?alt=media\&token=bb07172e-904c-459d-a9a8-e73c48f18ae6) icono de navegación, puedes revisar los envíos anteriores de formularios de tus usuarios.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FhW7xAk19PilNZOMOGodf%2Fimage.png?alt=media&#x26;token=adc9d2ba-359a-4fa1-b272-996d354c6b4f" alt=""><figcaption><p>Lista de envíos</p></figcaption></figure>

Puedes buscar envíos por nombre de usuario y por nombre de formulario, pero no por los campos del envío del formulario.

Haz clic en "Ver" para ver los datos del formulario rellenado. La vista es de solo lectura.

## Página de configuración

La página de configuración de Formularios de autoservicio permite administrar formularios existentes, así como agregar, editar y eliminar formularios.

### Lista de formularios en la página de configuración

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FYfij5VCCe1WNBYeIe1Jl%2Fimage.png?alt=media&#x26;token=e6f11b7c-8a3e-42ba-aeaf-57f6b5fa8b08" alt=""><figcaption><p>Lista de formularios</p></figcaption></figure>

Usa "Nuevo formulario" o "Editar" para describir el formulario usando [Esquema JSON](https://json-schema.org/). Esto define qué campos deben introducirse y qué valores son válidos. La interfaz ofrece un editor con comprobación de sintaxis y una vista previa del formulario resultante.

El esquema se usará para crear dinámicamente un formulario para el usuario. Básicamente, usa el esquema no solo para describir los datos deseados, sino también para crear implícitamente la interfaz de usuario del formulario.

### Editor de esquema

Encima del editor hay dos campos. Usa el campo de la izquierda para darle a tu formulario un nombre descriptivo. Usa el campo de la derecha para nombrar la dirección de correo electrónico del destinatario de los datos enviados por el usuario.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FlDKKa8gI37FWDapkH2xh%2Fimage.png?alt=media&#x26;token=d13dbe12-150a-4503-ba1c-50d637962498" alt=""><figcaption><p>Ejemplo del editor de esquemas</p></figcaption></figure>

Puedes usar "Actualizar vista previa del formulario JSON" para crear una vista previa del formulario resultante debajo del editor.

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FPqMhyTDusXhcaIcafvFu%2Fimage.png?alt=media&#x26;token=f04e8882-1d3c-4bd4-a032-2af26f763e59" alt=""><figcaption><p>Vista previa del editor</p></figcaption></figure>

Después de modificar el esquema, pulsa "Enviar" para guardar tus cambios. Se mostrará un error si falla la comprobación de sintaxis.

## Esquema JSON

El uso de JSON Schema queda fuera del alcance de este documento. Puedes usar generadores de esquemas en línea (como [este](https://www.jsonschema.net/app)) para simplificar el proceso.

Para dar al menos un punto de partida, examinemos el esquema de nuestro ejemplo

```json
{
  "title": "Persona",
  "type": "object",
  "required": [
    "name",
    "date",
    "location",
    "pets"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Nombre y apellidos",
      "minLength": 4,
      "default": "- Tu nombre aquí -"
    },
    "date": {
      "type": "string",
      "format": "date",
      "options": {
        "flatpickr": {}
      }
    },
    "location": {
      "type": "object",
      "title": "Ubicación",
      "properties": {
        "city": {
          "type": "string",
          "default": "San Francisco"
        },
        "state": {
          "type": "string",
          "default": "CA"
        },
        "citystate": {
          "type": "string",
          "description": "Esto se genera automáticamente a partir de los dos campos anteriores",
          "template": "{{city}}, {{state}}",
          "watch": {
            "city": "location.city",
            "state": "location.state"
          }
        }
      }
    },
    "pets": {
      "type": "array",
      "format": "table",
      "title": "Mascotas",
      "uniqueItems": true,
      "items": {
        "type": "object",
        "title": "Mascota",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "cat",
              "dog",
              "bird",
              "reptile",
              "other"
            ],
            "default": "dog"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "default": [
        {
          "type": "dog",
          "name": "Walter"
        }
      ]
    }
  }
}
```

Todo JSON Schema consta de objetos. Todo objeto debe tener al menos un tipo y un nombre.

### Tipos

#### Objeto

Los objetos "complejos" que contienen otros subobjetos deben usar el **tipo** object. En nuestro ejemplo, el nodo raíz "Persona" del esquema es de este tipo.

Puedes definir campos obligatorios usando la palabra clave **required** . Estos campos también deben definirse en el esquema.

Usa **properties** para describir las características necesarias de cada campo; esto incluye indicar un tipo y un nombre.

#### Array

Los arrays te permiten añadir múltiples **elementos** similares **elementos** a una lista. Usa la palabra clave

#### Cadena

para describir el tipo de los elementos, etc. Solo texto sin formato. Puedes precargar esto usando la **predeterminado** palabra clave.

Para permitir solo ciertos valores, puedes usar la **enum** palabra clave.
