Klasa TXFADataStructure
TXFADataStructure, deklarowana w HPDFXFADataStructure, utrzymuje ograniczone strukturalne edycje istniejącego natywnego Data DOM XFA i posiada wszelkie odłączone drzewa elementów utworzone, sklonowane albo usunięte przez graf
CreateDataNode obsługuje elementy Data DOM, podczas gdy CreateElement wspiera też konstrukcję elementów modelu używaną przez TXFAFormStructure
Konstruktor pożycza Root i waliduje istniejące drzewo względem TXFADataStructureLimits przed powrotem; graf musi zostać zniszczony przed właścicielem pożyczonego korzenia
Wszystkie publiczne nazwy AnsiString, URI przestrzeni nazw i wartości tekstowe zawierają bajty 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;
Operation scope
BeginOperation(OnTick) rozpoczyna scope i odrzuca scope zagnieżdżony; EndOperation zwalnia przechowywany callback i jest bezpieczne podczas sprzątania
Konstruktor uruchamia własny scope preflight i zwalnia callback konstruktora przed powrotem; kolejne metody wymagają nowego aktywnego scope
OnTick to anonimowa procedura Delphi albo zagnieżdżona procedura FPC typu TXFADataStructureTick; może rzucać, aby anulować pracę albo wymusić deadline wywołującego albo licznik operacji
Metody przygotowują alokacje, pojemność własności i wymagane deklaracje przestrzeni nazw przed finalnym checkiem anulowania i mutacją strukturalną; odrzucona pojedyncza edycja zachowuje istniejący graf dokumentu
Seria udanych bezpośrednich wywołań grafu nie jest automatycznie wycofywana, gdy późniejsze wywołanie zawiedzie; runtime skryptowy dostarcza kompletną transakcję zdarzenia i przywraca swój dokument, odłączony graf, tożsamości skryptów, stan leksykalny i dziennik razem
Creation and cloning
CreateDataNode(ClassName, Name, NamespaceURI = '') akceptuje dataGroup albo dataValue, tworzy świeży odłączony element i rejestruje jawne metadane klasy węzła danych
CreateElement(ClassName, Name, NamespaceURI) tworzy odłączony element modelu, którego lokalna nazwa XML to ClassName, z opcjonalnym atrybutem name XFA i jawną deklaracją domyślnej przestrzeni nazw
CreateElement waliduje składnię XML, wartości skalarne, zarezerwowane URI przestrzeni nazw i pojemność grafu; wyższopoziomowa fabryka formularzy waliduje obsługiwany schemat klas XFA
Name może być lokalną nazwą XML albo nazwą kwalifikowaną, której niepusty prefiks ma dostarczony niepusty URI przestrzeni nazw; zarezerwowane powiązania xml i xmlns są walidowane
Pusta nazwa jest dozwolona dla odłączonego kroku konstrukcji; ustaw poprawną nazwę przez Rename przed dołączeniem
Clone(Node, Recursive = True) tworzy odłączoną kopię ze świeżymi natywnymi tożsamościami; płytka kopia zachowuje własną wartość elementu, atrybuty i deklaracje przestrzeni nazw, wykluczając węzły potomne
Dziedziczone deklaracje przestrzeni nazw są materializowane przed klonowaniem albo przenoszeniem, więc atrybuty z prefiksem zachowują oryginalną przestrzeń nazw poza poprzednim zakresem przodka
Ownership edits
Append(Parent, Node) przenosi ten sam węzeł na koniec uporządkowanych potomków rodzica; InsertBefore(Parent, Node, Before) przenosi go przed istniejącego bezpośredniego potomka, przy czym Before = nil równoznaczne jest doklejeniu
Remove(Parent, Node) odłącza istniejącego bezpośredniego potomka i przenosi jego własność do grafu; obiekt, potomkowie i natywne tożsamości pozostają poprawne do zniszczenia grafu albo przywrócenia odłączonego snapshotu
Obce grafy, cykle, przenoszenie pożyczonego korzenia, dołączanie bez nazwy, niepoprawne referencje rodzeństwa i przepełnienie węzłów/głębokości/bajtów podnoszą EHPDFXFAError
Value and name edits
Rename(Node, Name) zmienia lokalną nazwę XML elementu, zachowując prefiks, URI przestrzeni nazw, pozycję, potomków i natywną tożsamość; dołączony element wymaga niepustej poprawnej nazwy XML
SetValue(Node, Value) waliduje wartości skalarne UTF-8 i XML, zastępuje zwykłych potomków tekstowych i zachowuje komentarze oraz instrukcje przetwarzania; pusty tekst usuwa zwykłych potomków tekstowych
SetAttribute(Node, Name, Value) dodaje albo zastępuje atrybut po walidacji składni nazwy kwalifikowanej, wartości UTF-8 i przewidywanego budżetu bajtów; pusta wartość pozostaje jawnie pustym atrybutem
SetNamespace(Node, NamespaceURI) zmienia rozszerzoną przestrzeń nazw elementu i aktualizuje deklarację dla jego bieżącego prefiksu, walidując zarezerwowane powiązania
DeclareNamespace(Node, Prefix, NamespaceURI) dodaje albo zastępuje deklarację przestrzeni nazw bez zmieniania rozszerzonej nazwy elementu; odrzuca sprzeczną deklarację dla własnego prefiksu elementu
Bezpośredni wywołujący graf koordynują atrybuty z prefiksem ze swoimi deklaracjami przestrzeni nazw i utrzymują edycje złożone wewnątrz własnej transakcji rollbacku
Budżety bajtów i węzłów obejmują zagregowaną wartość elementu i jego rzeczywisty posiadany węzeł tekstowy, a nie obciążanie tylko jednej reprezentacji tekstu
XML import preflight
ValidateImport(Node, Incoming, Overwrite, OnTick) sprawdza przewidywany zagregowany graf, zanim wywołujący zaimportuje posiadaną listę przychodzących potomków XML
Gdy Overwrite jest true, przewidywany rozmiar wyklucza zastępowanych potomków celu i zagregowaną wartość; w przeciwnym razie istniejący potomkowie pozostają w budżecie
Metoda pozostawia listę przychodzącą i dokument niezmienione i tworzy tymczasowy scope operacji wyłącznie, gdy żaden scope nie jest już aktywny
Detached snapshots
CaptureDetached zwraca snapshot wartości każdego odłączonego korzenia i potomka, łącznie z tekstem, CDATA, komentarzami, instrukcjami przetwarzania, atrybutami i deklaracjami przestrzeni nazw
RestoreDetached(Snapshot) waliduje i przygotowuje zastępczy odłączony las przed wymianą własności; jego zwracana tablica węzłów podąża za kolejnością snapshotu i zawiera świeże natywne tożsamości do remapowania przez wywołującego
Zobacz TXFADataStructureSnapshot po pola rekordów i reguły tożsamości
Inspection
Root odsłania pożyczony korzeń, a DetachedRoots korzenie posiadane przez graf do inspekcji; używaj metod grafu do zmian, żeby własność i budżety pozostawały spójne
Transactional Data DOM scripting · Transactional form tree scripting · TXFANode