Risoluzione live dei percorsi SOM XFA
L'esecuzione generale con EnableJavaScript fornisce lo stesso resolver form live ai resolveNode/resolveNodes a livello nodo, agli xfa.resolveNode/xfa.resolveNodes e agli accessor FormCalc
La risoluzione segue le occorrenze ripetute correnti immediatamente dopo inserimento, rimozione o spostamento di istanze; le transazioni runtime riuscite persistono le scritture dei campi selezionati nei loro target dati nativi e nell'XDP salvato
Percorsi e occorrenze
| Percorso | Selezione |
|---|---|
row[1].cell | La seconda riga e la sua cella selezionata |
row[*].cell | La cella selezionata in ogni riga |
$form.main.row.cell | La prima riga e la prima cella attraverso un percorso assoluto |
row[-1].cell | La riga che precede l'occorrenza inferita |
row[+1].cell | La riga che segue l'occorrenza inferita |
main..cell[*] | Celle sibling corrispondenti nel primo ramo discendente |
main.* | Tutti i figli diretti in ordine di documento |
main.#field[name='target'] | Campi selezionati da un predicato di proprietà di denominazione |
main.#subform[*].#field | Il campo selezionato sotto ogni subform, corrispondendo ai nomi di classe |
main.part\.name | Un percorso resolver JavaScript contenente un punto con escape in un nome di nodo |
Un indice omesso seleziona una occorrenza; un percorso assoluto usa l'occorrenza zero, mentre un percorso con scope prende in prestito l'indice corrispondente dell'antenato o contenitore quando le strutture hanno sibling ripetuti
L'inferenza degli indici segue i livelli di gerarchia corrispondenti anche quando i nodi sorgente e destinazione hanno nomi diversi; i selettori di classe prendono in prestito l'indice di occorrenza della classe corrispondente
Un target a occorrenza singola viene selezionato senza richiedere l'indice di occorrenza del chiamante; un'occorrenza inferita mancante restituisce una lista vuota o null invece di selezionare silenziosamente un altro scope
Gli indici relativi sono offset dall'occorrenza inferita non decorata e non sono validi nei percorsi assoluti; le espressioni di indice FormCalc possono calcolare un'occorrenza a runtime
I contenitori senza nome sono trasparenti alla ricerca dei figli nominati; la qualifica dei parent e le proprietà supportate come rawValue, name, className, index, presence e access sono disponibili, e le esportazioni lessicali degli script object possono essere risolte e assegnate attraverso percorsi FormCalc
Condizioni
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
I predicati JavaScript usano .(expression) ed eseguono con il candidato come this; i predicati FormCalc usano .[expression] e risolvono i campi relativi contro quel candidato
Un predicato seleziona i sibling corrispondenti anche quando [*] è omesso; i predicati JavaScript risolvono anche nomi di campo nudi nello scope del candidato, e i percorsi con predicati nella sorgente FormCalc devono essere passati come stringhe resolver quotate
La ricerca dei discendenti cerca in ordine di documento un ramo che soddisfa i componenti rimanenti del percorso; un ramo senza suffisso corrispondente non nasconde una corrispondenza completa successiva
Un indice di occorrenza è locale al suo gruppo di sibling corrispondenti; un indice fuori intervallo termina quella ricerca nei discendenti, quindi main..cell[1] non seleziona una cella in un'altra riga quando la prima riga ha una sola cella
Una wildcard precedente valuta la ricerca nei discendenti indipendentemente per ogni contesto selezionato, e una wildcard direttamente dopo una radice assoluta seleziona i figli della radice
I predicati JavaScript ricevono gli oggetti xfa e event dell'evento corrente; la lookup relativa al candidato, le eccezioni dei predicati e le scritture native condividono la transazione contenitore
L'Eval annidato eredita il candidato del predicato, usa variabili e funzioni di calcolo isolate, e condivide risposte di compilazione native e replay transazionale con l'evento contenitore
Exists(missing) e un accessor a un'occorrenza indicizzata inesistente restituiscono 0 attraverso Exists; l'uso ordinario di un oggetto FormCalc non risolto solleva un errore
Budget e migrazione
I percorsi ammettono al massimo 128 componenti e 65,536 unità di codice UTF-16; gli indici devono essere interi safe, e attraversamento, predicati, compilazione dinamica e operazioni su istanze condividono i budget di esecuzione dell'evento
Errori del parser, eccezioni dei predicati e budget superati abortiscono l'evento e ripristinano valori nativi dei campi, ordine delle istanze e stato degli script attraverso TXFAWidgetRuntime
Il resolveNodes generale precedente espandeva gli indici omessi attraverso tutti gli antenati ripetuti; usa main.row[*].cell[*] quando si intendono ogni riga e ogni cella, al posto di main.row.cell[*]
Copertura
Il resolver opera su oggetti form live forniti dai binding degli eventi, inclusi campi, subform, draw, exclusion group, aree e script object, il Data DOM nativo esposto attraverso $data e $record, e i nodi proprietà dichiarati del template con attributi effettivi
L'escaping dei nomi JavaScript è supportato dalle stringhe resolver; gli identificatori della sorgente FormCalc conservano la grammatica degli identificatori del compilatore
API correlate
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Eval dinamico, Riferimenti FormCalc e Runtime XFA interattivo