Eval FormCalc dynamique

Eval(source) compile un calcul fourni dynamiquement avec le compilateur FormCalc natif et l'exécute à travers le host d'événements général quand EnableJavaScript est activé

La source peut contenir des expressions, conditionnelles, boucles, déclarations de variables, fonctions déclarées localement et mutations de champs ; l'expression finale est le résultat, et les noms internes sont insensibles à la casse

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

Portée et objets

L'assignation de Ref et de référence est disponible dans les calculs évalués, avec les mêmes règles de handle explicite et de copie de valeur ordinaires que l'événement appelant

Chaque calcul évalué a ses propres variables et fonctions ; il ne peut pas lire les variables ou fonctions déclarées par le calcul appelant

Le champ courant, les objets de formulaire relatifs, $form, $host et $event restent disponibles ; Eval(null) retourne null, et les autres arguments scalaires deviennent le texte source

Dans un prédicat SOM, la candidate fournit le contexte de champ ou de subform courant, et un Eval imbriqué hérite de ce contexte

Par exemple, var secret=9 Eval("secret+1") échoue quand aucun objet de formulaire nommé secret n'existe, tandis que Eval("var secret=2 secret+1") retourne 3

Transactions et replay

Une première utilisation d'une source suspend l'exécution pour que le compilateur natif produise son JavaScript ; le host restaure l'état de script pré-événement, fournit la réponse compilée et rejoue le calcul

Les réponses de transport et de locale enregistrées sont consommées pendant le retry, de sorte qu'une compilation imbriquée ne répète pas les callbacks de transport externes

Seule l'évaluation finale réussie entre dans le journal de scripts ; les erreurs de syntaxe, erreurs d'exécution et échecs de budget restaurent les valeurs de champs, l'état d'instance et l'état de script via la transaction du runtime

Eval fonctionne aussi dans de vrais champs calculés et scripts de validation ; SaveToBytes préserve les valeurs document commités

Budgets

Chaque événement autorise au plus 64 sources dynamiques distinctes, huit appels Eval imbriqués et 2 Mio cumulés de sources dynamiques plus octets de réponse compilée ; ces bornes s'appliquent en plus des limites configurées d'entrée script, d'opérations, de mémoire, de stack, de journal et de temps écoulé

Une limite de stack ou de temps écoulé configurée peut échouer avant la borne dédiée d'imbrication ou de requêtes ; les retries de compilation partagent l'échéance de l'événement

Un évaluateur JavaScript personnalisé ne peut pas servir les requêtes de compilation dynamique natives ; utilisez le chemin d'exécution QuickJS livré

API associées

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Fonctions FormCalc et Runtime XFA interactif