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