即時 XFA SOM 路徑解析
啟用 EnableJavaScript 的一般執行,會把同一個即時表單解析器提供給節點層級的 resolveNode/resolveNodes、xfa.resolveNode/xfa.resolveNodes,以及 FormCalc 存取子
執行個體插入、移除或移動之後,解析會立即跟隨目前的重複出現個體;成功的執行階段交易會把選定欄位的寫入保存到原生資料目標與已儲存的 XDP
路徑與出現個體
| 路徑 | 選取結果 |
|---|---|
row[1].cell | 第二列與其選取的儲存格 |
row[*].cell | 每一列中選取的儲存格 |
$form.main.row.cell | 以絕對路徑取得第一列的第一個儲存格 |
row[-1].cell | 推測出現個體之前的列 |
row[+1].cell | 推測出現個體之後的列 |
main..cell[*] | 第一個後代分支中符合的兄弟儲存格 |
main.* | 文件順序上的所有直接子節點 |
main.#field[name='target'] | 由命名屬性述詞選出的欄位 |
main.#subform[*].#field | 每個子表單下符合類別名稱的所選欄位 |
main.part\.name | 節點名稱含跳脫句點的 JavaScript 解析路徑 |
省略索引代表選取一個出現個體;絕對路徑使用第 0 個出現個體,而帶範圍的路徑在結構具有重複兄弟時,會借用對應上層或容器的索引
即使來源與目的節點名稱不同,索引推測仍沿著對應的階層層級;類別選擇器借用對應類別的出現個體索引
只出現一次的目標不需要呼叫端給出現個體索引即可選取;推測的出現個體不存在時會回傳空清單或 null,而不是默默選到另一個範圍
相對索引是相對於不加修飾的推測出現個體的位移,在絕對路徑中無效;FormCalc 索引運算式可以在執行期算出出現個體
未命名容器對具名子節點查詢是透明的;可使用父節點限定,以及 rawValue、name、className、index、presence、access 等支援屬性,script object 的語彙匯出也能透過 FormCalc 路徑解析與指派
條件
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 述詞使用 .(expression),執行時以候選節點作為 this;FormCalc 述詞使用 .[expression],相對欄位以該候選節點為基準解析
即使省略 [*],述詞仍會選出符合的兄弟節點;JavaScript 述詞也能在候選範圍內解析裸欄位名稱,而 FormCalc 原始碼中的述詞路徑必須以加引號的解析字串傳入
後代查詢按文件順序尋找能滿足其餘路徑元件的分支;某個分支沒有符合的後綴時,不會掩蓋後面出現的完整符合
出現個體索引只在其符合的兄弟群組內有效;超出範圍的索引會結束該次後代搜尋,因此第一列只有一個儲存格時,main..cell[1] 不會選到另一列的儲存格
前置萬用字元會為每個選取的情境獨立評估後代查詢,而緊接絕對根節點的萬用字元選取根節點的子節點
JavaScript 述詞會收到目前事件的 xfa 與 event 物件;候選相對查詢、述詞例外與原生寫入共用外層交易
巢狀 Eval 繼承述詞候選節點,使用隔離的計算變數與函式,並與外層事件共用原生編譯回應與交易重播
Exists(missing) 與存取不存在索引出現個體的存取子,都會透過 Exists 回傳 0;一般使用未解析的 FormCalc 物件則會擲出錯誤
預算與遷移
路徑最多 128 個元件與 65,536 個 UTF-16 碼元;索引必須是安全整數,走訪、述詞、動態編譯與執行個體操作共用事件執行預算
解析錯誤、述詞例外與超過預算都會中止事件,並由 TXFAWidgetRuntime 還原原生欄位值、執行個體順序與腳本狀態
較早的一般 resolveNodes 會把省略的索引展開到所有重複上層;當目的是每一列的每一個儲存格時,請改用 main.row[*].cell[*] 取代 main.row.cell[*]
涵蓋範圍
解析器作用於事件繫結提供的即時表單物件,包括欄位、子表單、draw、互斥群組、area 與 script object,透過 $data 與 $record 公開的原生 Data DOM,以及帶有效屬性的已宣告範本 property 節點
解析字串支援 JavaScript 名稱跳脫;FormCalc 原始碼識別字則沿用編譯器的識別字文法
相關 API
HPDFXFACompileFormCalcEvent、HPDFXFAExecuteJavaScriptEvent、動態 Eval、FormCalc 參考與互動式 XFA 執行環境