Dynamic FormCalc Eval

Eval(source) compileert een dynamisch aangeleverde berekening met de native FormCalc-compiler en voert die uit via de algemene event-host wanneer EnableJavaScript aan staat

De bron kan expressies, conditionals, loops, variabelendeclaraties, lokaal gedeclareerde functies en veldmutaties bevatten; de finale expressie is het resultaat, en built-in namen zijn 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 en objecten

Ref en referentietoewijzing zijn beschikbaar binnen geëvalueerde berekeningen, met dezelfde expliciete handle- en gewone waardekopie-regels als het aanroepende event

Elke geëvalueerde berekening heeft diens eigen variabelen en functies; hij kan variabelen of functies die door de aanroepende berekening zijn gedeclareerd niet lezen

Het huidige veld, relatieve formulierobjecten, $form, $host en $event blijven beschikbaar; Eval(null) geeft null terug, en andere scalar-argumenten worden brontekst

Binnen een SOM-predicate levert de candidate de huidige veld- of subform-context, en nested Eval erft die context

Zo faalt var secret=9 Eval("secret+1") wanneer er geen formulierobject genaamd secret bestaat, terwijl Eval("var secret=2 secret+1") 3 teruggeeft

Transacties en replay

Een eerste gebruik van een bron schort executie op zodat de native compiler diens JavaScript kan produceren; de host herstelt de pre-event-scriptstatus, levert de gecompileerde response aan en retryt de berekening

Geregistreerde transport- en locale-responses worden tijdens retry geconsumeerd, dus een nested compilatie herhaalt geen externe transport-callbacks

Alleen de finale geslaagde evaluatie komt in het script-journal; syntaxfouten, runtimefouten en budgetfalen herstellen veldwaarden, instance-status en scriptstatus via de runtime-transactie

Eval werkt ook in echte calculated fields en validatiescripts; SaveToBytes behoudt gecommitte documentwaarden

Budgetten

Elk event staat hoogstens 64 distincte dynamische bronnen, acht nested Eval-aanroepen en 2 MiB geaggregeerde dynamische bron plus gecompileerde response-bytes toe; deze grenzen gelden naast geconfigureerde script-invoer-, operation-, geheugen-, stack-, journal- en elapsed-time-limieten

Een geconfigureerde stack- of elapsed-time-limiet kan falen vóór de dedicated nesting- of request-grens; compilatie-retries delen de event-deadline

Een custom JavaScript-evaluator kan native dynamische compilatie-requests niet bedienen; gebruik het meegeleverde QuickJS-executiepad

Related APIs

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc Functions en Interactive XFA Runtime