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