إنتقل إلى المحتوى الرئيسي

تعريف النموذج المبني على البيانات

معرّف المخطط: model-driven-form@2

الإصدار المستبدَل: يبقى model-driven-form@1 (model-driven-form-v1.schema.json) منشورًا ومسجَّلًا كي يظل الحل المنشور سلفًا يُتحقق منه مقابل المخطط الذي أُلِّف عليه. فالإصدار الثاني يضيف فقط الخاصية الاختيارية controlProps.lookupView، ومن ثم فكل تعريف صالح في الإصدار الأول صالح في الإصدار الثاني أيضًا. المخطط القابل للقراءة آليًا: model-driven-form.schema.json

التمثيل المرجعي لنموذج في Model-Driven Apps (القسم 6.7) — وهو التخطيط المستخدم لعرض سجل واحد وتحريره. ويجري التحقق منه بالطريقة نفسها سواء جاء من المصمّم، أو من استدعاء API، أو من مساعد ذكاء اصطناعي، أو من استيراد حل.

الشكل​

الحقلالنوعمطلوبملاحظات
logicalNamestringنعممسبوق ببادئة الناشر، بصيغة snake_case صغيرة.
displayNamestringنعماسم النموذج المقروء.
entitystringنعمالاسم المنطقي للجدول المالك.
descriptionstringلاالسطر الظاهر تحت العنوان في شريط عنوان النموذج.
iconstringلاالأيقونة الظاهرة على شريط عنوان النموذج.
sectionsarrayأحدهماقسم معنون واحد أو أكثر — وهو التخطيط المسطّح القديم (انظر أدناه).
tabsarrayأحدهماتخطيط علامات التبويب الأغنى (انظر أدناه).
actionsarrayلاإجراءات شريط أوامر قابلة للتصميم.

يحمل النموذج إما sections أو tabs، ولا يجوز أن يخلو منهما معًا. وينبغي للتعريفات الجديدة استخدام tabs؛ أما sections فمقبولة كي تستمر النماذج القائمة في العمل، وتُعامل بوصفها علامة تبويب واحدة من صفوف أحادية العمود.

القسم (تخطيط sections القديم)​

الحقلالنوعمطلوبملاحظات
titlestringنعمعنوان القسم.
columnsintegerنعمأعمدة التخطيط، من 1 إلى 4.
fieldsarrayنعممواضع الحقول (انظر أدناه).

علامة التبويب (تخطيط tabs)​

الحقلالنوعمطلوبملاحظات
idstringلامعرّف ثابت لدى المصمّم.
titlestringنعمعنوان علامة التبويب.
iconstringلاالأيقونة الظاهرة بجوار عنوان علامة التبويب.
rowsarrayنعمصفوف تخطيط بعرض كامل: { id?, columns: 1–4, sections: [...] }، وكل قسم { id?, title, icon?, span?, fields, timeline? }.

موضع الحقل​

الحقلالنوعمطلوبملاحظات
fieldstringنعمالاسم المنطقي للحقل (يجب أن يكون معرّفًا على الجدول).
labelstringلاتسمية بديلة؛ ويُستخدم الاسم المعروض للحقل إن أُغفلت.
controlstringلاالاسم المنطقي لـعنصر تحكم مخصص يُركَّب بدلًا من محرّر الحقل الأصلي. ويجب أن يكون عنصر التحكم مثبتًا في البيئة؛ فإن لم يكن، يعود الحقل إلى محرّره الأصلي.
controlTypestringلاعنصر التحكم المدمج الذي يُعرض الحقل به (القسم 6.13.5). واحد من Text، TextArea، Check، Toggle، Date، DateTime، Time، Lookup، Dropdown. أغفله لتترك للـ Player اختيار المُدخل الافتراضي لنوع بيانات الحقل.
controlPropsobjectلاخصائص عنصر التحكم المختار (انظر أدناه).

أسبقية عناصر التحكم: يتقدّم control المخصص على controlType، الذي يتقدّم بدوره على الافتراضي المرتبط بنوع بيانات الحقل. وإن أُغفل كلاهما اختار الـ Player الافتراضي.

خصائص عنصر التحكم (controlProps)​

