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
| Ruta | Selección |
|---|---|
row[1].cell | La segunda fila y su celda seleccionada |
row[*].cell | La celda seleccionada en cada fila |
$form.main.row.cell | La primera fila y la primera celda mediante una ruta absoluta |
row[-1].cell | La fila anterior a la ocurrencia inferida |
row[+1].cell | La 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[*].#field | El campo seleccionado bajo cada subform, coincidiendo nombres de clase |
main.part\.name | Una 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