XFA form tree creation and editing
TXFAWidgetRuntime podporuje transakční JavaScript tvorbu, klonování i editaci živého form stromu přes xfa.form a kolekce uzlů
Živý form strom má nezávislé nativní identity a dá se uložit jako form packet XDP, aniž by se změnila autorská šablona
Vytvoření a vložení pole
var row = xfa.resolveNode("row[1]");
var field = xfa.form.createNode("field", "additional");
row.nodes.append(field);
field.w = "160pt";
field.h = "24pt";
field.ui.getElement("textEdit");
field.font.typeface = "DejaVu Sans";
field.rawValue = "Additional value";
createNode(className, name, namespaceURI) vrací odpojený uzel, s prázdným názvem a modelem namespace použitým, když se volitelné argumenty vynechají
Přijímané třídy zahrnují field, subform, draw, area, exclGroup i property třídy rozpoznané schema vlastností runtime
Vytvoření uzlu ho nevloží do formuláře ani nevytvoří viditelný widget, dokud se nepřipojí s požadovanými vlastnostmi UI i hodnoty
Kolekční operace a klonování
| Operace | Chování |
|---|---|
parent.nodes.append(node) | Přesune odpojený či připojený uzel na konec živé potomní kolekce rodiče |
parent.nodes.insert(node, before) | Přesune uzel bezprostředně před existujícího potomka téhož rodiče |
parent.nodes.remove(node) | Odpojí potomka, zatímco si uchová jeho skriptovou identitu pro pozdější znovupoužití |
node.clone(true) | Vrátí odpojenou hlubokou kopii se samostatnými nativními i skriptovými identitami |
node.clone(false) | Vrátí odpojenou mělkou kopii bez potomků ani zkopírované hodnoty pole |
Kolekční pořadí, parent, vyhledávání vlastností i podporované SOM rozřešení odrážejí úspěšné editace okamžitě uvnitř události
Reference držené skriptovými objekty dál adresují své vlastní uzly po zapsané editaci či rollbacku události, tedy i odpojené hluboké i mělké kopie
Cyklus, referencovaný potomek od jiného rodiče či datově-modelový uzel předaný form operaci hodí výjimku, dřív než ta neplatná operace změní strom
Kořen form modelu může obsahovat nově vytvořené subformy a pole, ale kořen modelu sám se přesunout či naklonovat nedá
Opakované scopy a počáteční instance
Skutečné form instance si uchovávají samostatné identity, i když se jejich autorské názvy rovnají, jejich datové kontexty se liší či packet datasets neexistuje
Prázdné sloučení použije explicitní počet occur.initial, případně occur.min, když initial chybí, a chybějící max defaultuje na min
U prázdného sloučení je dovolen počet initial mimo minimum i maximum, tedy i nulový počet počátečních kopií
Vnořené i nepojmenované subformy si uchovávají vlastní cesty výskytů a materializace těch instancí nesyntetizuje packet datasets
Ty výskytové pravidla řídí XML Forms Architecture 3.3, tištěné strany 339–345
Commit, rollback a výstup
Úspěšná událost aplikuje svůj strukturální journal, znovu postaví nativní widgety a zpřístupní editovaný formulář SaveToBytes i automatickému nativnímu vytváření PDF
Nezachycená skriptová výjimka, neúspěšný nativní commit či překročený rozpočet události obnoví původní dokument, identity widgetů i držený skriptový stav, takže pozdější událost může zkusit znovu
Stávající rozpočty operací, uzlů, hloubky, bajtů, widgetů i uplynulého času platí i pro strukturální přípravu i commit
Uložené form instance se dají znovu načíst a předat HPDFXFAWriteHeadlessPDF k vytvoření skutečných PDF polí i appearance streamů s dodanými bajty písem
Rozsah
Tyto API editují živý form model a jeho podporované schema vlastností
Obecná editace xfa.template, kompletní zpracování choice subform-set, úplné schema tříd XFA i libovolné kombinace binding selektorů zůstávají samostatnými schopnostmi