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
| Pfad | Auswahl |
|---|---|
row[1].cell | Die zweite Zeile und ihre ausgewählte Zelle |
row[*].cell | Die ausgewählte Zelle in jeder Zeile |
$form.main.row.cell | Erste Zeile und erste Zelle über einen absoluten Pfad |
row[-1].cell | Die Zeile vor dem abgeleiteten Vorkommen |
row[+1].cell | Die 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[*].#field | Das ausgewählte Feld unter jedem Subformular, passend zu Klassennamen |
main.part\.name | Ein 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