Eval dinâmico de FormCalc
Eval(source) compila um cálculo fornecido dinamicamente com o compilador nativo FormCalc e executa-o através do host geral de eventos quando EnableJavaScript está ativo
A fonte pode conter expressões, condicionais, ciclos, declarações de variáveis, funções declaradas localmente e mutações de campos; a expressão final é o resultado, e nomes incorporados 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")
Âmbito e objetos
Ref e atribuição de referências estão disponíveis dentro de cálculos avaliados, usando as mesmas regras de handles explícitos e de cópias ordinárias de valores que o evento chamador
Cada cálculo avaliado tem as variáveis e funções próprias dele; ele não pode ler variáveis nem funções declaradas pelo cálculo chamador
O campo atual, objetos relativos de formulários, $form, $host e $event permanecem disponíveis; Eval(null) devolve null, e outros argumentos escalares tornam-se texto fonte
Dentro de um predicado SOM, o candidato fornece o contexto atual de campos ou de subforms, e Eval aninhado herda esse contexto
Por exemplo, var secret=9 Eval("secret+1") falha quando não há objeto de formulários chamado secret, enquanto Eval("var secret=2 secret+1") devolve 3
Transações e replay
Um primeiro uso de uma fonte suspende a execução para que o compilador nativo produza o JavaScript dele; o host restaura o estado pré-evento de scripts, fornece a resposta compilada e repete o cálculo
Respostas registadas de transports e de locales são consumidas durante a repetição, pelo que uma compilação aninhada não repete callbacks externos de transports
Apenas a avaliação final bem-sucedida entra no journal de scripts; erros de sintaxe, erros de runtime e falhas de orçamentos restauram valores de campos, estado de instâncias e estado de scripts através da transação do runtime
Eval também funciona dentro de campos calculados reais e scripts de validação; SaveToBytes preserva valores confirmados de documentos
Orçamentos
Cada evento permite no máximo 64 fontes dinâmicas distintas, oito chamadas aninhadas de Eval e 2 MiB de bytes agregados de fontes dinâmicas mais respostas compiladas; estes bounds aplicam-se ao lado dos limites configurados de entradas de scripts, operações, memória, stack, journal e tempo decorrido
Um limite configurado de stack ou de tempo decorrido pode falhar antes do bound dedicado de aninhamentos ou de pedidos; retries de compilação partilham o prazo do evento
Um avaliador personalizado de JavaScript não pode servir pedidos nativos de compilação dinâmica; use o caminho de execução QuickJS distribuído
APIs relacionadas
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Funções FormCalc e Runtime XFA interativo