Live XFA SOM-Pfadauflösung

Die allgemeine Ausführung mit EnableJavaScript stellt denselben Live-Formular-Resolver für Knoten-resolveNode/resolveNodes, xfa.resolveNode/xfa.resolveNodes und FormCalc-Accessoren bereit

Die Auflösung folgt den aktuellen wiederholten Vorkommen unmittelbar nach dem Einfügen, Entfernen oder Verschieben von Instanzen; erfolgreiche Runtime-Transaktionen schreiben ausgewählte Feldänderungen in ihre nativen Datenziele und in das gespeicherte XDP

Pfade und Vorkommen

PfadAuswahl
row[1].cellDie zweite Zeile und ihre ausgewählte Zelle
row[*].cellDie ausgewählte Zelle in jeder Zeile
$form.main.row.cellErste Zeile und erste Zelle über einen absoluten Pfad
row[-1].cellDie Zeile vor dem abgeleiteten Vorkommen
row[+1].cellDie Zeile nach dem abgeleiteten Vorkommen
main..cell[*]Passende Geschwisterzellen im ersten Nachfahrenzweig
main.*Alle direkten Kinder in Dokumentreihenfolge
main.#field[name='target']Über ein Namenseigenschafts-Prädikat ausgewählte Felder
main.#subform[*].#fieldDas ausgewählte Feld unter jedem Subformular, passend zu Klassennamen
main.part\.nameEin JavaScript-Resolver-Pfad mit escaptem Punkt in einem Knotennamen

Ein fehlender Index wählt genau ein Vorkommen; ein absoluter Pfad nutzt Vorkommen null, während ein bereichsbezogener Pfad den entsprechenden Vorfahren- oder Containerindex übernimmt, wenn die Strukturen wiederholte Geschwister haben

Die Indexableitung folgt entsprechenden Hierarchieebenen, auch wenn Quell- und Zielknoten unterschiedliche Namen haben; Klassenselektoren übernehmen den entsprechenden Klassen-Vorkommenindex

Ein nur einmal vorkommendes Ziel wird ohne Angabe eines Vorkommenindex ausgewählt; ein fehlendes abgeleitetes Vorkommen liefert eine leere Liste oder null, statt stillschweigend einen anderen Bereich zu wählen

Relative Indizes sind Offsets vom schlichten abgeleiteten Vorkommen und sind in absoluten Pfaden ungültig; FormCalc-Indexausdrücke können ein Vorkommen zur Laufzeit berechnen

Unbenannte Container sind bei der Suche nach benannten Kindern transparent; Eltern-Qualifizierung und unterstützte Eigenschaften wie rawValue, name, className, index, presence und access sind verfügbar, und lexikalische Exporte von Skriptobjekten lassen sich über FormCalc-Pfade auflösen und zuweisen

Bedingungen

const rows = xfa.resolveNodes("main.row[*].(Number(this.cell.rawValue)>15)");
const selected = xfa.resolveNodes("main.row[*].[cell ge 20].cell");

target = Sum($.resolveNodes("row.[cell ge 20].cell"))
row[1].cell = 25
var p = Ref(row[1].cell)
p = 30

JavaScript-Prädikate verwenden .(expression) und werden mit dem Kandidaten als this ausgeführt; FormCalc-Prädikate verwenden .[expression] und lösen relative Felder gegen diesen Kandidaten auf

Ein Prädikat wählt passende Geschwister auch dann, wenn [*] fehlt; JavaScript-Prädikate lösen zusätzlich bloße Feldnamen im Kandidatenbereich auf, und Prädikatpfade in FormCalc-Quellen müssen als quotierte Resolver-Strings übergeben werden

Die Nachfahrensuche durchläuft die Dokumentreihenfolge, bis ein Zweig die restlichen Pfadkomponenten erfüllt; ein Zweig ohne passendes Suffix verdeckt keinen späteren vollständigen Treffer

Ein Vorkommenindex gilt lokal für seine passende Geschwistergruppe; ein Index außerhalb des Bereichs beendet diese Nachfahrensuche, daher wählt main..cell[1] keine Zelle in einer anderen Zeile, wenn die erste Zeile nur eine Zelle hat

Ein vorangestellter Wildcard wertet die Nachfahrensuche für jeden ausgewählten Kontext unabhängig aus, und ein Wildcard direkt nach einer absoluten Wurzel wählt die Kinder der Wurzel

JavaScript-Prädikate erhalten die xfa- und event-Objekte des aktuellen Ereignisses; kandidatenrelative Suche, Prädikat-Ausnahmen und native Schreibaktionen teilen sich die umgebende Transaktion

Verschachteltes Eval erbt den Prädikatkandidaten, nutzt isolierte Berechnungsvariablen und -funktionen und teilt native Kompilierungsantworten sowie transaktionales Replay mit dem umgebenden Ereignis

Exists(missing) und ein Zugriff auf ein nicht existierendes indiziertes Vorkommen liefern über Exists 0; die gewöhnliche Verwendung eines unaufgelösten FormCalc-Objekts löst einen Fehler aus

Budgets und Migration

Pfade erlauben höchstens 128 Komponenten und 65,536 UTF-16-Codeeinheiten; Indizes müssen sichere Integers sein, und Traversierung, Prädikate, dynamische Kompilierung und Instanzoperationen teilen sich die Ereignis-Ausführungsbudgets

Parserfehler, Prädikat-Ausnahmen und überschrittene Budgets brechen das Ereignis ab und stellen native Feldwerte, Instanzreihenfolge und Skriptzustand über TXFAWidgetRuntime wieder her

Das frühere allgemeine resolveNodes verteilte fehlende Indizes über alle wiederholten Vorfahren; verwenden Sie main.row[*].cell[*] statt main.row.cell[*], wenn jede Zeile und jede Zelle gemeint ist

Abdeckung

Der Resolver arbeitet auf Live-Formularobjekten, die die Ereignis-Bindings liefern: Felder, Subformulare, Draws, Exclusion Groups, Areas und Skriptobjekte, das über $data und $record zugängliche native Data DOM sowie deklarierte Template-Property-Knoten mit effektiven Attributen

Resolver-Strings unterstützen JavaScript-Namensescaping; FormCalc-Quellbezeichner behalten die Bezeichner-Grammatik des Compilers

Verwandte APIs

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, Dynamisches Eval, FormCalc-Referenzen und Interaktive XFA-Runtime