XFA Query 노드 컬렉션

JavaScript와 FormCalc event는 scope 안의 노드 occurrence를 검사하고 런타임 event를 넘나드는 독립적인 query 목록을 유지할 수 있습니다

const siblings = xfa.record.amount.all;
const retained = siblings.clone();
retained.remove(retained.item(0));
retained.insert(siblings.item(0), null);
retained.item(0).rawValue = "42";

Occurrence property

node.all은 같은 literal 이름을 가진 scope 안의 노드로 이루어진 새 정렬 query 목록을 반환합니다. 이름 없는 노드는 클래스 이름을 대신 씁니다

node.classAll은 다른 이름을 가진 노드를 포함해 같은 클래스를 가진 scope 안의 노드로 이루어진 새 정렬 query 목록을 반환합니다

node.index와 node.classIndex는 각 scope 안에서 0부터 시작하는 occurrence를 반환합니다

property가 아닌 이름 없는 컨테이너는 양수와 음수 상대 SOM occurrence를 포함해 이름 scope 조회에 투명합니다. property 컨테이너는 자기 scope를 유지합니다

#field, *, Unicode 이름 같은 literal 이름은 작성된 이름 기준으로 매칭됩니다

독립 목록 연산

멤버동작
length현재 목록 항목 수
item(index)참조된 노드. 음수, 비정수, 범위 밖 인덱스는 null
namedItem(name)그 literal 이름을 가진 첫 참조 노드. 맞는 노드가 없으면 null
clone()같은 노드를 참조하는 새 독립 항목 저장소
append(node)같은 live 노드 참조를 끝에 추가. 중복 참조도 포함합니다
insert(node, before)처음 일치하는 참조 앞에 live 노드 참조를 삽입. null이면 append합니다
remove(node)처음 일치하는 참조를 제거. 없는 참조는 오류를 일으킵니다

resolveNodes, all, classAll이 반환하는 목록은 독립적인 항목 저장소를 씁니다. 그 저장소를 바꾸는 것은 form과 데이터 트리를 그대로 두지만, 참조된 노드에 쓰는 것은 실제 노드를 바꿉니다

Form과 property node.nodes 컬렉션은 live 자식 뷰를 노출하며, clone() 메서드는 XFA Live Child Collections에서 설명한 대로 독립적인 query 목록을 반환합니다

Data DOM node.nodes도 독립적인 clone()을 제공합니다. 기존 append, insert, remove 메서드는 트랜잭션 XFA Data DOM 구조에서 설명한 네이티브 구조 동작을 유지합니다

배열 순회, 인덱스 읽기, 열거는 참조된 노드를 노출합니다. 직접 대입, 삭제, property 재정의, prototype 변경, 확장 방지는 query 목록을 바꾸기 전에 오류를 일으킵니다

영속성과 안정 identity

script 객체는 event를 넘나드는 query 목록이나 clone을 유지할 수 있습니다. 각 연산은 현재 event resolver와 트랜잭션 한도를 씁니다

조회된 instance-manager handle은 event를 넘나드며 유지되거나 clone될 때 현재 event 그래프로 연산을 라우팅합니다

살아남은 노드의 이름 변경이나 재정렬은 유지된 목록 identity를 지킵니다. 반복 form 인스턴스를 제거하면 그 제거된 참조를 통한 읽기와 쓰기가 대체 인스턴스를 고르는 대신 실패합니다

독립 목록은 저장 참조를 clone하고 이전에 유지한 제거 노드 참조를 그 노드를 역참조하지 않고 제거할 수 있습니다

query 목록 저장소는 런타임 스크립트 상태입니다. XDP 저장은 네이티브 노드 값과 구조를 영속하고, 새 런타임은 새 script 객체 세션을 시작합니다

트랜잭션과 한도

잘못된 노드와 멤버십 참조는 그 목록 연산이 저장소를 바꾸기 전에 실패합니다. 잡힌 오류는 같은 event 안의 이전 유효 연산을 계속 쓸 수 있게 합니다

잡히지 않은 event 오류, 연산 예산, 경과 시간 실패는 query 목록 변경, 네이티브 값, 반복 인스턴스, 유지된 script 객체 상태, 저널 상태를 함께 복원하므로 같은 런타임이 재시도할 수 있습니다

TXFAFormScriptLimits.MaxArrayItems는 유지 목록 길이 하나하나를 제한하고, 한 event 동안 누적 목록 객체와 새로 할당된 항목을 별도로 제한합니다. 0 설정은 event 컨텍스트 기본값인 65,536을 씁니다

빈 clone은 객체 예산을 소비하고, 비어 있지 않은 clone은 항목 예산도 소비합니다. 유지 목록은 별개의 성공 event에 걸쳐 상한 안에 유지됩니다

FormCalc와 PDF 소비

output = Concat(Sum(xfa.datasets.data.main.amount.all), ":",
  xfa.datasets.data.main.amount.all.length, ":",
  xfa.datasets.data.main.amount[1].classIndex)

literal xfa.form, xfa.datasets, xfa.record 경로에 대한 FormCalc occurrence 선택은 네이티브 SOM 해석을 씁니다. 컬렉션 property 뒤의 목록 인덱싱은 그 컬렉션을 인덱싱합니다

런타임 바이트를 XDP로 저장해 HPDFXFAWriteHeadlessPDF로 넘기면 커밋된 값에서 실제 네이티브 필드와 모양을 생성합니다. 유지된 살아남는 반복 인스턴스 참조를 통한 편집도 포함됩니다

TXFAHeadlessPDFOptions.Editable = False는 flatten하는 대신 모양이 있는 읽기 전용 네이티브 필드를 만듭니다

커버리지

이 인터페이스는 독립 query 목록과 occurrence 메타데이터를 제공합니다. 일반 template/form 노드 생성과 복제, 추가 노드 클래스 스크립팅, schema 검증, 외부 미디어는 별도 작업으로 남아 있습니다

XFA 위젯 런타임 · 네이티브 Data DOM