Creación y edición del árbol de formularios XFA
TXFAWidgetRuntime soporta la creación, clonado y edición transaccional en JavaScript del árbol de formularios vivo a través de xfa.form y las colecciones de nodos
El árbol de formularios vivo tiene identidades nativas independientes y puede guardarse como packet de formulario XDP sin modificar el template del autor
Crear e insertar un campo
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) devuelve un nodo separado, con nombre vacío y el namespace de modelo cuando se omiten los argumentos opcionales
Las clases aceptadas incluyen field, subform, draw, area, exclGroup y las clases de propiedades reconocidas por el esquema de propiedades del runtime
Crear un nodo no lo inserta en el formulario ni crea un widget visible hasta que se adjunta con las propiedades requeridas de UI y valor
Operaciones de colecciones y clonado
| Operación | Comportamiento |
|---|---|
parent.nodes.append(node) | Mueve un nodo separado o adjunto al final de la colección viva de hijos del padre |
parent.nodes.insert(node, before) | Mueve el nodo inmediatamente antes de un hijo existente del mismo padre |
parent.nodes.remove(node) | Desprende un hijo reteniendo su identidad de script para reutilización posterior |
node.clone(true) | Devuelve un clon profundo separado con identidades nativas y de scripts independientes |
node.clone(false) | Devuelve un clon superficial separado sin nodos hijos ni valor de campo copiado |
El orden de colecciones, parent, la búsqueda de propiedades y la resolución SOM soportada reflejan las ediciones exitosas inmediatamente dentro del evento
Las referencias retenidas por script objects siguen direccionando sus propios nodos tras una edición confirmada o un rollback de evento, incluidos los clones profundos y superficiales separados
Un ciclo, un nodo hijo de referencia de otro padre o un nodo del modelo de datos pasado a una operación de formulario lanzan una excepción antes de que esa operación inválida cambie el árbol
La raíz del modelo de formularios puede contener subforms y campos recién creados, pero la propia raíz del modelo no puede moverse ni clonarse
Ámbitos repetidos e instancias iniciales
Las instancias reales de formularios retienen identidades separadas incluso cuando sus nombres del autor son iguales, sus contextos de datos difieren o no existe packet de datasets
Un merge vacío usa el recuento explícito occur.initial, o occur.min cuando initial está ausente, y un max ausente usa por defecto min
Para un merge vacío, se permite un recuento inicial fuera del mínimo y máximo, incluidas cero copias iniciales
Los subforms anidados y sin nombre retienen sus propias rutas de aparición, y materializar estas instancias no sintetiza un packet de datasets
Estas reglas de aparición siguen XML Forms Architecture 3.3, páginas impresas 339–345
Commit, rollback y salida
Un evento exitoso aplica su journal estructural, reconstruye los widgets nativos y hace que el formulario editado esté disponible para SaveToBytes y la creación nativa automática de PDF
Una excepción de script no capturada, un fallo de commit nativo o un presupuesto de evento agotado restaura el documento original, las identidades de widgets y el estado de scripts retenido, de modo que un evento posterior pueda reintentar
Los presupuestos existentes de operación, nodos, profundidad, bytes, widgets y tiempo transcurrido también se aplican a la preparación estructural y al commit
Las instancias de formularios guardadas pueden recargarse y pasarse a HPDFXFAWriteHeadlessPDF para crear campos PDF y streams de appearance reales con bytes de fuentes suministrados
Alcance
Estas APIs editan el modelo de formularios vivo y su esquema de propiedades soportado
La edición general de xfa.template, el procesamiento completo de subform-sets de choice, el esquema completo de clases XFA y las combinaciones arbitrarias de selectores de binding siguen siendo capacidades aparte