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í

OperaceChová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