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