네이티브 XFA Data DOM
EnableJavaScript가 켜진 일반 실행은 문서의 네이티브 datasets 트리를 xfa.datasets, $data, $record 리졸버 경로와 FormCalc 접근자로 노출합니다
데이터 노드는 안정적인 네이티브 식별자를 쓰고 폼 노드와 동일한 라이브 SOM 리졸버로 해석됩니다. 이름, 클래스 셀렉터, occurrence 선택, 부모 순회, predicate, 노드 수준 해석을 지원합니다
루트와 클래스
| 객체 또는 경로 | 의미 |
|---|---|
xfa.datasets | datasets 패킷 노드, 없으면 null |
xfa.datasets.data와 $data | datasets 패킷 아래의 데이터 루트 |
$record | 현재 비(非)레코드 처리 모델에서 data 아래의 첫 번째 레코드 루트 |
dataGroup | 자식 요소를 담은 데이터 요소, 명시적으로 선언된 빈 그룹 포함 |
dataValue | 값을 담고 있는 데이터 요소 |
formNode.dataNode | 폼 field나 subform에 바인딩된 노드, 데이터 바인딩이 없으면 null |
XFA 데이터 네임스페이스의 dataNode 속성으로 그룹이나 값의 클래스를 명시적으로 고를 수 있습니다. 네임스페이스 접두어는 특정 철자를 요구하는 대신 실제로 해석됩니다
읽기와 쓰기
dataValue는 value를 rawValue의 쓰기 가능한 별칭으로 노출합니다. 두 접근자는 같은 바인딩된 데이터 셀과 네이티브 데이터 노드를 갱신합니다
const value = xfa.resolveNode("$record.row[1].cell");
value.rawValue = "25";
target.rawValue = xfa.resolveNode("main.row[1].cell").rawValue;
$record.row[1].cell = 25
target = row[1].cell
var p = Ref($record.row[1].cell)
p = 30
바인딩된 field에 쓰면 대응하는 데이터 값이 즉시 갱신되고, 같은 스크립트 안에서 데이터 값에 쓰면 바인딩된 field 읽기가 즉시 반영됩니다. 네이티브 발행은 실제 데이터 노드에 씁니다
실체화된 스칼라 값 프로퍼티는 field나 데이터 쓰기 이후 네이티브 폼 콘텐츠를 동기화합니다. 공유 데이터 별칭과 새 반복 인스턴스 데이터 발행도 여기에 포함됩니다
바인딩된 폼 field가 없는 데이터 요소도 계속 접근하고 쓸 수 있습니다. 성공한 트랜잭션은 이런 변경을 저장된 XDP에 유지합니다
bind match=none인 폼 field는 템플릿 기본값을 유지하고 편집을 자기 occurrence의 Form DOM 값에 저장합니다. 합성 데이터 노드를 노출하지 않고 형제 occurrence를 바꾸지도 않습니다
데이터 값은 폼 이벤트 호스트와 Unicode·값 크기·실행 예산을 공유합니다. 그룹 노드는 쓰기 가능한 raw 값을 주는 대신 구조적 접근을 제공합니다
반복 인스턴스와 유지되는 참조
폼 인스턴스를 삽입·이동·제거하면 같은 스크립트 안에서 대응하는 라이브 Data DOM이 갱신됩니다. 새 암시 바인딩 행은 발행 전까지 템플릿 기본값을 자기 데이터 노드로 노출합니다
occurrence가 0인 프로토타입도 첫 데이터 그룹과 값을 만들 수 있습니다. 네이티브 발행이 새 노드에 실제 식별자를 부여하므로 스크립트 객체가 이후 이벤트에 걸쳐 데이터 핸들을 유지할 수 있습니다
유지된 데이터 참조는 식별자 기준으로 이동을 따라갑니다. 그룹이 제거된 뒤 참조를 쓰면 이벤트가 실패하고, 런타임 롤백은 네이티브 occurrence 순서, 값, 스크립트 객체 카운터를 복원합니다
스크립트 객체가 붙잡고 있는 인스턴스 매니저는 현재 scope를 해석합니다. 초기 occurrence 수가 0이던 매니저도 포함입니다
네이티브 XML 콘텐츠
datasets, dataGroup, dataValue 노드는 네이티브 파싱, 같은 스크립트 그래프 갱신, 트랜잭션 발행을 갖춘 loadXML과 saveXML을 노출합니다
XML 임포트는 주석, 처리 명령, CDATA, 전개된 네임스페이스, Unicode 이름을 보존하면서, 텍스트가 아닌 노드가 평범한 Data DOM 자식 선택과 보이는 field 값에 섞이지 않게 합니다
임포트된 값은 바인딩된 field 읽기를 즉시 동기화합니다. 기존 dataRef가 다른 접미사를 가리키던 field나 이전엔 해석되지 않던 대상이 생긴 field도 포함입니다
트랜잭션과 하위 수준 호출자
TXFAWidgetRuntime은 데이터 도메인 바인딩을 만들고 폼 field를 네이티브 데이터 값에 연결하며, 데이터 쓰기와 새 식별자 바인딩을 적용하고, 엔진이나 네이티브 발행이 실패하면 정확한 XDP 상태를 복원합니다
하위 수준 이벤트 호출자는 TXFAEventBindingDomain과 TXFAEventBinding의 DataIdentity, DataBindingEnabled 필드로 동등한 객체 관계를 공급합니다
xeakBindDataIdentity 액션은 새 가상 데이터 핸들을 발행된 네이티브 데이터 식별자에 바인딩합니다. 하위 수준 애플리케이션은 반환된 데이터 변경과 식별자 바인딩을 트랜잭션으로 적용해야 합니다
남은 객체 모델 적용 범위
레코드 윈도 탐색, 독립 데이터 노드 생성과 부모 재지정, 임의 데이터 속성, 완전한 템플릿 프로퍼티 노드 편집은 별도 통합 과제로 남아 있습니다
인스턴스 미러링은 기존 암시 데이터 바인딩 인스턴스 매니저 동작을 따릅니다. 추가 명시 바인딩 인스턴스 변경에는 바인딩 통합이 더 필요합니다
관련 API
라이브 SOM 경로, FormCalc 참조, HPDFXFAExecuteJavaScriptEvent, 인터랙티브 XFA 런타임