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