Eval dinámico de FormCalc
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, loops, declaraciones de variables, funciones declaradas localmente y mutaciones de campos; la expresión final es el resultado, y los nombres built-in 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 reference está disponible dentro de los cálculos evaluados, usando las mismas reglas de handle explícito y copia de valores ordinaria que el evento llamador
Cada cálculo evaluado tiene sus propias variables y funciones; no puede leer variables ni funciones declaradas por el cálculo llamador
El campo actual, los objetos de formulario relativos, $form, $host y $event siguen disponibles; Eval(null) devuelve null, y los demás argumentos escalares se convierten en texto source
Dentro de un predicado SOM, el candidato aporta el contexto de campo o subform actual, y el 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 de script previo al evento, suministra la respuesta compilada y reintenta el cálculo
Las respuestas de transporte y de locale grabadas se consumen durante el retry, de modo que una compilación anidada no repite los callbacks de transporte externos
Solo la evaluación final exitosa entra en el script journal; los errores de sintaxis, los runtime errors y los fallos de presupuesto restauran valores de campos, estado de instancia y estado de script 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 comprometidos del documento
Presupuestos
Cada evento permite 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 aplican junto a los límites configurados de entrada de script, operación, memoria, stack, journal y tiempo transcurrido
Un límite configurado de stack o de tiempo transcurrido puede fallar antes del límite dedicado de anidamiento o de solicitudes; los reintentos de compilación comparten el deadline del evento
Un evaluador JavaScript personalizado no puede atender las solicitudes de compilación dinámica nativa; usa el path de ejecución QuickJS incluido
APIs relacionadas
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Funciones FormCalc y Runtime XFA interactivo