Live XFA SOM Path Resolution
Obecné provedení s EnableJavaScript dodá tentýž živý form resolver resolverům na úrovni uzlů resolveNode/resolveNodes, xfa.resolveNode/xfa.resolveNodes i accessorům FormCalc
Rozřešení sleduje aktuální opakované výskyty hned po vložení, odebrání či přesunu instance; úspěšné runtime transakce perzistují vybrané zápisy polí do jejich nativních datových cílů i do uloženého XDP
Cesty a výskyty
| Cesta | Výběr |
|---|---|
row[1].cell | Druhý řádek a jeho vybraná buňka |
row[*].cell | Vybraná buňka v každém řádku |
$form.main.row.cell | První řádek a první buňka přes absolutní cestu |
row[-1].cell | Řádek předcházející odvozenému výskytu |
row[+1].cell | Řádek následující po odvozeném výskytu |
main..cell[*] | Odpovídající sourozenecké buňky v první potomkové větvi |
main.* | Všichni přímí potomci v dokumentovém pořadí |
main.#field[name='target'] | Pole vybraná predikátem pojmenovací vlastnosti |
main.#subform[*].#field | Vybrané pole pod každým subformem, s párováním názvů tříd |
main.part\.name | Resolver cesta JavaScriptu obsahující escapovanou tečku v názvu uzlu |
Vynechaný index vybere jeden výskyt; absolutní cesta použije výskyt nula, zatímco scopovaná cesta si při opakovaných sourozencích půjčí odpovídající index předka či kontejneru
Odvozování indexů sleduje odpovídající úrovně hierarchie, i když zdrojové i cílové uzly mají různé názvy; selektory tříd si půjčí odpovídající index výskytu třídy
Cíl s jediným výskytem se vybere, aniž by se vyžadoval index výskytu volajícího; chybějící odvozený výskyt vrátí prázdný seznam či null, místo aby tiše vybral jiný scope
Relativní indexy jsou offsety od nezdobeného odvozeného výskytu a v absolutních cestách jsou neplatné; FormCalc indexové výrazy umí výskyt spočítat až za běhu
Nepojmenované kontejnery jsou pro vyhledávání pojmenovaných potomků průhledné; dostupné jsou kvalifikace rodiče i podporované vlastnosti jako rawValue, name, className, index, presence a access a lexické exporty skriptových objektů lze přes FormCalc cesty rozřešit i přiřadit
Podmínky
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
JavaScriptové predikáty použijí .(expression) a provedou se s kandidátem jako this; FormCalc predikáty použijí .[expression] a rozřeší relativní pole vůči tomu kandidátovi
Predikát vybere odpovídající sourozence, i když je [*] vynechané; JavaScriptové predikáty taky rozřeší holé názvy polí v kandidátním scopu a predikátové cesty ve zdroji FormCalc se musí předávat jako citované resolver řetězce
Hledání potomků hledá v dokumentovém pořadí větev, která uspokojí zbývající složky cesty; větev bez odpovídající přípony neskrývá pozdější kompletní shodu
Index výskytu je lokální pro svou odpovídající sourozeneckou skupinu; index mimo rozsah ukončí to potomkové hledání, takže main..cell[1] nevybere buňku v jiném řádku, když první řádek má jen jednu buňku
Předcházející wildcard vyhodnotí potomkové hledání nezávisle pro každý vybraný kontext a wildcard přímo za absolutním kořenem vybere potomky kořene
JavaScriptové predikáty dostanou objekty xfa i event aktuální události; hledání relativní ke kandidátovi, výjimky predikátů i nativní zápisy sdílejí obklopující transakci
Vnořený Eval zdědí kandidáta predikátu, použije izolované výpočetní proměnné a funkce a sdílí nativní překladové odpovědi i transakční replay s obklopující událostí
Exists(missing) i accessor na neexistující indexovaný výskyt vrací skrz Exists 0; běžné použití nerozřešeného FormCalc objektu hodí chybu
Rozpočty a migrace
Cesty dovolí nejvýše 128 složek a 65 536 UTF-16 code unit; indexy musí být bezpečná celá čísla a traversal, predikáty, dynamický překlad i operace instancí sdílejí rozpočty provedení události
Chyby parseru, výjimky predikátů i překročené rozpočty přeruší událost a přes TXFAWidgetRuntime obnoví nativní hodnoty polí, pořadí instancí i skriptový stav
Dřívější obecné resolveNodes roztáhlo vynechané indexy napříč všemi opakovanými předky; když je míněn každý řádek i každá buňka, použijte main.row[*].cell[*] a vyměňte main.row.cell[*]
Pokrytí
Resolver pracuje na živých form objektech dodaných bindingy události, tedy na polích, subformech, draw, exclusion skupinách, area i skriptových objektech, na nativním Data DOM vystaveném přes $data a $record i na deklarovaných šablonových property uzlech s efektivními atributy
Escapování názvů JavaScriptu podporují resolver řetězce; zdrojové identifikátory FormCalc si uchovávají gramatiku identifikátorů překladače
Související API
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Dynamický Eval, FormCalc reference a Interactive XFA Runtime