Dynamisches FormCalc Eval
Eval(source) kompiliert eine dynamisch gelieferte Berechnung mit dem nativen FormCalc-Compiler und führt sie über den allgemeinen Event-Host aus, wenn EnableJavaScript aktiviert ist
Die Quelle kann Ausdrücke, Conditionals, Schleifen, Variablendeklarationen, lokal deklarierte Funktionen und Feldmutationen enthalten; der letzte Ausdruck ist das Ergebnis, und eingebaute Namen sind 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 und Objekte
Ref- und Referenzzuweisung sind innerhalb ausgewerteter Berechnungen verfügbar, mit denselben expliziten Handle- und gewöhnlichen Value-Copy-Regeln wie das aufrufende Event
Jede ausgewertete Berechnung hat eigene Variablen und Funktionen; sie kann keine Variablen oder Funktionen lesen, die die aufrufende Berechnung deklariert hat
Das aktuelle Feld, relative Formularobjekte, $form, $host und $event bleiben verfügbar; Eval(null) liefert null, und andere skalare Argumente werden zu Quelltext
Innerhalb eines SOM-Prädikats liefert der Kandidat den aktuellen Feld- oder Subform-Kontext, und verschachteltes Eval erbt diesen Kontext
Beispielsweise schlägt var secret=9 Eval("secret+1") fehl, wenn kein Formularobjekt namens secret existiert, während Eval("var secret=2 secret+1") 3 liefert
Transaktionen und Replay
Bei einer ersten Nutzung einer Quelle wird die Ausführung angehalten, damit der native Compiler ihr JavaScript erzeugen kann; der Host stellt den Pre-Event-Skriptzustand wieder her, liefert die kompilierte Antwort und wiederholt die Berechnung
Aufgezeichnete Transport- und Locale-Antworten werden beim Retry konsumiert, sodass eine verschachtelte Kompilation keine externen Transport-Callbacks wiederholt
Nur die letzte erfolgreiche Auswertung gelangt ins Skript-Journal; Syntaxfehler, Runtime-Fehler und Budget-Fehlschläge stellen Feldwerte, Instanzzustand und Skriptzustand über die Runtime-Transaktion wieder her
Eval funktioniert auch innerhalb echter calculated-Felder und Validierungsskripte; SaveToBytes bewahrt committete Dokumentwerte
Budgets
Jedes Event erlaubt höchstens 64 unterschiedliche dynamische Quellen, acht verschachtelte Eval-Aufrufe und 2 MiB aus aggregierter dynamischer Quelle plus kompilierter Response-Bytes; diese Grenzen gelten neben den konfigurierten Limits für Skript-Input, Operationen, Speicher, Stack, Journal und verstrichene Zeit
Ein konfiguriertes Stack- oder Zeitlimit kann zuschlagen, bevor das dedizierte Nesting- oder Request-Limit greift; Kompilations-Retries teilen sich die Event-Deadline
Ein eigener JavaScript-Evaluator kann native dynamische Kompilationsanfragen nicht bedienen; nutzen Sie den mitgelieferten QuickJS-Ausführungspfad
Verwandte APIs
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc Functions und Interactive XFA Runtime