XFA 폼 트리 생성과 편집

TXFAWidgetRuntime은 xfa.form과 노드 컬렉션을 통해 라이브 폼 트리의 트랜잭션적 JavaScript 생성, 복제, 편집을 지원합니다

라이브 폼 트리는 독립적인 네이티브 identity를 가지며, 작성된 템플릿을 바꾸지 않고 XDP 폼 패킷으로 저장할 수 있습니다

필드 만들기와 삽입

var row = xfa.resolveNode("row[1]");
var field = xfa.form.createNode("field", "additional");
row.nodes.append(field);
field.w = "160pt";
field.h = "24pt";
field.ui.getElement("textEdit");
field.font.typeface = "DejaVu Sans";
field.rawValue = "Additional value";

createNode(className, name, namespaceURI)는 분리된 노드를 반환하며, 선택적 인수가 생략되면 빈 이름과 모델 네임스페이스가 쓰입니다

받아들이는 클래스에는 field, subform, draw, area, exclGroup과 런타임 속성 스키마가 인식하는 속성 클래스가 있습니다

노드를 만드는 것만으로는 폼에 삽입되거나 보이는 위젯이 만들어지지 않고, 필수 UI와 값 속성을 붙여야 합니다

컬렉션 연산과 복제

연산동작
parent.nodes.append(node)분리되거나 붙어 있는 노드를 부모의 라이브 자식 컬렉션 끝으로 옮깁니다
parent.nodes.insert(node, before)같은 부모의 기존 자식 바로 앞으로 노드를 옮깁니다
parent.nodes.remove(node)나중 재사용을 위해 스크립트 identity를 유지하면서 자식을 분리합니다
node.clone(true)별개의 네이티브와 스크립트 identity를 가진 분리된 깊은 복제를 반환합니다
node.clone(false)자식 노드나 복사된 필드 값 없는 분리된 얕은 복제를 반환합니다

컬렉션 순서, parent, 속성 조회, 지원되는 SOM 해석은 이벤트 안에서 성공한 편집을 즉시 반영합니다

스크립트 객체가 유지한 참조는 커밋된 편집이나 이벤트 롤백 뒤에도 자기 노드를 계속 가리키며, 분리된 깊고 얕은 복제를 포함합니다

사이클, 다른 부모의 참조 자식, 폼 연산에 전달된 데이터 모델 노드는 그 무효 연산이 트리를 바꾸기 전에 예외를 일으킵니다

폼 모델 루트는 새로 만든 subform과 필드를 담을 수 있지만, 모델 루트 자체는 옮기거나 복제할 수 없습니다

반복 스코프와 초기 인스턴스

실제 폼 인스턴스는 작성된 이름이 같거나, 데이터 컨텍스트가 다르거나, datasets 패킷이 없어도 별개의 identity를 유지합니다

빈 병합은 명시적 occur.initial 개수를 쓰고, initial이 없으면 occur.min을 쓰며, 없는 max는 min으로 기본 설정됩니다

빈 병합에서 최소와 최대 밖의 초기 개수는 허용되며, 0개 초기 복사본도 포함입니다

중첩되고 이름 없는 subform은 자기 발생 경로를 유지하고, 이 인스턴스들을 구체화해도 datasets 패킷이 합성되지 않습니다

이 발생 규칙은 XML Forms Architecture 3.3 339–345쪽을 따릅니다

커밋, 롤백, 출력

성공한 이벤트는 구조 저널을 적용하고, 네이티브 위젯을 다시 만들고, 편집된 폼을 SaveToBytes와 자동 네이티브 PDF 생성에 사용할 수 있게 합니다

잡히지 않은 스크립트 예외, 네이티브 커밋 실패, 초과된 이벤트 예산은 원본 문서, 위젯 identity, 유지된 스크립트 상태를 복원해 이후 이벤트가 재시도할 수 있습니다

기존 연산, 노드, 깊이, 바이트, 위젯, 경과 시간 예산도 구조 준비와 커밋에 적용됩니다

저장된 폼 인스턴스는 다시 로드해 HPDFXFAWriteHeadlessPDF에 전달할 수 있으며, 공급된 폰트 바이트로 실제 PDF 필드와 appearance 스트림을 만듭니다

범위

이 API는 라이브 폼 모델과 그 지원 속성 스키마를 편집합니다

일반 xfa.template 편집, 완전한 choice subform-set 처리, 전체 XFA 클래스 스키마, 임의 바인딩 selector 조합은 별개의 기능입니다