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 los valores de objetos

Parámetros y resultado de Ref

Un accesor 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 proporcionan propiedades y métodos ordinarios de nodos como rawValue, parent, name, resolveNode y resolveNodes

Los argumentos escalares de built-ins desreferencian handles, las funciones agregadas consumen valores referenciados, y los handles null conservan la semántica aritmética y de cadenas de null; 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 conserva el valor previo de target en copied; el segundo bloque escribe target a través de dos handles que apuntan al mismo objeto

Asignación y desligado

AsignaciónComportamiento
p = Ref(other)Religa 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())Desliga p y da a la variable un valor null
p = 5 tras el desligadoEstablece 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 cualificar referencias explícitas

Igualdad e identidad

La igualdad y la desigualdad comparan 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 con 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 de formulario actual por identidad estable, de modo que reordenar un subform repetido preserva la ocurrencia seleccionada

Usar un handle después de eliminar su ocurrencia lanza un error; las transacciones en runtime restauran el recuento de ocurrencias, los valores de campos y el estado de script objects cuando ese error aborta el evento

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

Migración

La ejecución general anterior retenía objetos de nodo ordinarios 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 de FormCalc general usan ahora 1 y 0 en lugar de texto booleano de JavaScript; el código que concatenaba resultados de igualdad debe esperar la representación numérica

APIs relacionadas

Dynamic Eval, HPDFXFACompileFormCalcEvent, TXFAEventBinding y Interactive XFA Runtime