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

CestaVýběr
row[1].cellDruhý řádek a jeho vybraná buňka
row[*].cellVybraná buňka v každém řádku
$form.main.row.cellPrvní řá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[*].#fieldVybrané pole pod každým subformem, s párováním názvů tříd
main.part\.nameResolver 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