Valeurs et références FormCalc
L'exécution FormCalc générale avec EnableJavaScript implémente les références d'objets explicites via Ref(value), tandis que les déclarations de variables ordinaires et les arguments de fonctions ordinaires copient les valeurs d'objets
Paramètres et résultat de Ref
Un accesseur vers un objet de formulaire existant devient un handle d'objet ; passer un handle existant préserve son identité, un argument null produit un handle null, et les autres arguments scalaires retournent leur valeur scalaire
Les références fournissent les propriétés et méthodes de nœuds ordinaires comme rawValue, parent, name, resolveNode et resolveNodes
Les arguments scalaires des built-ins déréférencent les handles, les fonctions d'agrégation consomment les valeurs référencées, et les handles null conservent les sémantiques arithmétiques et de chaînes de null ; Exists retourne 0 pour un handle null
var copied = target
target = 8
other = copied
var p = Ref(target)
p = 9
var q = p
q = 10
Le premier bloc préserve la valeur précédente de target dans copied ; le second bloc écrit target à travers deux handles référant au même objet
Affectation et détachement
| Affectation | Comportement |
|---|---|
p = Ref(other) | Relie p à l'autre objet |
p = 5 quand p est une référence | Écrit 5 dans l'objet référencé et préserve le handle |
p = Null() quand p est une référence | Vide la valeur de l'objet référencé et préserve le handle |
p = Ref(Null()) | Détache p et donne à la variable une valeur null |
p = 5 après détachement | Affecte 5 à la variable elle-même |
Les redéclarations de variables et les arguments de fonctions utilisateur appliquent les mêmes règles de copie ou de référence ; les fonctions peuvent recevoir, retourner et qualifier des références explicites
Égalité et identité
L'égalité et l'inégalité comparent l'identité stable d'objets quand les deux opérandes sont des références ; les opérandes objets ordinaires comparent leurs valeurs, et le résultat est le numérique 1 ou 0
Deux champs contenant le même texte se comparent égaux par valeur, mais Ref(first) eq Ref(second) retourne 0 quand ce sont des champs différents
Instances répétées et handles conservés
Un script object peut conserver un handle explicite entre les événements ; le handle résout le nœud de formulaire courant par identité stable, si bien que réordonner un subform répété préserve l'occurrence sélectionnée
Utiliser un handle après suppression de son occurrence lève une erreur ; les transactions runtime restaurent le compte d'occurrences, les valeurs de champs et l'état des script objects quand cette erreur avorte l'événement
Le runtime fournit automatiquement des identités stables de template et de données ; les appelants d'événements directs qui omettent TXFAEventBinding.Identity reçoivent une identité d'index de binding unique et devraient fournir des identités stables explicites quand l'ordre des bindings change
Migration
L'exécution générale antérieure conservait des objets de nœuds ordinaires dans les déclarations de variables ; remplacez var p=target par var p=Ref(target) quand p doit rester un handle de nœud
Les résultats d'égalité FormCalc généraux utilisent désormais 1 et 0 au lieu du texte booléen JavaScript ; le code qui concaténait des résultats d'égalité doit s'attendre à la représentation numérique
APIs associées
Eval dynamique, HPDFXFACompileFormCalcEvent, TXFAEventBinding et Runtime XFA interactif