Dynamic FormCalc Eval
Eval(source) přeloží dynamicky dodaný výpočet nativním FormCalc překladačem a při zapnutém EnableJavaScript ho spustí přes obecného hostitele událostí
Zdroj může obsahovat výrazy, podmínky, smyčky, deklarace proměnných, lokálně deklarované funkce i mutace polí; finální výraz je výsledek a vestavěné názvy nerozlišují velikost písmen
var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")
Scope a objekty
Ref a referenční přiřazení jsou uvnitř vyhodnocovaných výpočtů dostupné, se stejnými pravidly explicitních handle i běžných kopií hodnot jako volající událost
Každý vyhodnocovaný výpočet má vlastní proměnné a funkce; nemůže číst proměnné ani funkce deklarované volajícím výpočtem
Aktuální pole, relativní form objekty, $form, $host i $event zůstávají dostupné; Eval(null) vrací null a ostatní skalární argumenty se stanou zdrojovým textem
Uvnitř SOM predikátu dodá kandidát kontext aktuálního pole či subformu a vnořený Eval ten kontext zdědí
Například var secret=9 Eval("secret+1") selže, když neexistuje form objekt pojmenovaný secret, zatímco Eval("var secret=2 secret+1") vrátí 3
Transakce a replay
První použití zdroje pozastaví provedení, aby nativní překladač mohl vyprodukovat svůj JavaScript; hostitel obnoví skriptový stav před událostí, dodá přeloženou odpověď a výpočet zopakuje
Zaznamenané transportní i locale odpovědi se konzumují během retry, takže vnořený překlad neopakuje externí transportní callbacky
Do skriptového journalu vstupuje jen finální úspěšné vyhodnocení; syntaktické chyby, runtime chyby i selhání rozpočtů obnoví hodnoty polí, stav instancí i skriptový stav přes runtime transakci
Eval funguje i uvnitř skutečných calculated polí a validačních skriptů; SaveToBytes zachová potvrzené hodnoty dokumentu
Rozpočty
Každá událost dovolí nejvýše 64 odlišných dynamických zdrojů, osm vnořených volání Eval a 2 MiB agregátních dynamických zdrojů plus bajtů přeložených odpovědí; ty meze platí vedle nakonfigurovaných limitů skriptového vstupu, operací, paměti, zásobníku, journalu i uplynulého času
Nakonfigurovaný limit zásobníku či uplynulého času může selhat dřív než vyhrazená mez zanoření či požadavků; překladové retryy sdílejí deadline události
Vlastní JavaScript evaluator nedokáže obsloužit žádosti o nativní dynamický překlad; použijte dodávanou cestu provedení QuickJS
Související API
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc Functions a Interactive XFA Runtime