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