Expresiones
Calcula valores de campos con JavaScript, en el navegador o en el servidor
Para autores de formularios: rellena campos de forma dinámica con JavaScript, calculados en el navegador u obtenidos en el servidor.
El atributo expression de un campo de formulario te permite crear formularios dinámicos con expresiones JavaScript.
Introducción
El atributo expression está disponible en varios tipos de campo:
- campo
enum: para rellenar las opciones del desplegable de forma dinámica - campo
expression: para obtener o generar cualquier tipo de datos - campo
html: para construir su contenido HTML - campos
yamlylist: para rellenar sus datos
Las expresiones JavaScript se evalúan en el lado del servidor (por defecto) o en el lado del cliente, según la propiedad runLocal del campo. Un campo html, y los tipos de campo local, local_out y credential, siempre ejecutan su expresión en el navegador, diga lo que diga runLocal.
- En el lado del servidor (
runLocal: false, el valor por defecto): funciones predefinidas que obtienen datos de APIs, archivos y bases de datos. - En el lado del cliente (
runLocal: true): el código aprovecha todo el motor JavaScript en el sandbox del navegador para cálculos, transformaciones y manipulaciones.
Consideraciones de seguridad
Como las expresiones se evalúan con la función eval de JavaScript, la inyección de código es un riesgo potencial:
- Las expresiones del lado del servidor pasan antes por un saneador: cada llamada debe ser una función
fn.ofnc., y se rechazan las líneas múltiples,;, los template literals,process.envy las formas de escapar deeval(import,require,constructor, …). - Las expresiones del lado del cliente se evalúan en el sandbox del navegador y se pueden considerar seguras.
El grado de rigor del saneador depende de EXPRESSION_SANITIZER:
| Valor | Expresiones del lado del servidor |
|---|---|
strict (por defecto) | llamadas fn. y fnc., y métodos sobre su resultado, como fn.fnTime().format('YYYY') |
paranoid | solo llamadas directas fn. y fnc., sin métodos sobre su resultado |
off | se rechaza toda expresión del lado del servidor; solo funcionan las expresiones runLocal |
legacy | las reglas de 6.2.1, que permitían a cualquier usuario autenticado ejecutar código en el servidor; solo para una actualización, y solo en el entorno real (no desde la página de ajustes) |
Un valor vacío o desconocido equivale a strict. Un cambio se aplica a la siguiente expresión, sin reiniciar.
En esta sección
Cada tema tiene su propia página:
| Página | Qué cubre |
|---|---|
| Marcadores | Haz referencia a otro campo, una constante o el usuario con $(...) |
| Expresiones locales | JavaScript que se ejecuta en el sandbox del navegador |
| Expresiones remotas | Funciones del lado del servidor para fechas, redes, archivos, SSH y nombres numerados |
| APIs REST | Llama a APIs REST con autenticación básica, por token o personalizada |
| Credenciales | Lee una credencial almacenada |
| Ordenación | Ordena arrays con un objeto de ordenación |
| Consultas jq | Transforma datos con jq |