Skip to main content

متى تستخدم تعبيرات النموذج

استخدم تعبير النموذج لاشتقاق قيمة افتراضية أو ضبط الرؤية أو قابلية التعديل أو حساب قيمة أو صياغة نص إجراء أو البحث عن بيانات خدمة لتجربة النموذج الحالية. ليس التعبير نظام صلاحيات على الخادم ولا بديلاً عن اعتماد مسار العمل. يوجد الكتالوج الكامل في دوال النماذج ومرشحات البحث. يشرح هذا الدليل الاستخدام الآمن لهذه الدوال. إعدادات حقل نموذج KayanOS لاستقبال طلبات خدمات المواطنين، بما فيها عناصر التحكم في الرؤية والتكرار وتعبير التحقق.

جذور النموذج

اكتب تعبيرات صغيرة ومحلية. يجب أن يعتمد شرط الحقل غالباً على إخوته أو قيمة نموذج واضحة لا على مسار طويل عبر قوائم متكررة عديدة.
تبقى التعبيرات القديمة مثل $.status و$.request_amount.value مدعومة، ويقترح محرر التعبيرات بدائلها باستخدام $values.

أنماط القوائم المتكررة

في التكرار الحلقي يكون $item عنصر المصدر و$index موضعه الصفري. وفي التكرار الذي يتحكم فيه المستخدم استخدم قيم المثيل/الإخوة الموجودة في بنية النموذج الحالية.
لا تستخدم عدد التكرار كبوابة سياسة مخفية. تحقق من قيم الحقول الفعلية التي تجعل الطلب مؤهلاً.

فحوص الواجهة ليست تفويضاً

تستطيع hasVerb وhasVerbOnRecord وhasScope وhasAnyScope تكييف ما يراه العضو في النموذج، لكنها لا تمنح صلاحية. تعيد دوال الفعل true أثناء تقييم الخادم، لذلك لا يمكن أن تكون تعبيراتك التي تستخدمها وسيلة الإنفاذ الوحيدة.
استخدم ذلك لإظهار كتلة موجهة للمراجع. أبقِ قواعد التفويض الفعلي وانتقال الحالة في سياسة خدمة الخادم المعنية.

البحث عن السجلات: اجعله ضيقاً وخاصاً وغير مخوّل

getRecord وgetRecords دالتا بيانات مريحتان للنموذج. قد تعيدان نتيجة فارغة/شبيهة بـ null عندما لا يتوفر سياق النموذج أو تنتهي مهلة البحث. يعمل البحث الخلفي عبر مسار بيانات على مستوى النظام؛ فهو لا يرشح النتيجة وفق صلاحيات السجل أو الحقل العادية للمشارك الحالي أو دوره أو نطاقه. وليس له وسيط يحد عدد نتائج البحث، لذلك قد يحمل المرشح الواسع كل السجلات المطابقة. وهذا يفرض ثلاثة حدود واضحة:
  1. يمكن لـ hasVerb* وhasScope* تغيير العرض فقط؛ ولا يخوّلان إجراءً.
  2. لا يجوز أبداً أن تقرر getRecord وgetRecords ما إذا كان المشارك مخولاً أو مستحقاً للبيانات.
  3. لا يجوز عرض نتيجة البحث لمشارك عام أو غير مخول. ليس الحقل المخفي آلية تحكم بالوصول.
استخدم مرشحاً انتقائياً على كيان وحقول صُممت عمداً لهذا الغرض، وتعامل بأمان مع غياب النتيجة:
لا تنسخ هذا كنمط بحث عام واسع. لا تستعلم كياناً يحوي بيانات شخصية أو مالية أو تشغيلية لمجرد تقرير الإظهار. فضّل سجلاً صغيراً معداً لغرض محدد لا يحوي إلا الحقول غير الحساسة اللازمة، ومرشح مساواة مرتبطاً بالطلب الحالي، ومخرجاً يراجعه مالك الخدمة. قبل نشر نموذج عام، اختبر بمشارك عام وأثبت أن أية قيمة يعيدها البحث لا تُعرض ولا تُصدّر ولا تستخدم لتخويل إجراء لهذا المشارك.

بناء المرشحات بـ f.

تبني دوال f. كائن مرشح قاعدة بيانات لـgetRecords، ولا ترشح قائمة عشوائية في الذاكرة. النمط الأوضح هو اقتران صغير:
استخدم f._in عندما تحتاج دالة انتماء مقروءة لا لبس فيها. اختبر مفاتيح الحقول وقيم الخيارات المخزنة بدقة، ولا تنشئ بحثاً واسعاً ثم تخفي النتائج بتعبير لاحق.

أيام العمل ومناوبات الخدمة

يمكن أن تستخدم isWeekend(date, entityId?) وisWeekday(date, entityId?) أيام العمل المضبوطة للمناوبة عند توافر كيان وبيانات خدمة مناسبين. وعند غياب تلك البيانات تعودان إلى السبت/الأحد. اعتبرهما دالتين للنموذج العادي المتصل واختبر جدول المنظمة المستهدفة.

حدود النموذج غير المتصل

تحظر النماذج غير المتصلة getRecord وgetRecords وhasVerbOnRecord وhasVerb وhasScope وhasAnyScope، كما تقيد ميزات نموذج مدعومة بالبيانات. اجعل تعبيرات النموذج غير المتصل ذاتية الاكتفاء: قيم الحقول والشروط البسيطة والدوال العامة الحتمية.
تحقق من النموذج غير المتصل قبل نشره. لا تعتمد على دالة يقترحها المحرر إذا كان مدقق العمل غير المتصل يحظرها.

مصفوفة الاختبار

أدلة ذات صلة