Resolución de rutas SOM XFA en vivo

La ejecución general con EnableJavaScript aporta el mismo resolvedor de formularios en vivo a resolveNode/resolveNodes a nivel de nodo, a xfa.resolveNode/xfa.resolveNodes y a los accessors de FormCalc

La resolución sigue las ocurrencias repetidas actuales justo después de insertar, eliminar o mover una instancia; las transacciones de runtime exitosas persisten las escrituras de campos seleccionados hacia sus destinos de datos nativos y hacia el XDP guardado

Rutas y ocurrencias

RutaSelección
row[1].cellLa segunda fila y su celda seleccionada
row[*].cellLa celda seleccionada en cada fila
$form.main.row.cellLa primera fila y la primera celda mediante una ruta absoluta
row[-1].cellLa fila anterior a la ocurrencia inferida
row[+1].cellLa fila posterior a la ocurrencia inferida
main..cell[*]Las celdas hermanas coincidentes en la primera rama descendiente
main.*Todos los hijos directos en orden de documento
main.#field[name='target']Campos seleccionados por un predicado de propiedad de nombre
main.#subform[*].#fieldEl campo seleccionado bajo cada subform, coincidiendo nombres de clase
main.part\.nameUna ruta de resolvedor JavaScript con un punto escapado dentro del nombre de un nodo

Un índice omitido selecciona una ocurrencia; una ruta absoluta usa la ocurrencia cero, mientras que una ruta con ámbito toma prestado el índice del ancestro o contenedor correspondiente cuando las estructuras tienen hermanos repetidos

La inferencia de índices sigue los niveles de jerarquía correspondientes incluso cuando los nodos de origen y destino tienen nombres distintos; los selectores de clase toman prestado el índice de ocurrencia de la clase correspondiente

Un objetivo de ocurrencia única se selecciona sin exigir el índice de ocurrencia del llamador; una ocurrencia inferida ausente devuelve una lista vacía o null en lugar de seleccionar silenciosamente otro ámbito

Los índices relativos son desplazamientos respecto de la ocurrencia inferida sin adornar y no son válidos en rutas absolutas; las expresiones de índice de FormCalc pueden calcular una ocurrencia en runtime

Los contenedores sin nombre son transparentes para la búsqueda de hijos con nombre; la calificación por padre y las propiedades soportadas como rawValue, name, className, index, presence y access están disponibles, y las exportaciones léxicas de script objects se pueden resolver y asignar mediante rutas de FormCalc

Condiciones

const rows = xfa.resolveNodes("main.row[*].(Number(this.cell.rawValue)>15)");
const selected = xfa.resolveNodes("main.row[*].[cell ge 20].cell");

target = Sum($.resolveNodes("row.[cell ge 20].cell"))
row[1].cell = 25
var p = Ref(row[1].cell)
p = 30

Los predicados JavaScript usan .(expression) y se ejecutan con el candidato como this; los predicados FormCalc usan .[expression] y resuelven los campos relativos contra ese candidato

Un predicado selecciona hermanos coincidentes incluso cuando se omite [*]; los predicados JavaScript también resuelven nombres de campo sin calificar en el ámbito del candidato, y las rutas con predicado en código fuente FormCalc deben pasarse como strings de resolvedor entre comillas

La búsqueda de descendientes recorre en orden de documento las ramas que satisfacen los componentes restantes de la ruta; una rama sin sufijo coincidente no oculta una coincidencia completa posterior

Un índice de ocurrencia es local a su grupo de hermanos coincidentes; un índice fuera de rango termina esa búsqueda de descendientes, así que main..cell[1] no selecciona una celda de otra fila cuando la primera fila tiene una sola celda

Un comodín previo evalúa la búsqueda de descendientes de forma independiente para cada contexto seleccionado, y un comodín justo después de una raíz absoluta selecciona los hijos de la raíz

Los predicados JavaScript reciben los objetos xfa y event del evento actual; la búsqueda relativa al candidato, las excepciones de predicados y las escrituras nativas comparten la transacción envolvente

Un Eval anidado hereda el candidato del predicado, usa variables y funciones de cálculo aisladas, y comparte con el evento envolvente las respuestas de compilación nativas y el replay transaccional

Exists(missing) y un accessor hacia una ocurrencia indexada inexistente devuelven 0 a través de Exists; el uso ordinario de un objeto FormCalc sin resolver lanza un error

Presupuestos y migración

Las rutas admiten como máximo 128 componentes y 65,536 unidades de código UTF-16; los índices deben ser enteros safe, y el traversal, los predicados, la compilación dinámica y las operaciones de instancia comparten los presupuestos de ejecución del evento

Los errores del parser, las excepciones de predicados y los presupuestos excedidos abortan el evento y restauran valores nativos de campos, el orden de instancias y el estado de scripts mediante TXFAWidgetRuntime

El resolveNodes general anterior expandía los índices omitidos a través de todos los ancestros repetidos; usa main.row[*].cell[*] cuando la intención abarque cada fila y cada celda, en lugar de main.row.cell[*]

Cobertura

El resolvedor opera sobre objetos de formulario en vivo suministrados por los bindings de eventos, incluyendo fields, subforms, draws, exclusion groups, areas y script objects, el Data DOM nativo expuesto mediante $data y $record, y los nodos de propiedades declarados en la plantilla con atributos efectivos

Los strings de resolvedor soportan el escaping de nombres JavaScript; los identificadores del código fuente FormCalc conservan la gramática de identificadores del compilador

APIs relacionadas

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Dynamic Eval, Referencias de FormCalc y Runtime XFA interactivo