استخدم هذه الصفحة قبل كتابة تعبير نموذج
يقيّم كل تعبير نموذج في KayanOS ضمن سياق: النموذج وقيمه المحفوظة أو الجارية والعنصر الحالي في شجرة النموذج ومعرفات الجلسة/العضو المختارة. قد يكون التعبير نفسه صالحاً في حقل وفارغاً أو مضللاً في آخر لأن السياق مختلف. استخدم هذا المرجع للقيم الافتراضية والرؤية وقابلية التحرير والتحقق والقيم المحسوبة ونص الإجراء وتعبيرات منشئ النموذج الأخرى. يصف القيم التي يكشفها منشئ النموذج؛ ولا يمنح وصولاً ولا يحول شرط رؤية إلى تفويض ولا يجعل البحث آمناً لمشارك عام. للصياغة وكتالوج الدوال الكامل، راجع بنية لغة التعبيرات وتعبيرات النماذج وعمليات البحث.
حدد أولاً موضع تقييم التعبير
قبل نسخ تعبير، حدد الأجزاء الأربعة لسياقه:
يعرض المنشئ أشكال سياق ممثلة لمساعدة كتابة التعبير. ليست هذه الأشكال معاينة لبيانات الإنتاج ولا يجوز استخدامها للاستنتاج أن حقلاً أو نتيجة محدد أو سجلاً متاح لكل مشارك وقت التشغيل.
جذور ومعرفات مستوى النموذج
يكشف السياق المشترك الجذور والمعرفات الثابتة التالية:
استخدم
$form.submissionNumber عندما ينبغي أن يسمي التعبير رقم التقديم
المخصص للعرض صراحةً. وهو ليس sessionId الداخلي، ولا يوجد اسم
submissionNumber في جذر السياق.
ليست $ جذراً سحرياً لقاعدة البيانات. تبدأ بمتغيرات النموذج وتضم أبناء النموذج العلويين المكشوفين في السياق المشترك. المتغير قيمة مباشرة، أما مفتاح الحقل فيحل إلى كائن الحقل المكشوف؛ استخدم .value لقراءة الإجابة المحفوظة. يجب الوصول إلى قيمة مكرر متداخل عبر سياق العنصر/الأب المحلي بدلاً من افتراض أنها قيمة عليا.
العنصر الحالي واختصارات الشجرة
لكل عنصر موضع في شجرة النموذج. يمنح KayanOS العنصر اختصارات محلية حتى لا يحتاج التعبير إلى مسار هش عبر النموذج كله.
استخدم قيمة أخ لتطبيق شرط محلي؛ فهذا أوضح وأكثر أماناً من الاعتماد على مسار طويل هش.
requires_inspection، عالج النتيجة صراحةً بدلاً من معاملة الخطأ/الفراغ كاعتماد.
القيم حسب نوع الحقل
يوفر محرر التعبير أشكالاً ممثلة حتى يرى المنشئ السلوك المتوقع للعنصر. تظل القيمة المحفوظة الفعلية مرتبطة بإعداد الحقل وإدخال المستخدم.
بالنسبة لحقل اختيار متعدد، اختبر سلوك القائمة الفعلي بدلاً من نسخ مقارنة اختيار مفرد:
كائنات العناصر المكشوفة والقوائم المتداخلة
يطابق الإكمال التلقائي كائنات النموذج العامة التي تستخدمها التعبيرات. يكشف كل عنصرkey وpath ومميّز فئته في type (مثل field أوsection)؛ ويكشف الحقل نوع الإدخال المحدد في fieldType، إضافة إلى title وtooltip وvalue وdefaultValue وeditable وrequired وvalidation وisValid وindex. تضيف حقول الاختيار selectionType وoptions وأحد record أوrecords. يضيف حقل المال currency، ويضيف حقل الملف multiple وaccept وmaxSizeBytes.
تكشف الأقسام title وdescription وeditable وchildren وindex وisValid. وتكشف المكررات repeaterTitle وminRepeat وmaxRepeat وrequestedRepeat وactualRepeat وinstances وrepeatType وisValid؛ كما تكشف مكررات الأقسام layoutMode وtableResponsiveMode وtableColumns. تكشف الإجراءات title وdescription وclickable وloading وactionType وisValid وcalls. ولا تظهر خصائص نوع الإجراء مثل linkTarget وdocxFieldKey إلا عندما يدعمها الإجراء.
تستخدم اقتراحات القوائم عنصراً ممثلاً واحداً حتى تكشف الكتابة بعد محدد قائمة مثل .signatures[. أو.instances[. خصائص العنصر. هذا العنصر عينة لبيانات الإكمال التلقائي، وليس دليلاً على أن القائمة الحية غير فارغة.
كائن التوقيع
يكشف عنصر التوقيع حالة التوقيع الحالية والمتجاوزة:
يكشف كل ملخص توقيع
id وrequestId وruleKey وmemberId وresolution وstatus وnotes وreason وsigningCapacity وsignedAt وsymbolicSignature وsymbolicSignatureHash وstale. عامل signingCapacity وsymbolicSignature كحمولتي دليل يمكن أن يتطور تركيبهما الداخلي؛ ولا تكتب قواعد سياسة تعتمد على حقول متداخلة غير موثقة.
المكررات: يتغير السياق لكل مثيل
استخدم مكرراً عندما يحتاج طلب خدمة المواطن عدداً متغيراً من الملاحظات أو المستندات أو صفوف المعاينة. يملك كل مثيل قيمه المحلية. ينبغي أن تستخدم قاعدة داخل صف ملاحظة قيمة/إخوة ذلك الصف لا قيمة على مستوى الطلب تشترك في تسمية عرضاً.المكررات التي يتحكم بها المستخدم
في المكرر الذي يتحكم به المستخدم يضيف العضو أو المشارك مثيلات ويحذفها ضمن الحدود المضبوطة. تعرف$index موضع المثيل الحالي لعبارة مثل «الملاحظة 2»؛ وليست معرف سجل ثابتاً وقد تتغير إذا أعيد ترتيب الصفوف أو حذفت.
مكررات وضع الحلقة
في مكرر وضع الحلقة تتوفر$item لعنصر المصدر و$index لموضعه. استخدم بديلاً مراجعاً لخاصية اختيارية.
$item في مكرر يتحكم فيه المستخدم.
قاعدة محلية بسيطة
في ملاحظة متكررة، اجعل الملاحظة مطلوبة فقط عندما يعلّم الصف الحالي غير آمن:النماذج العادية وغير المتصلة
النماذج غير المتصلة نوع نموذج مقيد، وليست نماذج عادية مؤجلة حتى الاتصال. يعطل المنشئ فيها الإجراءات والمتغيرات وحقول اختيار الكيان وحقول اختيار جلسة النموذج ومصادر الخيارات المعتمدة على الكيان والروابط العامة وروابط التعبئة المسبقة، كما يحظر دوال التعبير المعتمدة على البيانات/الصلاحيات. لصيغة معاينة غير متصلة اجعل التعبيرات محلية وحتمية:توجيه الجلسة إلى دور عند كيان
نطاق الدور الديناميكي عنصر توجيه على مستوى النموذج. يحل دوراً وكياناً عند حفظ جلسة نموذج عادي. اضبط الدور ورمز التوجيه في حقلين منفصلين. على سبيل المثال:- مفتاح الدور:
printing_manager - نوع النطاق:
locations - رمز التوجيه:
$.location.value
null. تستمر النماذج الحالية التي تستخدم roleScope(roleKey, entityId) في العمل، لكن عناصر التوجيه الجديدة لا تحتاج إلى هذه الدالة.
- تعني
null«لا يوجد توجيه» وهي نتيجة صالحة. - يمنع المسار غير الفارغ الحفظ إذا كان الدور أو الكيان غير موجود، أو تابعاً لمؤسسة أخرى، أو لا يطابق نوع النطاق.
- يربط التوجيه الجلسة بدور عند كيان؛ ولا يمنح أفعال العرض في القائمة أو الفتح أو التحديث أو الحذف أو الإجراءات.
- يحتفظ الدور الفارغ بقائمة الجلسات الموجهة إليه. لا يعاد كتابة سجل جلسة أو عضو عند إسناد عضو إلى الدور لاحقاً.
- معاينة المنشئ تشخيصية فقط. يعيد الخادم حل المسار والتحقق منه قبل حفظه.
- لا تدعم النماذج غير المتصلة نطاقات الأدوار الديناميكية.
ابنِ واختبر قاعدة تعتمد على السياق
استخدم بروتوكول الاختبار الصغير القابل للتكرار التالي:- صغ القرار بلغة عادية: «اعرض تفاصيل المعاينة عندما تكون
requires_inspectionصحيحة في هذا الطلب». - ضع القاعدة على الحقل/القسم الذي يملك القرار، لا على عنصر بعيد.
- استخدم أصغر جذر محلي أو مرجع أخ يعبر عنها.
- اختبر جلسات عضو وعام إذا كان النموذج يدعم كليهما، وأكد أنهما يريان الفرق غير الحساس المقصود فقط.
- اختبر الغياب/null وfalse وtrue ومثيل المكرر الأول/اللاحق وجلسة محفوظة/معاد فتحها.
- اختبر إجراء الخادم أو الإرسال المقابل، وتحقق من بقاء الفاعل غير المخول مرفوضاً حتى إن فرض قيمة على العميل.
- للنماذج غير المتصلة، شغّل المدقق غير المتصل واختبر إرسالة متزامنة حقيقية قبل النشر.

