Erzeugung und Editierung des XFA-Form-Baums

TXFAWidgetRuntime unterstützt transaktionale JavaScript-Erzeugung, Klonen und Editierung des live Form-Baums über xfa.form und Knoten-Collections

Der live Form-Baum hat unabhängige native Identitäten und kann als XDP-Form-Paket gespeichert werden, ohne das authored Template zu ändern

Ein Feld erzeugen und einfügen

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) liefert einen abgetrennten Knoten, mit leerem Namen und dem Model-Namespace, wenn die optionalen Argumente ausgelassen werden

Die akzeptierten Klassen umfassen field, subform, draw, area, exclGroup und die Property-Klassen, die das Runtime-Property-Schema erkennt

Das Erzeugen eines Knotens fügt ihn nicht ins Formular ein und erzeugt kein sichtbares Widget, bis er mit den erforderlichen UI- und Value-Properties angehängt wird

Collection-Operationen und Klonen

OperationVerhalten
parent.nodes.append(node)Verschiebt einen abgetrennten oder angehängten Knoten ans Ende der live Kind-Collection des Parents
parent.nodes.insert(node, before)Verschiebt den Knoten unmittelbar vor ein bestehendes Kind desselben Parents
parent.nodes.remove(node)Koppelt ein Kind ab und behält seine Script-Identität für die spätere Wiederverwendung
node.clone(true)Liefert einen abgetrennten Deep-Clone mit separaten nativen und Script-Identitäten
node.clone(false)Liefert einen abgetrennten Shallow-Clone ohne Kindknoten oder kopierten Feldwert

Collection-Reihenfolge, parent, Property-Lookup und unterstützte SOM-Auflösung spiegeln erfolgreiche Editierungen sofort innerhalb des Ereignisses wider

Referenzen, die Script-Objekte zurückhalten, adressieren nach einer committed Editierung oder einem Event-Rollback weiterhin ihre eigenen Knoten, einschließlich abgetrennter Deep- und Shallow-Clones

Ein Zyklus, ein Referenzkind aus einem anderen Parent oder ein an eine Form-Operation übergebener Data-Model-Knoten wirft eine Exception, bevor diese ungültige Operation den Baum ändert

Die Form-Model-Root kann neu erzeugte Subforms und Felder enthalten, aber die Model-Root selbst lässt sich nicht verschieben oder klonen

Wiederholte Scopes und initiale Instanzen

Tatsächliche Form-Instanzen behalten separate Identitäten, selbst wenn ihre authored Namen gleich sind, ihre Datenkontexte differieren oder kein datasets-Paket existiert

Ein leerer Merge nutzt die explizite occur.initial-Anzahl oder occur.min, wenn initial fehlt, und ein fehlendes max defaultet auf min

Für einen leeren Merge ist eine initiale Anzahl außerhalb von Minimum und Maximum erlaubt, einschließlich null initialer Kopien

Verschachtelte und unbenannte Subforms behalten ihre eigenen Vorkommenspfade, und das Materialisieren dieser Instanzen synthetisiert kein datasets-Paket

Diese Vorkommensregeln folgen der XML Forms Architecture 3.3, gedruckte Seiten 339–345

Commit, Rollback und Ausgabe

Ein erfolgreiches Ereignis wendet sein strukturelles Journal an, baut native Widgets neu und macht das editierte Formular für SaveToBytes und die automatische native PDF-Erzeugung verfügbar

Eine nicht abgefangene Script-Exception, ein fehlgeschlagener nativer Commit oder ein überschrittenes Ereignisbudget stellt das Originaldokument, die Widget-Identitäten und den zurückgehaltenen Script-State wieder her, sodass ein späteres Ereignis es erneut versuchen kann

Die bestehenden Operations-, Node-, Tiefen-, Byte-, Widget- und Laufzeit-Budgets gelten zusätzlich für strukturelle Vorbereitung und Commit

Gespeicherte Form-Instanzen lassen sich neu laden und an HPDFXFAWriteHeadlessPDF übergeben, um echte PDF-Felder und Appearance-Streams mit gelieferten Font-Bytes zu erzeugen

Umfang

Diese APIs editieren das live Form-Modell und sein unterstütztes Property-Schema

Allgemeines xfa.template-Editing, vollständige Choice-Subform-Set-Verarbeitung, das komplette XFA-Klassenschema und beliebige Binding-Selektorkombinationen bleiben separate Fähigkeiten