XFA Query Node Collections
JavaScript ve FormCalc event'leri, scope-içi node occurrence'larını inceleyebilir ve runtime event'leri boyunca bağımsız sorgu listeleri tutabilir
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 özellikleri
node.all, aynı literal ada sahip scope-içi node'ların taze sıralı bir sorgu listesini döndürür; adsız bir node, onun yerine class adını kullanır
node.classAll, aynı class'a sahip scope-içi node'ların taze sıralı bir sorgu listesini döndürür — başka adları olan node'lar dâhil
node.index ve node.classIndex, ilgili scope'lar içindeki zero-based occurrence'ı döndürür
Adsız property-olmayan container'lar, adlandırılmış scope aramasına saydamdır — pozitif ve negatif göreli SOM occurrence'ları dâhil; property container'ları kendi scope'unu tutar
#field, * gibi literal adlar ve Unicode adlar, bu özellikler tarafından yazılmış adlar olarak eşleştirilir
Bağımsız liste operation'ları
| Üye | Davranış |
|---|---|
length | Liste entry'lerinin mevcut sayısı |
item(index) | Referans verilen node, negatif, noninteger veya aralık-dışı indeks için null |
namedItem(name) | O literal ada sahip ilk referans-verilen node, eşleşen node yoksa null |
clone() | Aynı node'lara referans veren yeni bağımsız entry depolaması |
append(node) | Aynı canlı node referansını sona ekleyin — duplicate bir referans dâhil |
insert(node, before) | Canlı bir node referansını ilk eşleşen referanstan önce ekleyin; null append eder |
remove(node) | İlk eşleşen referansı kaldırın; olmayan bir referans hata raise eder |
resolveNodes, all ve classAll tarafından döndürülen listeler bağımsız entry depolaması kullanır; o depolamayı değiştirmek form ve data ağaçlarını yerinde bırakır, bir referans-verilen node yazmak ise gerçek node'u değiştirir
Form ve property node.nodes koleksiyonları canlı child view'ları açığa çıkarır; onların clone() method'ları bağımsız sorgu listeleri döndürür — XFA Live Child Collections içinde anlatıldığı gibi
Data DOM node.nodes, ayrıca bağımsız bir clone() sağlar; onun mevcut append, insert ve remove method'ları native structural davranışlarını korur — Transactional XFA Data DOM Structure içinde anlatıldığı gibi
Array iterasyonu, indeksli okumalar ve enumeration, referans-verilen node'ları açığa çıkarır; doğrudan atama, silme, property yeniden-tanımlama, prototype değişiklikleri ve extension'ları önleme, sorgu listesini değiştirmeden önce hata raise eder
Persistence ve kararlı identity'ler
Script object'leri, bir sorgu listesini veya clone'u event'ler boyunca tutabilir; her operation, mevcut event resolver'ını ve transaction limitlerini kullanır
Sorgulanan instance-manager handle'ları, event'ler boyunca tutulduklarında veya klonlandıklarında operation'ları mevcut event grafiğine yönlendirir
Hayatta-kalan bir node'u yeniden adlandırmak veya yeniden sıralamak, onun tutulan liste identity'sini korur; bir tekrar-form instance'ını kaldırmak, o kaldırılmış referans üzerinden okuma ve yazmayı, replacement bir instance seçmek yerine başarısız kılar
Bağımsız bir liste, saklı referanslarını klonlayabilir ve önceden tutulan bir kaldırılmış-node referansını, o node'u dereference etmeden kaldırabilir
Sorgu listesi depolaması, runtime script state'idir; XDP kaydetmek native node value'larını ve yapısını kalıcılaştırır, yeni bir runtime ise yeni bir script-object session'ı başlatır
Transaction'lar ve limitler
Geçersiz node'lar ve üyelik referansları, o liste operation'ı depolamayı mutasyona uğratmadan önce başarısız olur; yakalanan bir hata, aynı event içindeki önceki geçerli operation'ları kullanılabilir bırakır
Yakalanmamış bir event hatası, operation bütçesi veya geçen-süre başarısızlığı, sorgu listesi mutation'larını, native value'ları, tekrar-instance'ları, tutulan script-object state'ini ve journal state'ini birlikte geri alır ve aynı runtime'ın yeniden denemesine izin verir
TXFAFormScriptLimits.MaxArrayItems, her tutulan liste uzunluğunu sınırlar ve bir event sırasında kümülatif liste object'lerini ve yeni tahsis edilen entry'leri ayrıca sınırlar; sıfır ayarı, 65.536'lık event context default'unu kullanır
Boş clone'lar object bütçesini tüketir, boş-olmayan clone'lar ayrıca entry bütçesini tüketir ve tutulan listeler ayrı başarılı event'ler boyunca sınırlı kalır
FormCalc ve PDF tüketimi
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 ve xfa.record path'lerinde FormCalc occurrence seçimi, native SOM resolution kullanır; bir collection property'sinden sonraki liste indeksleme o collection'ı indeksler
Runtime baytlarını XDP'ye kaydedin ve gerçek native field'lar ve görünümler üretmek için commit edilmiş value'lardan HPDFXFAWriteHeadlessPDF'e geçin — tutulan hayatta-kalan tekrar-instance referansları üzerinden edit'ler dâhil
TXFAHeadlessPDFOptions.Editable = False, onları flatten etmek yerine görünümlü read-only native field'lar oluşturur
Kapsam
Bu interface, bağımsız sorgu listeleri ve occurrence metadata sağlar; genel template/form node oluşturma ve klonlama, ek node-class scripting, schema validation ve harici media ayrı işler olarak kalır