Resolución de rutas SOM XFA en vivo
La ejecución general con EnableJavaScript aporta el mismo resolvedor de formularios en vivo al resolveNode/resolveNodes a nivel de nodo, a xfa.resolveNode/xfa.resolveNodes y a los accesores de FormCalc
La resolución sigue las ocurrencias repetidas actuales justo después de insertar, eliminar o mover una instancia; las transacciones correctas en tiempo de ejecución persisten las escrituras de campos seleccionadas en sus destinos de datos nativos y en 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 todas las filas |
$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 con una sola ocurrencia se selecciona sin exigir el índice de ocurrencia del llamador; una ocurrencia inferida inexistente devuelve una lista vacía o null en lugar de seleccionar silenciosamente otro ámbito
Los índices relativos son desplazamientos desde la ocurrencia inferida sin adornar y no son válidos en rutas absolutas; las expresiones de índice de FormCalc pueden calcular una ocurrencia en tiempo de ejecución
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 pueden resolverse y asignarse 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 los hermanos coincidentes incluso cuando se omite [*]; los predicados JavaScript también resuelven nombres de campo sin cualificar en el ámbito del candidato, y las rutas con predicado en código fuente FormCalc deben pasarse como cadenas de resolvedor entre comillas
La búsqueda de descendientes recorre en orden de documento una rama que satisfaga 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, de modo que main..cell[1] no selecciona una celda de otra fila cuando la primera fila tiene una sola celda
Un comodín precedente evalúa la búsqueda de descendientes de forma independiente para cada contexto seleccionado, y un comodín situado 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 predicado y las escrituras nativas comparten la transacción contenedora
Un Eval anidado hereda el candidato del predicado, usa variables y funciones de cálculo aisladas y comparte las respuestas de compilación nativas y la repetición transaccional con el evento contenedor
Exists(missing) y un accesor 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 seguros, y el recorrido, los predicados, la compilación dinámica y las operaciones de instancias comparten los presupuestos de ejecución del evento
Los errores del parser, las excepciones de predicado y los presupuestos agotados abortan el evento y restauran los valores nativos de campos, el orden de instancias y el estado de scripts mediante TXFAWidgetRuntime
Los resolveNodes generales anteriores expandían los índices omitidos por 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 enlaces de eventos, incluyendo campos, subforms, draws, exclusion groups, áreas y script objects, el Data DOM nativo expuesto mediante $data y $record, y los nodos de propiedades de plantilla declarados con sus atributos efectivos
El escapado de nombres JavaScript está soportado en las cadenas de resolvedor; los identificadores del código fuente FormCalc conservan la gramática de identificadores del compilador
APIs relacionadas
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Dynamic Eval, FormCalc References y Interactive XFA Runtime