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

تعريف التطبيق المبني على البيانات

معرّف المخطط: model-driven-app@1 المخطط القابل للقراءة آليًا: model-driven-app.schema.json

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

الشكل​

الحقلالنوعمطلوبملاحظات
logicalNamestringنعممسبوق ببادئة الناشر، بصيغة snake_case صغيرة (مثلًا par_sales_app).
displayNamestringنعماسم التطبيق المقروء الذي يظهر على بطاقة المشغّل.
publisherPrefixstringنعمبادئة الناشر المالك؛ ويجب أن يبدأ الاسم المنطقي بها.
descriptionstringلاوصف قصير يظهر على بطاقة المشغّل.
iconstringلامفتاح الأيقونة لبطاقة المشغّل ولترويسة شريط التطبيق.
supportsTasksbooleanلاهل يشارك هذا التطبيق في العمليات. فبتفعيله تقدّم القشرة قائمة المهام وزر القرار ما دام التطبيق مفتوحًا؛ وبإيقافه لا ترسم أيًّا منهما. والإيقاف هو الأصل، لأن معظم التطبيقات ليست جزءًا من عملية، وصندوق وارد على واحد منها زخرفٌ لا يدخله شيء أبدًا.
homeوجهةنعمما يُفتح على /apps/{id}؛ ويجب أن يظهر في navigation. انظر أدناه.
navigationarrayنعممجموعة تنقّل واحدة أو أكثر (خريطة الموقع؛ انظر أدناه).
includesarrayلامكوّنات التطبيق: أشياء يستطيع فتحها وليست على خريطة موقعه. انظر أدناه.

الوجهة​

موضع يستطيع التطبيق الذهاب إليه — شكل واحد، يُستعمل لعنصر تنقّل ولـ home معًا. وهذا اختيار مقصود: تصير قاعدة «يجب أن تكون الصفحة الرئيسية موضعًا يذهب إليه التنقّل» مقارنةَ قيمتين من النوع نفسه، بدل ثلاث فحوص شبه متطابقة قد يفترق بعضها عن بعض نوعًا نوعًا.

الحقلالنوعمطلوبملاحظات
typeEntity | Dashboard | Reportنعمالأشياء الثلاثة التي يعرف المشغّل كيف يضعها على الشاشة: شبكة، ومضيف لوحة معلومات، وعارض تقارير.
targetstringنعمالاسم المنطقي للوجهة. ويحدّد type المخزن الذي يجب أن توجد فيه.

مجموعة التنقّل​

الحقلالنوعمطلوبملاحظات
titlestringنعمعنوان المجموعة الظاهر في تنقّل التطبيق الجانبي.
itemsarrayنعمعنصر تنقّل واحد أو أكثر (انظر أدناه).

عنصر التنقّل​

وجهة، مع الطريقة التي يريد بها هذا التطبيق تسميتها. وتنطبق التسمية والأيقونة البديلتان على الأنواع الثلاثة — فالتطبيق الذي يسمّي جدول Accounts «العملاء» له السبب نفسه ليسمّي لوحة معلومات «اليوم».

الحقلالنوعمطلوبملاحظات
typeEntity | Dashboard | Reportنعمما يفتحه هذا العنصر.
targetstringنعماسمه المنطقي (يجب أن يوجد في البيئة، بوصفه ذلك النوع).
displayNamestringلاتسمية بديلة لشريط هذا التطبيق؛ ويُستخدم الاسم المعروض للمكوّن نفسه إن أُغفلت.
iconstringلامفتاح الأيقونة لعنصر الشريط.
formsمصفوفة stringلالعناصر الجداول فقط. نماذج هذا الجدول التي يقدّمها هذا التطبيق، بالاسم المنطقي. انظر أدناه.
viewsمصفوفة stringلالعناصر الجداول فقط. عروض هذا الجدول التي يقدّمها هذا التطبيق، بالاسم المنطقي.

يجب أن تكون كل وجهة مشار إليها — في عنصر تنقّل وفي home — موجودة في البيئة في المخزن الذي يسمّيه نوعها، وأن يطابق home أحد عناصر التنقّل في type وtarget معًا. ويُفرض كلاهما عند الحفظ إضافةً إلى التحقق من المخطط (modelapps.app.unknown_entity، وmodelapps.app.unknown_dashboard، وmodelapps.app.unknown_report، وmodelapps.app.home_not_in_navigation).

أما forms وviews على عنصر Dashboard أو Report فتُرفَض ولا تُتجاهَل (modelapps.app.component_selection_not_allowed): إذ ليس لأيٍّ منهما نماذج أو عروض، فيكون مثل هذا الاختيار خطأً من كاتبه يختفي بلا صوت ويتركه يظن أنه ضيّق شيئًا.