الحقلالنوعيقرؤهملاحظات
dateFormatstringDate، DateTime، Timeصيغة العرض. الرموز: yyyy/yy، MM، dd، HH، mm، ss؛ وأي محارف أخرى تُعرض حرفيًا.
trueLabelstringCheck، Toggleالتسمية المعروضة لحالة "نعم".
falseLabelstringCheck، Toggleالتسمية المعروضة لحالة "لا".
rowsintegerTextAreaعدد الصفوف الظاهرة، من 2 إلى 20.
lookupEntitystringLookupالاسم المنطقي للجدول الذي يُحلّ حقل البحث مقابله.
lookupViewstringLookupالاسم المنطقي للعرض الذي يوفّر الأعمدة الظاهرة في لوحة نتائج حقل البحث. وغيابه يترك للمنصة أن تحلّ عرضًا — راجع الخاصية viewType في مخطط العرض.
lookupRowCountintegerLookupكم صفًّا مرشَّحًا تعرض لوحة حقل البحث دفعةً واحدة (من ١ إلى ٥٠٠). وغيابه يستخدم إعداد المنصة الافتراضي وهو ١٠. ويقيّد الخادم أي عدد يُطلب — فالمنتقي ليس تقريرًا. أُضيف بعد الإصدار الثاني بالتوسيع في مكانه: فكل تعريف كان صالحًا بدونه ما زال صالحًا.
optionsarrayDropdownخيارات ثابتة، كل منها { value, label }، تخص هذا الحقل وحده. وفضّل مجموعة خيارات لأي شيء يُعاد استخدامه عبر الحقول أو الجداول: فالمجموعة مكوّن مشترك ومُصدَّر بقيم محصّنة من التصادم، بينما هذه الخيارات قائمة خاصة على نموذج واحد. والحقل الذي نوع بياناته OptionSet يتجاهل هذه الخاصية ويأخذ من مجموعته.

الخصائص التي لا تنطبق على controlType المختار تُتجاهل، لا تُرفض — فتبديل عنصر تحكم حقل ثم العودة عنه لا يفقد إعداداته.

يجب أن يكون كل field مشار إليه حقلًا معرّفًا على الجدول — ويُفرض ذلك عند الحفظ إضافةً إلى التحقق من المخطط.

قسم المخطط الزمني (timeline)​

يمكن أن يكون القسم في علامة التبويب مخططًا زمنيًا بدلًا من مجموعة حقول: سجلات الجداول الأخرى التي يشير حقل البحث فيها إلى السجل المفتوح، مدمجة والأحدث أولًا — رسائل العميل ومكالماته وملاحظاته في عمود واحد. القسم إما هذا أو ذاك: عند وجود timeline يجب أن تكون fields مصفوفة فارغة.

الحقلالنوعمطلوبملاحظات
sourcesarray (١–١٠)نعمالجداول التي يقرؤها، إدخال لكل جدول (أدناه).
pageSizeinteger (٥–١٠٠)لاعدد العناصر قبل عرض المزيد؛ ٢٠ عند غيابه.

كل مصدر:

الحقلالنوعمطلوبملاحظات
entitystringنعمالاسم المنطقي لجدول المصدر.
regardingstringنعمحقل بحث في جدول المصدر يستهدف جدول النموذج، أو حقل بحث متعدد الجداول يدرجه. يعرض المخطط الصفوف التي قيمتها هي السجل المفتوح.
datestringنعمحقل تاريخ ووقت في المصدر (بما فيها حقول النظام مثل created_at_utc). تُرتَّب العناصر حسبه، الأحدث أولًا.
titlestringنعمالحقل الذي يُعنوَن به كل عنصر.
bodystringلاحقل تُعرض بداية نصه تحت كل عنصر.
typestringلاحقل مجموعة خيارات يميّز صفوف المصدر. يأخذ كل عنصر أيقونته ولونه من خياره، ويعرض المرشّح زرًا لكل خيار، ويقدّم جديد إدخالًا معبّأً مسبقًا لكل خيار.
statusstringلاحقل يُعرض بجانب تاريخ كل عنصر.

عند الحفظ وعند الاستيراد يُتحقَّق من كل اسم مقابل جداول البيئة: يجب أن يوجد جدول المصدر، وأن يستطيع regarding الإشارة إلى جدول النموذج، وأن يكون date تاريخًا، وأن يكون type اختيارًا (Choice)، وأن توجد البقية. المخطط الذي يخالف أيًّا من ذلك يُرفض (modelapps.form.timeline_*) بدل أن يُعرض فارغًا. حذف حقل يستخدمه المخطط يزيله منه: يُسقَط الجزء الاختياري، ويُزال المصدر الذي يفقد regarding أو date أو title.

مثال​

{
"logicalName": "par_invoice_main",
"displayName": "Main",
"entity": "par_invoice",
"description": "The invoice's main form",
"icon": "Receipt",
"tabs": [
{
"id": "tab-general",
"title": "General",
"rows": [
{
"id": "row-1",
"columns": 2,
"sections": [
{
"id": "sec-header",
"title": "Header",
"fields": [
{ "field": "par_name" },
{ "field": "par_total", "label": "Amount" },
{
"field": "par_due",
"controlType": "Date",
"controlProps": { "dateFormat": "dd/MM/yyyy" }
},
{
"field": "par_paid",
"controlType": "Toggle",
"controlProps": { "trueLabel": "Paid", "falseLabel": "Unpaid" }
},
{ "field": "par_signature", "control": "par_signature_pad" }
]
}
]
}
]
}
]
}