Domain 2 β€” Module 1 of 4 25%
5 of 15 overall
Domain 2: Create intelligent applications Free ⏱ ~22 min read

Model-Driven Apps: Forms, Views, Charts and Access

Composing a model-driven app from the data model β€” and the access-control decisions that determine who sees which form, which view, and which app.

Model-driven starts from the data

Simple explanation

A model-driven app is an app that builds itself from your tables.

You do not draw the screens. You tell the app β€œinclude Depot Run, Depot and Account,” and it produces lists, record pages, and navigation using the forms and views you defined on those tables.

The trade-off is straightforward: you get a lot of app for very little effort, but you get less control over exactly where things sit on the screen. Canvas apps trade the other way.

Forms and views, revisited from the app side

You met forms and views as data-model artefacts. From the app side, two extra ideas matter.

What each model-driven component is responsible for
ArtefactAnswers the questionConfigured on
ViewWhich records, which columns, what order?The table β€” then surfaced in apps
Main formWhat does one record look like when opened?The table β€” the primary form type in model-driven apps
Site mapHow does a user navigate this app?The app itself, in the app designer
ChartWhat does this set of records look like visually?The table β€” displayed against a view, but not welded to one
DashboardWhat do several charts and lists look like together?The app or the system
Charts read from a view β€” but they are not tied to one

A chart in a model-driven app does not query independently β€” it visualises the records in the view it is currently displayed with. Change the view’s filter and the chart changes with it.

That is why β€œthe chart shows the wrong records” is usually a view problem, not a chart problem. The fix is upstream.

The nuance that catches people: the view you pick while building is a preview, not a permanent binding. Microsoft is explicit β€” β€œThe view isn’t permanently associated with the chart. The next time you open the chart, the chart displays using the configured default view. You can change the view to display the chart for the data from a different view.”

So a user can point the same chart at a different view and get a different picture. If an answer option claims a chart is locked to the view it was authored against, that option is wrong.

One more checkable number while you are here: charts display views that return up to 50,000 records.

Access: three separate levers

This is where model-driven apps get genuinely testable, because Microsoft lists two distinct access objectives β€” access to forms and views, and access to model-driven apps β€” and neither is the same as record security.

Four levers that are frequently conflated
LeverWhat it controlsWhat it does NOT control
Access to the appWhether a user can open the app at all β€” you assign security roles, or share directly with individual users and teams from the People listWhat data they see once inside. That is still the table's security roles
Access to formsWhich form layout a role sees when opening a recordWhether they can retrieve the underlying data by other means
Access to viewsWhich non-default public views a role sees in the table's view selector, once role-based view access is enabled for the environmentWhich records those views return β€” that is record-level security
Table security rolesWhich records a user can create, read, write, deleteWhich app or form they use to do it
The two-lock model

Think of it as two locks a user must pass:

  1. The app lock β€” has this app been shared with me, either through a security role or directly with me as a user or team from the People list? If neither, the app does not appear in my list at all.
  2. The data lock β€” does my security role let me read these records? If not, I open the app successfully and see an empty list.

The classic troubleshooting question describes exactly that second state: β€œthe user can open the app but sees no records.” Granting more app access will not help. The problem is the table privileges.

Form access is not a security boundary for data

Restricting a role to a form that omits a sensitive column does not protect that column. The user can still reach the value through views, exports, search, or the API.

Form access is about giving each audience a sensible layout. If the requirement is genuine confidentiality, the answer is column-level security β€” as covered in Domain 1.

Composing the app

Composing is the act of choosing which components the app contains and how a user navigates them.

What 'compose' actually involves
  • Pick the tables the app needs. Fewer is better β€” every table you add is another thing to secure and maintain.
  • Choose which forms and views of those tables the app surfaces.
  • Build the navigation β€” areas, groups and subareas in the site map.
  • Add pages β€” including dashboards and, as of recent releases, generative pages (the next module).
  • Publish, then share β€” by assigning security roles, or by adding individual users and teams from the People list.

An app that is published but not shared is invisible. An app that is shared but whose users lack table privileges is empty. Both states look like β€œit doesn’t work” to the user, and telling them apart is the skill.

Kite Freight’s dispatch app

Nadia composes a model-driven app called Depot Dispatch:

DecisionChoiceReasoning
TablesDepot Run, Depot, AccountThe minimum set that supports the dispatcher’s job
Views surfacedActive Runs Today, Delayed Runs, All RunsDispatchers work by exception, so the delayed view is the landing point
ChartRuns by status, shown against Active Runs Today by defaultRavi wants the shape of the day at a glance
FormsDispatcher form (operational columns) and Finance form (adds cost)Two audiences, two layouts
Cost columnColumn-level security, not form omissionThe Dispatcher form hiding cost is convenience; the security is at column level
SharingDispatcher and Finance security roles assigned to the appWithout this the app does not appear for anyone

Two weeks later a new dispatcher reports the app is empty. Nadia checks the app sharing first β€” it is fine. The actual cause is that the new hire was never given the Dispatcher security role on the Depot Run table. The app lock was open; the data lock was not.

Quick recall

Question

A user can open a model-driven app but sees no records. Which lever is the problem?

Click or press Enter to reveal answer

Question

Does restricting a role to a form that omits a column protect that column?

Click or press Enter to reveal answer

Question

A chart in a model-driven app shows the wrong records. Where do you look first?

Click or press Enter to reveal answer

Check yourself

Knowledge Check

Kite Freight's finance team needs to open Depot Run records and see the cost column. Dispatchers must never be able to obtain the cost value. What is the correct configuration?

Knowledge Check

Nadia publishes a new model-driven app. She can use it, but no one else can even see it in their app list. What is the most likely cause?