تنفيذ FormCalc الديناميكي

Eval(source) تترجم حسابًا مقدَّمًا ديناميكيًا بمترجم FormCalc الأصلي وتنفّذه عبر مضيف الأحداث العام عندما تكون EnableJavaScript مفعلة

يمكن أن يحتوي المصدر على تعبيرات وشرطيات وحلقات وإعلانات متغيرات ودوال معلنة محليًا وتحويلات حقول؛ والتعبير الأخير هو النتيجة، والأسماء المدمجة غير حساسة لحالة الأحرف

var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")

النطاق والكائنات

المرجع Ref وإسناد المرجع متاحان داخل الحسابات المنفَّذة، بقواعد handle الصريح ونسخ القيم العادية نفسها التي يستخدمها الحدث المستدعي

كل حساب منفَّذ له متغيرات ودوال خاصة به؛ ولا يمكنه قراءة المتغيرات أو الدوال المعلنة من الحساب المستدعي

الحقل الحالي وكائنات النموذج النسبية و$form و$host و$event تبقى متاحة؛ وEval(null) تعيد null، وسائط scalar الأخرى تصير نص مصدر

داخل مسند SOM، يزوّد المرشّح سياق الحقل أو subform الحالي، وEval المتداخلة يرث ذلك السياق

مثلًا، var secret=9 Eval("secret+1") تفشل عندما لا يوجد كائن نموذج اسمه secret، بينما Eval("var secret=2 secret+1") تعيد 3

المعاملات وإعادة التشغيل

أول استخدام لمصدر يعلّق التنفيذ ليتمكن المترجم الأصلي من إنتاج JavaScript الخاص به؛ ويعيد المضيف حالة السكربت السابقة للحدث ويقدّم الاستجابة المترجمة ويعيد محاولة الحساب

استجابات النقل وlocale المسجَّلة تُستهلك أثناء إعادة المحاولة، فلا تكرّر الترجمة المتداخلة callbacks النقل الخارجية

التقييم الناجح الأخير فقط يدخل سجل السكربتات؛ وأخطاء الصياغة وأخطاء runtime وفشل الميزانية تستعيد قيم الحقول وحالة النسخ وحالة السكربت عبر معاملة بيئة التشغيل

Eval تعمل أيضًا داخل الحقول المحسوبة الفعلية وسكربتات التحقق؛ وSaveToBytes تحفظ قيم المستند المُرسَلة

الميزانيات

كل حدث يسمح بحد أقصى 64 مصدرًا ديناميكيًا مميزًا وثماني استدعاءات Eval متداخلة و2 MiB من مجموع المصدر الديناميكي مع بايتات الاستجابة المترجمة؛ وتسري هذه السقوف بجانب حدود إدخال السكربت والعمليات والذاكرة والمكدس والسجل والوقت المنقضي المهيأة

حد المكدس أو الوقت المنقضي المهيأ قد يفشل قبل سقف التداخل أو الطلبات المخصص؛ ومحاولات إعادة الترجم تتشارك الموعد النهائي للحدث

مقيّم JavaScript مخصص لا يمكنه خدمة طلبات الترجمة الديناميكية الأصلية؛ استخدم مسار تنفيذ QuickJS المرفق

واجهات مرتبطة

HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, دوال FormCalc وبيئة تشغيل XFA التفاعلية