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