Resolução viva de paths SOM do XFA

A execução geral com EnableJavaScript fornece o mesmo resolver vivo de formulários ao resolveNode/resolveNodes de nível de nós, ao xfa.resolveNode/xfa.resolveNodes e aos accessors FormCalc

A resolução segue as ocorrências repetidas atuais imediatamente após inserção, remoção ou movimentação de instâncias; transações de runtime bem-sucedidas persistem as escritas selecionadas de campos nos alvos nativos de dados delas e no XDP salvo

Paths e ocorrências

PathSeleção
row[1].cellA segunda linha e a célula selecionada dela
row[*].cellA célula selecionada em toda linha
$form.main.row.cellA primeira linha e primeira célula através de um path absoluto
row[-1].cellA linha que precede a ocorrência inferida
row[+1].cellA linha que sucede a ocorrência inferida
main..cell[*]Células irmãs correspondentes no primeiro ramo descendente
main.*Todos os filhos diretos na ordem do documento
main.#field[name='target']Campos selecionados por um predicado de propriedade de nomeação
main.#subform[*].#fieldO campo selecionado sob cada subform, comparando nomes de classes
main.part\.nameUm path de resolver JavaScript contendo um ponto escapado num nome de nó

Um índice omitido seleciona uma ocorrência; um path absoluto usa a ocorrência zero, enquanto um path com escopo empresta o índice correspondente de ancestral ou container quando as estruturas têm irmãos repetidos

A inferência de índices segue os levels correspondentes de hierarquia mesmo quando os nós de origem e destino têm nomes diferentes; selectors de classes emprestam o índice correspondente de ocorrências de classes

Um alvo de ocorrência única é selecionado sem exigir o índice de ocorrência do chamador; uma ocorrência inferida ausente retorna uma lista vazia ou null em vez de selecionar silenciosamente outro escopo

Índices relativos são offsets da ocorrência inferida sem adornos e são inválidos em paths absolutos; expressões FormCalc de índices podem computar uma ocorrência em runtime

Containers sem nome são transparentes ao lookup de filhos nomeados; a qualificação de pais e as propriedades suportadas como rawValue, name, className, index, presence e access estão disponíveis, e exports lexiais de objetos de scripts podem ser resolvidos e atribuídos por paths FormCalc

Condições

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

Predicados JavaScript usam .(expressão) e executam com o candidato como this; predicados FormCalc usam .[expressão] e resolvem campos relativos contra aquele candidato

Um predicado seleciona irmãos correspondentes mesmo quando [*] é omitido; predicados JavaScript também resolvem nomes de campos bare no escopo do candidato, e paths de predicados na origem FormCalc precisam ser passados como strings de resolver entre aspas

O lookup de descendentes busca em ordem de documento um ramo que satisfaça os componentes restantes do path; um ramo sem sufixo correspondente não esconde um match completo posterior

Um índice de ocorrências é local ao seu grupo correspondente de irmãos; um índice fora da faixa termina aquela busca de descendentes, então main..cell[1] não seleciona uma célula em outra linha quando a primeira linha tem apenas uma célula

Um wildcard precedente avalia o lookup de descendentes de forma independente para cada contexto selecionado, e um wildcard diretamente depois de uma raiz absoluta seleciona os filhos da raiz

Predicados JavaScript recebem os objetos xfa e event do evento atual; lookup relativo ao candidato, exceções de predicados e escritas nativas compartilham a transação envolvente

Eval aninhado herda o candidato do predicado, usa variáveis e funções isoladas de cálculo, e compartilha respostas nativas de compilação e replay transacional com o evento envolvente

Exists(missing) e um accessor a uma ocorrência indexada inexistente retornam 0 através de Exists; o uso comum de um objeto FormCalc não resolvido dispara um erro

Orçamentos e migração

Paths permitem no máximo 128 componentes e 65.536 code units UTF-16; índices precisam ser inteiros seguros, e traversal, predicados, compilação dinâmica e operações de instâncias compartilham os orçamentos de execução de eventos

Erros de parser, exceções de predicados e orçamentos excedidos abortam o evento e restauram os valores nativos de campos, a ordem de instâncias e o estado de scripts através do TXFAWidgetRuntime

resolveNodes gerais anteriores expandiam índices omitidos por todos os ancestrais repetidos; use main.row[*].cell[*] quando toda linha e toda célula são pretendidas, substituindo main.row.cell[*]

Cobertura

O resolver opera sobre objetos vivos de formulários fornecidos pelos bindings de eventos, incluindo campos, subforms, draws, exclusion groups, areas e objetos de scripts, o Data DOM nativo exposto por $data e $record, e os nós declarados de propriedades de template com atributos efetivos

O escape de nomes JavaScript é suportado por strings de resolvers; identificadores de origem FormCalc retêm a gramática de identificadores do compilador

APIs relacionadas

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Eval dinâmico, Referências FormCalc e Runtime XFA interativo