Dynamisk FormCalc Eval

Eval(source) kompilerer en dynamisk leveret beregning med den native FormCalc-compiler og afvikler den gennem den generelle event-host, når EnableJavaScript er aktiveret

Kilden kan indeholde udtryk, betingelser, løkker, variabeldeklarationer, lokalt deklarerede funktioner og feltmutationer; det sidste udtryk er resultatet, og indbyggede navne er 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 og objekter

Ref og reference-tildeling er tilgængelige inde i evaluerede beregninger med de samme eksplicitte handle- og almindelige værdikopi-regler som det kaldende event

hver evalueret beregning har egne variabler og funktioner; den kan ikke læse variabler eller funktioner deklareret af den kaldende beregning

Det aktuelle felt, relative formularobjekter, $form, $host og $event forbliver tilgængelige; Eval(null) returnerer null, og andre scalar-argumenter bliver til kildetekst

Inde i et SOM-prædikat leverer kandidaten den aktuelle felt- eller subform-kontekst, og nestet Eval nedarver den kontekst

For eksempel fejler var secret=9 Eval("secret+1"), når der ikke findes et formularobjekt navngivet secret, mens Eval("var secret=2 secret+1") returnerer 3

Transaktioner og replay

Første brug af en kilde suspenderer afviklingen, så den native compiler kan producere sit JavaScript; hosten gendanner pre-event script-tilstanden, leverer det kompilerede respons og retrier beregningen

Registrerede transport- og locale-responser forbruges under retry, så en nestet kompilering ikke gentager eksterne transport-callbacks

Kun den sidste succesfulde evaluering kommer i script-journalen; syntaksfejl, runtime-fejl og budgetfejl gendanner feltværdier, instance-tilstand og script-tilstand gennem runtime-transaktionen

Eval virker også inde i rigtige beregnede felter og valideringsscripts; SaveToBytes bevarer committede dokumentværdier

Budgetter

Hvert event tillader højst 64 distinkte dynamiske kilder, otte nestede Eval-kald og 2 MiB samlede dynamiske kilde plus kompileret respons-bytes; disse grænser gælder sammen med konfigurerede script input-, operations-, memory-, stack-, journal- og forløbet-tidsgrænser

En konfigureret stack- eller forløbet tidsgrænse kan fejle før den dedikerede nesting- eller anmodningsgrænse; kompilerings-retries deler event-fristen

En custom JavaScript-evaluator kan ikke servicere native dynamiske kompileringsanmodninger; brug den medfølgende QuickJS-afviklingssti

Relaterede API'er

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc Functions og Interactive XFA Runtime