XFA Query Node Collections
JavaScriptové i FormCalc události mohou prohlížet výskyty uzlů v scopu a držet nezávislé query seznamy napříč runtime událostmi
const siblings = xfa.record.amount.all;
const retained = siblings.clone();
retained.remove(retained.item(0));
retained.insert(siblings.item(0), null);
retained.item(0).rawValue = "42";
Vlastnosti výskytů
node.all vrátí čerstvý uspořádaný query seznam uzlů v scopu se stejným literálním názvem; nepojmenovaný uzel použije místo něj název své třídy
node.classAll vrátí čerstvý uspořádaný query seznam uzlů v scopu se stejnou třídou, tedy i uzly s jinými názvy
node.index a node.classIndex vrátí zero-based výskyt v těch příslušných scopech
Nepojmenované ne-property kontejnery jsou pro vyhledávání pojmenovaného scopu průhledné, tedy i kladné i záporné relativní SOM výskyty; property kontejnery si uchovávají vlastní scope
Literální názvy jako #field, * i Unicode názvy ty vlastnosti porovnají jako autorské názvy
Nezávislé seznamové operace
| Člen | Chování |
|---|---|
length | Aktuální počet položek seznamu |
item(index) | Referencovaný uzel, či null pro záporný, neceločíselný či mimo rozsah ležící index |
namedItem(name) | První referencovaný uzel s tím literálním názvem, či null, když se žádný netrefí |
clone() | Nové nezávislé úložiště položek referencující tytéž uzly |
append(node) | Přidá tutéž živou referenci uzlu na konec, tedy i duplicitní referenci |
insert(node, before) | Vloží živou referenci uzlu před první odpovídající referenci; null připojí |
remove(node) | Odebere první odpovídající referenci; chybějící reference hodí chybu |
Seznamy vrácené resolveNodes, all a classAll používají nezávislé úložiště položek; změna toho úložiště nechá stromy formulářů i dat na místě, zatímco zápis do referencovaného uzlu změní skutečný uzel
Kolekce node.nodes formulářů a vlastností vystavují živé potomní pohledy; jejich metody clone() vrátí nezávislé query seznamy, jak popisuje XFA Live Child Collections
Data DOM node.nodes taky dodává nezávislé clone(); její stávající metody append, insert a remove si uchovávají nativní strukturální chování, jak popisuje Transakční struktura XFA Data DOM
Iterace polem, indexovaná čtení i enumerace vystavují referencované uzly; přímé přiřazení, mazání, předefinování vlastnosti, změny prototypu i znemožnění rozšíření hodí chyby, dřív než změní query seznam
Perzistence a stabilní identity
Skriptové objekty si mohou napříč událostmi držet query seznam či kopii; každá operace použije aktuální resolver události i transakční limity
Dotazované handly instance managerů směrují operace na aktuální grafový stav události, když jsou držené či klonované napříč událostmi
Přejmenování či přeřazení přeživšího uzlu zachová identitu jeho drženého seznamu; odebrání opakované form instance způsobí selhání čtení a zápisů přes tu odebranou referenci, místo výběru náhradní instance
Nezávislý seznam může klonovat své uložené reference a odebrat dřív drženou referenci odebraného uzlu, aniž by ten uzel dereferencoval
Úložiště query seznamů je skriptový stav runtime; uložení XDP perzistuje nativní hodnoty i strukturu uzlů, zatímco nový runtime zahájí nové sezení skriptových objektů
Transakce a limity
Neplatné uzly i členské reference selžou, dřív než ta seznamová operace změní úložiště; zachycená chyba nechá dřívější platné operace téže události dostupné
Nezachycená chyba události, rozpočet operací či selhání uplynulého času obnoví mutace query seznamů, nativní hodnoty, opakované instance, držený stav skriptových objektů i stav journalu společně, takže tentýž runtime může zkusit znovu
TXFAFormScriptLimits.MaxArrayItems ohraničuje délku každého drženého seznamu a samostatně kumulativní seznamové objekty i nově alokované položky během jedné události; nastavení nula použije default kontextu události 65 536
Prázdné kopie konzumují rozpočet objektů, neprázdné navíc rozpočet položek a držené seznamy zůstávají ohraničené napříč samostatnými úspěšnými událostmi
Konzumace FormCalc a PDF
output = Concat(Sum(xfa.datasets.data.main.amount.all), ":",
xfa.datasets.data.main.amount.all.length, ":",
xfa.datasets.data.main.amount[1].classIndex)
Výběr výskytů FormCalc na literálních cestách xfa.form, xfa.datasets a xfa.record použije nativní SOM rozřešení; indexování seznamu za kolekční vlastností indexuje tu kolekci
Uložte runtime bajty do XDP a předejte je HPDFXFAWriteHeadlessPDF, chcete-li z potvrzených hodnot vygenerovat skutečná nativní pole i appearance, tedy i s editacemi přes držené přeživší reference opakovaných instancí
TXFAHeadlessPDFOptions.Editable = False vytvoří read-only nativní pole s appearance, namísto jejich zploštění
Pokrytí
Toto rozhraní dodává nezávislé query seznamy i metadata výskytů; obecná tvorba a klonování šablonových/form uzlů, další skriptování uzlových tříd, validace schema i externí média zůstávají samostatnou prací