Eval dinâmico do FormCalc

Eval(source) compila um cálculo fornecido dinamicamente com o compilador nativo FormCalc e o executa pelo event host geral quando EnableJavaScript está habilitado

A origem pode conter expressões, condicionais, loops, declarações de variáveis, funções declaradas localmente e mutações de campos; a expressão final é o resultado, e os nomes built-in são insensíveis a maiúsculas e minúsculas

var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")

Escopo e objetos

Ref e atribuição de referências estão disponíveis dentro dos cálculos avaliados, usando as mesmas regras de handles explícitos e cópias comuns de valores do evento chamador

Cada cálculo avaliado tem suas próprias variáveis e funções; ele não consegue ler variáveis nem funções declaradas pelo cálculo chamador

O campo atual, os objetos de formulário relativos, $form, $host e $event permanecem disponíveis; Eval(null) retorna null, e outros arguments escalares viram texto de origem

Dentro de um predicado SOM, o candidato fornece o contexto atual de campo ou subform, e um Eval aninhado herda esse contexto

Por exemplo, var secret=9 Eval("secret+1") falha quando não existe objeto de formulário chamado secret, enquanto Eval("var secret=2 secret+1") retorna 3

Transações e replay

O primeiro uso de uma origem suspende a execução para que o compilador nativo produza seu JavaScript; o host restaura o estado de script pré-evento, fornece a resposta compilada e reexecuta o cálculo

Respostas registradas de transporte e locale são consumidas durante o retry, então uma compilação aninhada não repete callbacks externos de transporte

Apenas a avaliação final bem-sucedida entra no journal de scripts; erros de sintaxe, erros de runtime e falhas de orçamento restauram valores de campos, estado de instâncias e estado de script pela transação do runtime

Eval também funciona dentro de campos calculados reais e scripts de validação; SaveToBytes preserva os valores commitados do documento

Orçamentos

Cada evento permite no máximo 64 origens dinâmicas distintas, oito chamadas aninhadas de Eval e 2 MiB de origem dinâmica agregada mais bytes de respostas compiladas; esses bounds se aplicam junto dos limites configurados de entrada de scripts, operações, memória, stack, journal e tempo decorrido

Um limite configurado de stack ou tempo decorrido pode falhar antes do bound dedicado de aninhamento ou requisições; os retries de compilação compartilham o deadline do evento

Um evaluator customizado de JavaScript não consegue atender requisições nativas de compilação dinâmica; use o caminho de execução QuickJS embarcado

APIs relacionadas

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Funções FormCalc e Runtime XFA interativo