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