Creazione e modifica dell'albero dei moduli XFA

TXFAWidgetRuntime supporta la creazione, la clonazione e la modifica transazionale tramite JavaScript dell'albero dei moduli vivo attraverso xfa.form e le collezioni di nodi

L'albero dei moduli vivo ha identità native indipendenti e può essere salvato come pacchetto modulo XDP senza modificare il template autoriale

Creazione e inserimento di 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) restituisce un nodo staccato, con nome vuoto e namespace del modello usati quando gli argomenti opzionali sono omessi

Le classi accettate includono field, subform, draw, area, exclGroup e le classi di proprietà riconosciute dallo schema di proprietà del runtime

Creare un nodo non lo inserisce nel modulo né crea un widget visibile finché non viene attaccato con le proprietà richieste di UI e valore

Operazioni sulle collezioni e clonazione

OperazioneComportamento
parent.nodes.append(node)Sposta un nodo staccato o attaccato alla fine della collezione di figli vivi del genitore
parent.nodes.insert(node, before)Sposta il nodo immediatamente prima di un figlio esistente dello stesso genitore
parent.nodes.remove(node)Stacca un figlio conservando la sua identità di script per un riuso successivo
node.clone(true)Restituisce un clone profondo staccato con identità native e di script separate
node.clone(false)Restituisce un clone superficiale staccato senza nodi figli né valore di campo copiato

L'ordine della collezione, parent, la ricerca delle proprietà e la risoluzione SOM supportata riflettono le modifiche riuscite immediatamente dentro l'evento

I riferimenti trattenuti dagli oggetti script continuano a indirizzare i propri nodi dopo una modifica confermata o un rollback dell'evento, inclusi cloni profondi e superficiali staccati

Un ciclo, un nodo figlio di riferimento di un altro genitore o un nodo del modello di dati passato a un'operazione del modulo sollevano un'eccezione prima che quell'operazione non valida cambi l'albero

La radice del modello del modulo può contenere subform e campi appena creati, ma la radice del modello stessa non può essere spostata o clonata

Ambiti ripetuti e istanze iniziali

Le istanze di modulo effettive conservano identità separate anche quando i loro nomi autoriali sono uguali, i loro contesti dati differiscono o non esiste un pacchetto datasets

Un merge vuoto usa il conteggio esplicito occur.initial, o occur.min quando initial è assente, e un max assente assume min per default

Per un merge vuoto, un conteggio iniziale fuori dal minimo e dal massimo è consentito, compreso zero copie iniziali

I subform annidati e senza nome conservano i propri percorsi di occorrenza, e materializzare queste istanze non sintetizza un pacchetto datasets

Queste regole di occorrenza seguono XML Forms Architecture 3.3, pagine stampate 339–345

Commit, rollback e output

Un evento riuscito applica il suo journal strutturale, ricostruisce i widget nativi e rende il modulo modificato disponibile per SaveToBytes e la creazione nativa automatica di PDF

Un'eccezione di script non intercettata, un commit nativo fallito o un budget di evento esaurito ripristina il documento originale, le identità dei widget e lo stato script trattenuto, così un evento successivo può riprovare

I budget esistenti di operazioni, nodi, profondità, byte, widget e tempo trascorso si applicano anche alla preparazione strutturale e al commit

Le istanze di modulo salvate possono essere ricaricate e passate a HPDFXFAWriteHeadlessPDF per creare campi PDF reali e stream di appearance con i byte dei font forniti

Ambito

Queste API modificano il modello di modulo vivo e il suo schema di proprietà supportato

La modifica generale di xfa.template, l'elaborazione completa dei choice subform-set, lo schema completo delle classi XFA e le combinazioni arbitrarie di selettori di binding restano capacità separate