Eval de FormCalc dinámico
Eval(source) compila un cálculo suministrado dinámicamente con el compilador FormCalc nativo y lo ejecuta a través del host de eventos general cuando EnableJavaScript está activado
El source puede contener expresiones, condicionales, bucles, declaraciones de variables, funciones declaradas localmente y mutaciones de campos; la expresión final es el resultado, y los nombres integrados no distinguen mayúsculas
var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")
Scope y objetos
La asignación de Ref y referencias está disponible dentro de los cálculos evaluados, usando las mismas reglas de handle explícito y de copia de valor ordinaria que el evento llamante
Cada cálculo evaluado tiene sus propias variables y funciones; no puede leer variables ni funciones declaradas por el cálculo llamante
El campo actual, los objetos de formulario relativos, $form, $host y $event siguen disponibles; Eval(null) devuelve null, y otros argumentos escalares se convierten en texto source
Dentro de un predicado SOM, el candidato aporta el contexto del campo o subform actual, y un Eval anidado hereda ese contexto
Por ejemplo, var secret=9 Eval("secret+1") falla cuando no hay ningún objeto de formulario llamado secret, mientras que Eval("var secret=2 secret+1") devuelve 3
Transacciones y replay
El primer uso de un source suspende la ejecución para que el compilador nativo produzca su JavaScript; el host restaura el estado del script previo al evento, suministra la respuesta compilada y reintenta el cálculo
Las respuestas de transporte y locale grabadas se consumen durante el reintento, así una compilación anidada no repite callbacks de transporte externos
Solo la evaluación final con éxito entra en el journal de scripts; los errores de sintaxis, de runtime y de presupuesto restauran valores de campos, estado de instancias y estado de scripts a través de la transacción del runtime
Eval también funciona dentro de campos calculados reales y scripts de validación; SaveToBytes preserva los valores confirmados del documento
Presupuestos
Cada evento admite como máximo 64 sources dinámicos distintos, ocho llamadas Eval anidadas y 2 MiB de source dinámico agregado más bytes de respuesta compilada; estos límites se aplican junto a los límites configurados de entrada de scripts, operación, memoria, stack, journal y tiempo transcurrido
Un límite configurado de stack o de tiempo puede fallar antes del límite dedicado de anidación o de peticiones; los reintentos de compilación comparten la deadline del evento
Un evaluador JavaScript personalizado no puede atender las peticiones de compilación dinámica nativa; usa la ruta de ejecución QuickJS incluida
APIs relacionadas
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Funciones FormCalc y Runtime XFA interactivo