Dynamic FormCalc Eval

Eval(source) kompilerar en dynamiskt tillhandahållen beräkning med den nativa FormCalc-kompilatorn och exekverar den genom den generella händelsevärden när EnableJavaScript är aktiverat

Källan kan innehålla uttryck, villkor, loopar, variabeldeklarationer, lokalt deklarerade funktioner och fältmutationer; det slutliga uttrycket är resultatet, och inbyggda namn är skiftlägesokänsliga

var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")

Scope och objekt

Ref- och referenstilldelning finns tillgängliga inuti utvärderade beräkningar, med samma explicita handle och ordinära värdekopieringsregler som den anropande händelsen

Varje utvärderad beräkning har egna variabler och funktioner; den kan inte läsa variabler eller funktioner deklarerade av den anropande beräkningen

Aktuellt fält, relativa formulärobjekt, $form, $host och $event förblir tillgängliga; Eval(null) returnerar null, och andra skalära argument blir källtext

Inuti en SOM-predikattillhandahåller kandidaten aktuell fält- eller subformulärkontext, och kapslad Eval ärver den kontexten

Till exempel misslyckas var secret=9 Eval("secret+1") när det inte finns något formulärobjekt namngivet secret, medan Eval("var secret=2 secret+1") returnerar 3

Transaktioner och uppspelning

Ett första bruk av en källa suspenderar exekveringen så att den nativa kompilatorn kan producera sin JavaScript; värden återställer pre-händelse skripttillstånd, tillhandahåller det kompilerade svaret och försöker beräkningen igen

Inspirerade transport- och localesvar konsumeras under försöket, så en kapslad kompilering upprepar inte externa transportåteranrop

Endast den slutliga lyckade utvärderingen går in i skriptjournalen; syntaxfel, körtidsfel och budgetfel återställer fältvärden, instanstillstånd och skripttillstånd genom körtidstransaktionen

Eval fungerar också inuti faktiska beräknade fält och valideringsskript; SaveToBytes bevarar sparade dokumentvärden

Budgetar

Varje händelse tillåter högst 64 distinkta dynamiska källor, åtta kapslade Eval-anrop och 2 MiB samlad dynamisk källa plus kompilerad svarsbyte; dessa gränser gäller jämte konfigurerade skriptindata-, operation-, minnes-, stack-, journal- och förloppstidsgränser

En konfigurerad stack- eller förloppstidsgräns kan misslyckas före den dedikerade kapslings- eller förfrågningsgränsen; kompileringsförsök delar händelsetidsgränsen

En anpassad JavaScript-utvärderare kan inte betjäna nativa dynamiska kompileringsförfrågningar; använd den medföljande QuickJS-exekveringsvägen

Relaterade API:er

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc-funktioner och Interaktiv XFA-körtid