Use Power Fx in a custom page for your model-driven app

This article outlines how the common Microsoft Power Fx functions work differently between a standalone canvas apps and a custom page. This is because a custom page is a component within the model-driven app. Other Microsoft Power Fx formulas continue to behave in the same way.


Custom pages are a new feature with significant product changes and currently have a number of known limitations outlined in Custom Page Known Issues.

Add notifications to a custom page

A notification can be shown to the user in a custom page by calling the Notify function. When the notification messages appear, they're docked above the default page to stay visible until disabled. If a timeout interval is provided, the notification message will disappear after the timeout interval. It is recommended not to use a timeout interval of 10, as this is no longer considered as a timeout interval. More information: Notify function.

Notify( "Custom page notification message" )

Custom page notify information message bar

Notify( "Custom page notify warning message", NotificationType.Warning )

Custom page notify warning message bar

This section provides examples of navigating from a model-driven app form to a custom page, navigating from a custom page to other custom pages or model-driven app form using Power Fx.

The Navigate function allows the users to navigate either from model-driven app forms or custom pages. This function is only applicable when the custom page is running within a model-driven app. During custom page authoring or previewing in canvas designer, this function has no effect.

To navigate from one custom page to another, pass the display name of the custom page as the first parameter.

Navigate( CustomPage2  )

To navigate to the default view of the table, pass table name as the first parameter.

Navigate( Accounts )


Make sure you add the accounts Microsoft Dataverse table to the custom page before publishing and testing.

To navigate to a specific system view of the table, pass the GUID of the view.

Navigate( 'Accounts (Views)'.'My Active Accounts' )

To navigate to the default form of the table, pass the record as the first parameter.

Navigate( Gallery1.Selected )

To pass a Dataverse record to a specific form, pass the form name in the second parameter's Page attribute.

  { Page: 'Accounts (Forms)'.Account  } )

To pass a Dataverse record to a specific custom page, pass the custom page name in the second parameter's Page attribute.

  { Page: 'Account Record Page'  } )

In the target custom page, the record is retrieved using Param function to get the etn and id values.

Below is an example of loading the record into an EditForm control.

AccountEditForm.DataSource = Accounts
AccountEditForm.Item = 
  LookUp( Accounts, accountid = GUID( Param("id") ) )

To navigate to the default form of the table in create mode, pass a Dataverse record created from the Defaults function. This opens the default form with the record as a new record. The Defaults function takes the table name to create the record.

Navigate( Defaults( Accounts ) )

To navigate to a new record with some fields defaulted, use Patch function to set fields on the default record for the table.

		Defaults(Accounts), { 'Account Name': "My company", Phone: "555-3423" } ) 

To navigate back to the last page or to close a dialog, the Back function is called in a custom page. The Back function closes the current page and returns to the last model-driven app or custom page in the model-driven app. If the custom page has multiple screens, see the article Navigating back when custom page has multiple screens.


The default configuration for a custom page is to have one screen. In this case, the Back function call will close the custom page unless the custom page is the last in the page stack in model-driven app. The last page is kept open.

An app maker can enable multiple screens in a custom page. These should be considered like full page controls within the custom page that can be stacked. Opening a custom page has no means of specifying the screen to use. When a custom page contains multiple screens the maker is responsible for managing the screen stacking. Calling the Navigate function to a screen will add to the screen stack with the custom page. Each Back function call will remove a screen from the screen stack. When there is only one screen on the screen stack, the custom page is closed.

Enabling multiple screens

By default a custom page uses a single screen to encourage separation of the app into a screen per page. This can be switched by enabling Settings > Display > Enable multiple screens.

Custom page enable multiple screens

Known issues

  • The Navigate function doesn't have support for opening a model or custom page to a dialog. All navigation from a custom page opens inline.
  • Navigate function doesn't support opening:
    • A dashboard collection or a specific dashboard.
    • A specific model-driven app form.
  • A custom page can only open into the current session’s current app tab in a multi-session model-driven app.

See also

Navigating to a custom page using client API

Model-driven app custom page overview