Classe TXFADataStructure
TXFADataStructure, dichiarata in HPDFXFADataStructure, mantiene modifiche strutturali limitate a un Data DOM XFA nativo esistente e possiede qualsiasi albero di elementi staccato creato, clonato o rimosso attraverso il grafo
CreateDataNode serve gli elementi del Data DOM, mentre CreateElement supporta anche la costruzione di elementi di modello usata da TXFAFormStructure
Il costruttore prende in prestito Root e valida l'albero esistente contro TXFADataStructureLimits prima di restituire; il grafo deve essere distrutto prima del proprietario della radice presa in prestito
Tutti i nomi AnsiString pubblici, gli URI dei namespace e i valori testuali contengono byte UTF-8
Graph := TXFADataStructure.Create(DatasetsRoot, Limits, OnTick);
try
Graph.BeginOperation(OnTick);
try
Node := Graph.CreateDataNode('dataValue', 'amount');
Graph.SetValue(Node, '42');
Graph.Append(RecordNode, Node);
finally
Graph.EndOperation;
end;
finally
Graph.Free;
end;
Ambito delle operazioni
BeginOperation(OnTick) avvia uno scope e respinge uno scope annidato; EndOperation rilascia il callback conservato ed è sicuro durante la pulizia
Il costruttore esegue il proprio scope di preflight e rilascia il callback del costruttore prima di restituire; i metodi successivi richiedono un nuovo scope attivo
OnTick è una anonymous procedure Delphi o una nested procedure FPC di tipo TXFADataStructureTick; può sollevare per cancellare il lavoro o far rispettare un deadline del chiamante o un contatore di operazioni
I metodi preparano allocazioni, capacità di proprietà e le dichiarazioni di namespace richieste prima del controllo finale di cancellazione e della mutazione strutturale; una singola modifica respinta preserva il grafo documento esistente
Una serie di chiamate dirette riuscite al grafo non viene automaticamente ripristinata quando una chiamata successiva fallisce; il runtime di scripting fornisce la transazione completa dell'evento e ripristina insieme il suo documento, il grafo staccato, le identità degli script, lo stato lessicale e il giornale
Creazione e clonazione
CreateDataNode(ClassName, Name, NamespaceURI = '') accetta dataGroup o dataValue, crea un elemento staccato fresco e registra i metadata espliciti della classe del nodo dati
CreateElement(ClassName, Name, NamespaceURI) crea un elemento di modello staccato il cui nome locale XML è ClassName, con un attributo name XFA opzionale e una dichiarazione di namespace predefinita esplicita
CreateElement valida sintassi XML, valori scalari, URI di namespace riservati e capacità del grafo; la factory dei form di livello superiore valida lo schema di classi XFA supportato
Name può essere un nome locale XML o un nome qualificato il cui prefisso non vuoto ha l'URI di namespace non vuoto fornito; i binding riservati xml e xmlns vengono validati
Un nome vuoto è permesso per un passo di costruzione staccato; impostate un nome valido con Rename prima dell'aggancio
Clone(Node, Recursive = True) crea una copia staccata con identità native fresche; una copia shallow conserva il valore dell'elemento stesso, gli attributi e le dichiarazioni di namespace escludendo i nodi figli
Le dichiarazioni di namespace ereditate vengono materializzate prima di una clonazione o mossa, così gli attributi con prefisso conservano il loro namespace originale fuori dallo scope del loro precedente antenato
Modifiche di proprietà
Append(Parent, Node) sposta lo stesso nodo alla fine dei figli ordinati del padre; InsertBefore(Parent, Node, Before) lo sposta prima di un figlio diretto esistente, con Before = nil equivalente all'append
Remove(Parent, Node) stacca il figlio diretto esistente e ne trasferisce la proprietà al grafo; l'oggetto, i discendenti e le identità native restano validi fino alla distruzione del grafo o al ripristino di uno snapshot staccato
Grafi estranei, cicli, spostare la radice presa in prestito, aggancio senza nome, riferimenti a fratelli non validi e overflow di nodo/profondità/byte sollevano EHPDFXFAError
Modifiche di valore e nome
Rename(Node, Name) cambia il nome locale XML dell'elemento conservando il suo prefisso, l'URI del namespace, la posizione, i discendenti e l'identità nativa; un elemento agganciato richiede un nome XML valido non vuoto
SetValue(Node, Value) valida valori scalari UTF-8 e XML, sostituisce i figli testuali ordinari e preserva commenti e processing instructions; il testo vuoto rimuove i figli testuali ordinari
SetAttribute(Node, Name, Value) aggiunge o sostituisce un attributo dopo aver validato la sintassi del nome qualificato, il valore UTF-8 e il budget di byte previsto; un valore vuoto resta un attributo vuoto esplicito
SetNamespace(Node, NamespaceURI) cambia il namespace espanso dell'elemento e aggiorna la dichiarazione per il suo prefisso corrente, validando i binding riservati
DeclareNamespace(Node, Prefix, NamespaceURI) aggiunge o sostituisce una dichiarazione di namespace senza cambiare il nome espanso dell'elemento; rifiuta una dichiarazione in conflitto per il prefisso dell'elemento stesso
I caller diretti del grafo coordinano gli attributi con prefisso con le loro dichiarazioni di namespace e tengono le modifiche composte dentro la propria transazione di rollback
I budget di byte e nodi includono il valore aggregato dell'elemento e il suo effettivo nodo testuale di proprietà, invece di addebitare una sola rappresentazione del testo
Preflight dell'import XML
ValidateImport(Node, Incoming, Overwrite, OnTick) controlla il grafo aggregato proiettato prima che un chiamante importi una lista di proprietà di figli XML in arrivo
Quando Overwrite è true, la dimensione proiettata esclude i figli sostituiti della destinazione e il valore aggregato; altrimenti i figli esistenti restano nel budget
Il metodo lascia invariati la lista in arrivo e il documento, e crea uno scope operativo temporaneo solo quando nessuno scope è già attivo
Snapshot staccati
CaptureDetached restituisce uno snapshot di valore di ogni radice e discendente staccato, includendo testo, CDATA, commenti, processing instructions, attributi e dichiarazioni di namespace
RestoreDetached(Snapshot) valida e prepara una foresta sostitutiva staccata prima di scambiare la proprietà; l'array di nodi restituito segue l'ordine dello snapshot e contiene identità native fresche per il remapping del chiamante
Si veda TXFADataStructureSnapshot per i campi del record e le regole di identità
Ispezione
Root espone la radice presa in prestito e DetachedRoots espone le radici possedute dal grafo per l'ispezione; usate i metodi del grafo per le modifiche così che proprietà e budget restino coerenti
Scripting transazionale del Data DOM · Scripting transazionale dell'albero dei form · TXFANode