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