Valores y referencias de FormCalc

La ejecución general de FormCalc con EnableJavaScript implementa referencias explícitas a objetos mediante Ref(value), mientras que las declaraciones ordinarias de variables y los argumentos ordinarios de funciones copian valores de objetos

Parámetros y resultado de Ref

Un accessor hacia un objeto de formulario existente se convierte en un handle de objeto; pasar un handle existente preserva su identidad, un argumento null produce un handle null, y los demás argumentos escalares devuelven su valor escalar

Las referencias proveen propiedades y métodos ordinarios de nodos como rawValue, parent, name, resolveNode y resolveNodes

Los argumentos escalares de built-ins desreferencian los handles, las funciones agregadas consumen los valores referenciados, y los handles null retienen la semántica null de aritmética y strings; Exists devuelve 0 para un handle null

var copied = target
target = 8
other = copied

var p = Ref(target)
p = 9
var q = p
q = 10

El primer bloque preserva el valor previo de target en copied; el segundo bloque escribe target a través de dos handles que refieren al mismo objeto

Asignación y desvinculación

AsignaciónComportamiento
p = Ref(other)Reenlaza p al otro objeto
p = 5 cuando p es una referenciaEscribe 5 en el objeto referenciado y preserva el handle
p = Null() cuando p es una referenciaLimpia el valor del objeto referenciado y preserva el handle
p = Ref(Null())Desvincula p y le da a la variable un valor null
p = 5 tras la desvinculaciónEstablece la variable misma en 5

Las redeclaraciones de variables y los argumentos de funciones de usuario aplican las mismas reglas de copia o referencia; las funciones pueden recibir, devolver y calificar referencias explícitas

Igualdad e identidad

La igualdad y la desigualdad comparan la identidad estable de objetos cuando ambos operandos son referencias; los operandos ordinarios de objetos comparan sus valores, y el resultado es numérico 1 o 0

Dos campos que contienen el mismo texto se comparan iguales por valor, pero Ref(first) eq Ref(second) devuelve 0 cuando son campos distintos

Instancias repetidas y handles retenidos

Un script object puede retener un handle explícito entre eventos; el handle resuelve el nodo actual del formulario por identidad estable, de modo que reordenar un subform repetido preserva la ocurrencia seleccionada

Usar un handle después de que su ocurrencia fue eliminada lanza un error; las transacciones del runtime restauran el conteo de ocurrencias, los valores de campos y el estado de script objects cuando ese error aborta el evento

El runtime suministra automáticamente identidades estables de plantilla y datos; los llamadores directos de eventos que omiten TXFAEventBinding.Identity reciben una identidad única de índice de binding y deberían suministrar identidades estables explícitas cuando el orden de bindings cambie

Migración

La ejecución general anterior retenía objetos ordinarios de nodos en las declaraciones de variables; reemplaza var p=target por var p=Ref(target) cuando p deba seguir siendo un handle de nodo

Los resultados de igualdad del FormCalc general ahora usan 1 y 0 en lugar de texto booleano JavaScript; el código que concatenaba resultados de igualdad debe esperar la representación numérica

APIs relacionadas

Dynamic Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding y Runtime XFA interactivo