Dinamik FormCalc Eval
Eval(source), dinamik olarak verilen bir hesaplamayı native FormCalc derleyicisiyle derler ve EnableJavaScript etkin olduğunda genel olay host'u üzerinden yürütür
Kaynak, ifadeleri, koşulları, döngüleri, değişken bildirimlerini, yerel olarak bildirilen fonksiyonları ve alan mutasyonlarını içerebilir; son ifade sonuçtur ve gömülü adlar büyük/küçük harfe duyarsızdır
var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")
Kapsam ve nesneler
Ref ve referans ataması, değerlendirilen hesaplamaların içinde erişilebilirdir; çağıran olay ile aynı açık tanıtıcı ve sıradan değer-kopyalama kurallarını kullanır
Her değerlendirilen hesaplamanın kendi değişkenleri ve fonksiyonları vardır; çağıran hesaplama tarafından bildirilen değişkenleri veya fonksiyonları okuyamaz
Güncel alan, göreli form nesneleri, $form, $host ve $event erişilebilir kalır; Eval(null) null döndürür ve diğer scalar argümanlar kaynak metne dönüşür
Bir SOM predicate içinde aday, güncel alan veya subform bağlamını sağlar ve iç içe Eval o bağlamı devralır
Örneğin var secret=9 Eval("secret+1"), secret adlı form nesnesi yokken başarısız olurken Eval("var secret=2 secret+1") 3 döndürür
Transaction'lar ve replay
Bir kaynağın ilk kullanımı, yürütmeyi askıya alır; böylece native derleyici JavaScript'ini üretebilir; host, olay-öncesi script durumunu geri yükler, derlenmiş yanıtı sağlar ve hesaplamayı yeniden dener
Kaydedilmiş transport ve locale yanıtları, yeniden deneme sırasında tüketilir; böylece iç içe bir derleme harici transport callback'lerini tekrar etmez
Yalnızca nihai başarılı değerlendirme, script journal'ına girer; sözdizimi hataları, runtime hataları ve bütçe hataları, alan değerlerini, instance durumunu ve script durumunu runtime transaction'ı üzerinden geri yükler
Eval, gerçek calculated alanların ve validation script'lerinin içinde de çalışır; SaveToBytes, taahhüt edilmiş belge değerlerini korur
Bütçeler
Her olay, en fazla 64 farklı dinamik kaynağa, sekiz iç içe Eval çağrısına ve toplam dinamik kaynak artı derlenmiş yanıt baytları 2 MiB'ye izin verir; bu sınırlar, yapılandırılmış script girdisi, işlem, bellek, stack, journal ve geçen-süre sınırlarıyla birlikte uygulanır
Yapılandırılmış bir stack veya geçen-süre sınırı, adanmış iç içe geçme veya istek sınırından önce başarısız olabilir; derleme yeniden denemeleri olay son teslim süresini paylaşır
Özel bir JavaScript evaluator, native dinamik derleme isteklerine hizmet edemez; gemicik QuickJS yürütme yolunu kullanın
İlgili API'ler
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc Functions ve Interactive XFA Runtime