Creación y edición del árbol de formularios XFA
TXFAWidgetRuntime soporta creación, clonación y edición transaccional mediante JavaScript del árbol de formulario vivo a través de xfa.form y las colecciones de nodos
El árbol de formulario vivo tiene identidades nativas independientes y puede guardarse como un paquete de formulario XDP sin modificar la plantilla autoriada
Creación e inserción de 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 desvinculado, con un nombre vacío y el namespace del modelo usados cuando los argumentos opcionales se omiten
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 vincula con las propiedades requeridas de UI y valor
Operaciones de colección y clonación
| Operación | Comportamiento |
|---|---|
parent.nodes.append(node) | Mueve un nodo desvinculado o vinculado al final de la colección de hijos vivos del padre |
parent.nodes.insert(node, before) | Mueve el nodo inmediatamente antes de un hijo existente del mismo padre |
parent.nodes.remove(node) | Desvincula un hijo reteniendo su identidad de script para reutilización posterior |
node.clone(true) | Devuelve un clon profundo desvinculado con identidades nativas y de script separadas |
node.clone(false) | Devuelve un clon superficial desvinculado sin nodos hijos ni valor de campo copiado |
El orden de la colección, parent, la búsqueda de propiedades y la resolución SOM soportada reflejan las ediciones exitosas inmediatamente dentro del evento
Las referencias retenidas por objetos de script siguen direccionando sus propios nodos tras una edición confirmada o un rollback del evento, incluidos clones profundos y superficiales desvinculados
Un ciclo, un nodo hijo de referencia de otro padre o un nodo del modelo de datos pasado a una operación de formulario lanza una excepción antes de que esa operación inválida cambie el árbol
La raíz del modelo de formulario puede contener subforms y campos recién creados, pero la raíz del modelo no puede moverse ni clonarse
Ámbitos repetidos e instancias iniciales
Las instancias de formulario reales retienen identidades separadas incluso cuando sus nombres autoriados son iguales, sus contextos de datos difieren o no existe un paquete datasets
Una fusión vacía usa el conteo explícito occur.initial, o occur.min cuando initial está ausente, y un max ausente toma min por defecto
Para una fusión vacía, un conteo inicial fuera del mínimo y el máximo está permitido, incluidas cero copias iniciales
Los subforms anidados y sin nombre retienen sus propias rutas de ocurrencia, y materializar estas instancias no sintetiza un paquete datasets
Estas reglas de ocurrencia 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 el formulario editado disponible para SaveToBytes y la creación nativa automática de PDF
Una excepción de script no capturada, un commit nativo fallido o un presupuesto de evento agotado restaura el documento original, las identidades de widgets y el estado de script 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 el commit
Las instancias de formulario guardadas pueden recargarse y pasarse a HPDFXFAWriteHeadlessPDF para crear campos PDF reales y streams de apariencia con los bytes de fuente suministrados
Alcance
Estas APIs editan el modelo de formulario vivo y su esquema de propiedades soportado
La edición general de xfa.template, el procesamiento completo de choice subform-sets, el esquema completo de clases XFA y las combinaciones arbitrarias de selectores de binding siguen siendo capacidades separadas