Expressões
Calcular valores de campos com JavaScript, no navegador ou no servidor
Para autores de formulários: preencha campos de forma dinâmica com JavaScript, calculados no navegador ou obtidos no servidor.
O atributo expression de um campo de formulário permite criar formulários dinâmicos com expressões JavaScript.
Introdução
O atributo expression está disponível em vários tipos de campo:
- campo
enum- para preencher as opções da lista pendente de forma dinâmica - campo
expression- para obter ou gerar qualquer tipo de dados - campo
html- para construir o seu conteúdo HTML - campos
yamlelist- para preencher os seus dados
As expressões JavaScript são avaliadas no lado do servidor (predefinição) ou no lado do cliente, conforme a propriedade do campo runLocal. Um campo html, e os tipos de campo local, local_out e credential, executam sempre a sua expressão no navegador, independentemente do que diga runLocal.
- No lado do servidor (
runLocal: false, a predefinição) - funções predefinidas que obtêm dados de APIs, ficheiros e bases de dados. - No lado do cliente (
runLocal: true) - O código tira partido de todo o motor JavaScript na sandbox do navegador para cálculos, transformações e manipulações.
Questões de segurança
Como as expressões são avaliadas com a função JavaScript eval, a injeção de código é uma preocupação a ter em conta:
- As expressões do lado do servidor passam primeiro por um sanitizador: cada chamada tem de ser uma função
fn.oufnc., e são recusadas as várias linhas,;, os template literals,process.enve as formas de escapar deeval(import,require,constructor, …). - As expressões do lado do cliente são avaliadas na sandbox do navegador e podem ser consideradas seguras.
O rigor do sanitizador depende de EXPRESSION_SANITIZER:
| Valor | Expressões do lado do servidor |
|---|---|
strict (predefinição) | chamadas fn. e fnc., e métodos sobre o seu resultado, como fn.fnTime().format('YYYY') |
paranoid | só chamadas diretas fn. e fnc., sem métodos sobre o seu resultado |
off | todas as expressões do lado do servidor são recusadas; só funcionam as expressões runLocal |
legacy | as regras da 6.2.1, que permitiam a qualquer utilizador autenticado executar código no servidor; só para uma atualização, e só no ambiente real (não a partir da página de definições) |
Um valor vazio ou desconhecido equivale a strict. Uma alteração aplica-se à expressão seguinte, sem reiniciar.
Nesta secção
Cada tema tem a sua própria página:
| Página | O que abrange |
|---|---|
| Marcadores | Referir outro campo, uma constante ou o utilizador com $(...) |
| Expressões locais | JavaScript que é executado na sandbox do navegador |
| Expressões remotas | Funções do lado do servidor para datas, redes, ficheiros, SSH e nomes numerados |
| APIs REST | Chamar APIs REST com autenticação básica, por token ou personalizada |
| Credenciais | Ler uma credencial guardada |
| Ordenação | Ordenar arrays com um objeto de ordenação |
| Consultas jq | Remodelar dados com jq |