Eval FormCalc dinamico
Eval(source) compila un calcolo fornito dinamicamente con il compilatore FormCalc nativo e lo esegue tramite l'host eventi generale quando EnableJavaScript è abilitato
La sorgente può contenere espressioni, condizionali, loop, dichiarazioni di variabili, funzioni dichiarate localmente e mutazioni di campi; l'espressione finale è il risultato e i nomi built-in sono case insensitive
var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")
Scope e oggetti
Assegnazione di ref e reference sono disponibili dentro i calcoli valutati, con le stesse regole di handle esplicito e copia di valore ordinarie dell'evento chiamante
Ogni calcolo valutato ha le sue variabili e funzioni; non può leggere variabili o funzioni dichiarate dal calcolo chiamante
Il campo corrente, gli oggetti modulo relativi, $form, $host e $event restano disponibili; Eval(null) restituisce null e gli altri argomenti scalari diventano testo sorgente
Dentro un predicato SOM, il candidato fornisce il context di campo corrente o subform e l'Eval annidato eredita quel context
Per esempio, var secret=9 Eval("secret+1") fallisce quando non c'è alcun oggetto modulo chiamato secret, mentre Eval("var secret=2 secret+1") restituisce 3
Transazioni e replay
Il primo uso di una sorgente sospende l'esecuzione così il compilatore nativo può produrre il suo JavaScript; l'host ripristina lo stato script pre-evento, fornisce la risposta compilata e riprova il calcolo
Le risposte transport e locale registrate vengono consumate durante il retry, così una compilazione annidata non ripete callback transport esterne
Solo la valutazione finale riuscita entra nel journal degli script; errori di sintassi, errori runtime e fallimenti di budget ripristinano valori dei campi, stato delle istanze e stato script tramite la transazione runtime
Eval funziona anche dentro veri campi calcolati e script di validazione; SaveToBytes preserva i valori committati del documento
Budget
Ogni evento consente al massimo 64 sorgenti dinamiche distinte, otto chiamate Eval annidate e 2 MiB di sorgente dinamica aggregata più byte di risposta compilata; questi limiti si applicano insieme ai limiti configurati di input script, operazioni, memoria, stack, journal e tempo trascorso
Un limite configurato di stack o tempo trascorso può fallire prima del limite dedicato di annidamento o richieste; i retry di compilazione condividono il deadline dell'evento
Un evaluator JavaScript personalizzato non può servire richieste di compilazione dinamica nativa; usa il percorso di esecuzione QuickJS fornito
API correlate
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Funzioni FormCalc e Runtime XFA interattivo