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