اختيار المكوّنات — forms وviews​

يراكم الجدول على مدى عمره نماذج وعروضًا أكثر. والتطبيق الذي يعرضها كلها هو الطريق الذي يتحول به جدولٌ مرتَّب إلى تطبيق مزدحم، فيجوز لعنصر التنقّل أن يسمّي ما يقدّمه تطبيقه منها.

غياب المفتاح والمصفوفة الفارغة ليسا شيئًا واحدًا، و«تحديد كل شيء» ثالثهما.

القيمةالمعنى
المفتاح غائبكل نماذج الجدول/عروضه، بما فيها ما يُضاف لاحقًا. وهي حال الجدول الذي وُضع للتو في تطبيق.
قائمةاختيار مغلق. فالنموذج الذي يُضاف إلى الجدول بعد ذلك لا يظهر في هذا التطبيق حتى يُدرَج.
[]غير صالح. لا يمكن أن يعني «الكل» (فغياب المفتاح يعنيه) ولا يجوز أن يعني «لا شيء» — فالجدول بلا نموذج لا يُفتح.

ويجب أن يكون كل اسم مُدرَج نموذجًا/عرضًا لذلك الجدول، ويُتحقق منه عند الحفظ (modelapps.app.unknown_component).

من يجوز له فتح إحداها​

فتح لوحة معلومات وتشغيل تقرير هما منحان على ذلك المكوّن — إذنان باسم <logicalName>.Open و<logicalName>.Run يحملهما دور أمني كأي إذن آخر، مع *.Open / *.Run بوصفهما البدلين اللذين يظلان يغطيان ما يُبنى لاحقًا. ووضع أحدها في خريطة موقع لا يمنحه. وما تقرؤه بعد ذلك أدوات لوحة المعلومات ومجموعات بيانات التقرير يُرخَّص له على حدة في كل الأحوال، فالمستخدم الذي يبلغ لوحة لا بيانات له فيها يرى أدوات فارغة لا أرقام غيره.

الصفحة المضمَّنة — includes​

التنقّل يقول ما يعرضه التطبيق؛ وincludes يقول ما يحتويه، والتطبيق يحتوي أكثر ممّا يعرض. فعمليةٌ تفتح نموذجًا لجدول لا يتصفّحه أحد؛ وأمرٌ مصمَّم يفتح لوحة أُبقيت عمدًا خارج الشريط؛ وتقريرٌ يُبلَغ من سجل لا من التنقّل. ولولا هذه القائمة لتعذّر بلوغ كل وجهة كهذه، أو لوجب على كل تطبيق أن يعرض كل ما قد يفتحه يومًا.

الحقلالنوعمطلوبملاحظات
typeEntity | Dashboard | Report | StudioAppنعمأي نوع من الأشياء هذا.
targetstringنعماسمه المنطقي.
formsarray | nullلاالجداول فقط. نماذج هذا الجدول التي يجوز للتطبيق فتحها، بالاسم المنطقي — القاعدة نفسها في عنصر التنقّل.
viewsarray | nullلاالجداول فقط. عروض هذا الجدول التي يجوز للتطبيق فتحها. وقاعدتها قاعدة forms.

ويتبع forms وviews قاعدة اختيار المكوّنات أعلاه تمامًا: غيابها يعني الكل، والقائمة اختيار مغلق، والمصفوفة الفارغة غير صالحة.

مثال​

{
"logicalName": "par_sales_app",
"displayName": "Sales",
"publisherPrefix": "par",
"description": "Manage accounts and invoices",
"icon": "briefcase",
"home": { "type": "Dashboard", "target": "par_sales_overview" },
"navigation": [
{
"title": "Sales",
"items": [
{ "type": "Dashboard", "target": "par_sales_overview", "displayName": "Overview", "icon": "gauge" },
{ "type": "Entity", "target": "par_account", "displayName": "Accounts", "icon": "users" },
{
"type": "Entity",
"target": "par_invoice",
"forms": ["par_invoice_main"],
"views": ["par_invoice_active", "par_invoice_overdue"]
},
{ "type": "Report", "target": "par_invoice_print", "displayName": "Print invoices" }
]
}
]
}

يُفتح هذا التطبيق على لوحة معلوماته بدل شبكة من الصفوف، وهذا هو الغرض من home التي ليست جدولًا. وpar_invoice منتقى — يقدّم التطبيق واحدًا من نماذجه واثنين من عروضه، ولن يظهر هنا عرضٌ يُضاف إلى الجدول غدًا. أما par_account فلا يسمّي اختيارًا، فيقدّم التطبيق كل ما لذلك الجدول، الآن ولاحقًا.