پرش به مطلب اصلی

تعریف برنامهٔ Model-Driven

شناسهٔ شِما: model-driven-app@1 شِمای قابل‌خواندن توسط ماشین: model-driven-app.schema.json

بازنمایی مرجع یک برنامهٔ Model-Driven (بخش 6.7) — یک برنامهٔ نام‌دار که زیرمجموعه‌ای گزیده از جدول‌ها، داشبوردها و گزارش‌های محیط را در قالب یک ناوبری (نقشهٔ سایت) با یک صفحهٔ خانه گرد هم می‌آورد، درست همان‌گونه که یک برنامهٔ model-driven در 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 انتخابی نام نمی‌برد، پس برنامه هرچه آن جدول دارد را، اکنون و بعدها، ارائه می‌دهد.