트랜잭션 XFA Data DOM 구조
JavaScript event는 네이티브 Data DOM 요소를 만들고, 복제하고, 이름을 바꾸고, attach하고, 순서를 바꾸고, detach할 수 있습니다. 스크립트는 즉시 읽을 수 있고 네이티브 변경은 트랜잭션 전체에 걸쳐 영속됩니다
const record = xfa.record;
const value = xfa.datasets.createNode("dataValue");
value.name = "amount";
value.value = "42";
record.nodes.append(value);
const retained = value.clone(false);
record.nodes.remove(value);
record.nodes.insert(value, record.nodes.item(0));
지원되는 연산
xfa.datasets.createNode(className, name = "", namespace = "")은 attach되지 않은 dataGroup 또는 dataValue를 만듭니다. 자격이 붙은 이름은 비어 있지 않은 네임스페이스 URI를 요구합니다
node.clone(recursive = true)은 새 identity를 가진 attach되지 않은 Data DOM 사본을 만듭니다. false는 자식 노드를 제외하면서 요소 자체의 메타데이터와 값은 유지합니다
node.name은 Data DOM 요소에 대해 쓰기 가능하며 네임스페이스, 형제 순서, 자손, 유지된 별칭을 보존합니다. 이름 없이 만든 노드는 attach 전에 유효한 로컬 이름을 받아야 합니다
node.nodes.length, item(index), namedItem(name)은 살아 있는 정렬된 요소 자식을 읽습니다. 맞는 자식이 없으면 item과 namedItem은 null을 반환합니다
nodes.append(node)와 nodes.insert(node, before)는 같은 객체를 소유자의 자식으로 옮깁니다. insert(node, null)은 append입니다
nodes.remove(node)는 직접 자식을 detach하면서 객체와 하위 트리를 유지된 별칭과 이후 다시 attach에 계속 쓸 수 있게 합니다
xfa.record는 Data DOM 데이터 루트 아래 현재 첫 번째 record를 반환하고 구조 편집 뒤 갱신됩니다
identity, XML, 바인딩
script 객체는 event를 넘어 노드, 자손, 소유 자식 컬렉션을 유지할 수 있습니다. 살아 있는 별칭은 attach, detach, 이름 변경, rollback 뒤에도 같은 네이티브 객체로 해석됩니다
loadXML과 saveXML은 새로 만들거나 옮긴 요소에서 작동하며, 같은 event 안에서 import한 뒤 옮긴 자손도 포함됩니다
안정적인 네이티브 identity 덕분에 import된 자손 별칭이 위치 변화 뒤에 다른 자식으로 조용히 해석되는 일이 없습니다
상속된 속성 네임스페이스, 명시적인 빈 기본 네임스페이스 리셋, 주석, processing instruction, CDATA, Unicode 값은 clone, 이동, 저장, 다시 읽기를 거쳐 유지됩니다
구조 변화 뒤 form 바인딩이 새로 고쳐지고, 새로 attach된 데이터 노드를 통해 쓴 값은 다른 인스턴스를 바꾸지 않고 대응하는 반복 form 인스턴스에 도달합니다
트랜잭션과 한도
잘못된 클래스, XML 이름, 형제 참조, 사이클, 외부 노드는 해당 개별 연산이 살아 있는 스크립트 그래프를 바꾸기 전에 실패합니다
잡히지 않은 스크립트 오류, 네이티브 적용 실패, cancellation, 작업 상한, 경과 시간 한도는 event 전체를 복원합니다. attach/detach된 노드, 바인딩 값, 유지된 별칭, 어휘 script 객체 상태, 저널 상태가 모두 되돌려지며, 같은 런타임이 이후 재시도할 수 있습니다
구조 노드와 detached 트리는 네이티브 노드, 깊이, UTF-8 바이트 상한을 공유합니다. 원본 스크립트 트랜잭션 마감 시한은 JavaScript와 네이티브 변경에 함께 적용됩니다
PDF 소비
런타임을 XDP로 저장해 그 바이트를 HPDFXFAWriteHeadlessPDF로 넘기면 바뀐 데이터 바인딩에서 실제 네이티브 PDF 필드와 모양을 만듭니다
TXFAHeadlessPDFOptions.Editable = False는 모양이 있는 읽기 전용 네이티브 필드를 만들며, 이 설정은 flatten하지 않습니다
현재 커버리지
이 구조 인터페이스는 Data DOM을 커버합니다. 일반 template/form 노드 생성과 복제, 독립적인 query-list 변경, 완전한 노드 클래스 스크립팅은 별도 구현 과제로 남아 있습니다