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
| Operation | Verhalten |
|---|---|
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