Events
Power BI DataViz World Championships
Feb 14, 4 PM - Mar 31, 4 PM
With 4 chances to enter, you could win a conference package and make it to the LIVE Grand Finale in Las Vegas
Learn moreThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
In addition to creating a model-driven app using the Power Apps app designer, you can programmatically create and manage model-driven apps.
Important
You don't have to write code to build model-driven apps if you don't need to! The app designer provides a much simpler and intuitive experience for building model-driven apps without having to write code by providing a tile-based information structure and simplified interface. Check it out here: Design model-driven apps by using the app designer
Creating a model-driven app involves the following steps:
You must have the System Administrator or System Customizer security role or equivalent permissions to be able to create an app.
You must specify the following properties at a minimum to create an app:
The following Web API request creates a Unified Interface type of app:
POST [Organization URI]/api/data/v9.0/appmodules HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"name": "SDKTestApp",
"uniquename":"SDKTestApp",
"webresourceid":"953b9fac-1e5e-e611-80d6-00155ded156f"
}
The response OData-EntityId header contains the Uri of the created app.
HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.0/appmodules(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)
You can add or remove components in an app such as sitemap, table, dashboard, business process flows, views, and forms that you want to be included in your model-driven app. For detailed information about components that can be added to a model-driven app, see Add or edit app components in the app designer.
Use the AddAppComponents action or the AddAppComponentsRequest message to add components to your model-driven app. The action requires you to specify the following:
The following Web API request adds a view (savedquery) and a form (systemform) to your app:
POST [Organization URI]/api/data/v9.0/AddAppComponents HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"AppId":"00001111-aaaa-2222-bbbb-3333cccc4444",
"Components":[
{
"savedqueryid":"00000000-0000-0000-00aa-000000666000",
"@odata.type":"Microsoft.Dynamics.CRM.savedquery"
},
{
"formid":"c9e7ec2d-efca-4e4c-b3e3-f63c4bba5e4b",
"@odata.type":"Microsoft.Dynamics.CRM.systemform"
}
]
}
To remove a component from an app, use the RemoveAppComponents action or the RemoveAppComponentsRequest message. This action takes the same set of parameters as the AddAppComponents action.
The following Web API request removes a view (savedquery) from your app:
POST [Organization URI]/api/data/v9.0/RemoveAppComponents HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"AppId":"00001111-aaaa-2222-bbbb-3333cccc4444",
"Components":[
{
"savedqueryid":"00000000-0000-0000-00aa-000000666000",
"@odata.type":"Microsoft.Dynamics.CRM.savedquery"
}
]
}
Validating an app involves checking for any dependencies for the components you have added in your model-driven app to ensure that your app works fine. This is the same as selecting Validate in the app designer. More information: Validate your app
Use the ValidateApp function or the ValidateAppRequest message to validate your app. The following Web API request shows how to validate your model-driven app with ID: 00001111-aaaa-2222-bbbb-3333cccc4444:
GET [Organization URI]/api/data/v9.0/ValidateApp(AppModuleId=00001111-aaaa-2222-bbbb-3333cccc4444)
If there are no validation errors, the response is as follows:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.ValidateAppResponse",
"AppValidationResponse": {
"ValidationSuccess": true,
"ValidationIssueList": []
}
}
If there are validation issues in your app, the response displays errors/warnings in the ValidationIssueList collection:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.ValidateAppResponse",
"AppValidationResponse": {
"ValidationSuccess": false,
"ValidationIssueList": [
{
"ErrorType": "Error",
"Message": "App does not contain Site Map",
"DisplayName": null,
"ComponentId": "00000000-0000-0000-0000-000000000000",
"ComponentType": 0,
"ComponentSubType": 0,
"ParentEntityId": "00000000-0000-0000-0000-000000000000",
"ParentEntityName": null,
"CRMErrorCode": -2147155684,
"RequiredComponents": []
},
{
"ErrorType": "Warning",
"Message": "Account doesn't reference a form or view. App users will see all forms and views.",
"DisplayName": null,
"ComponentId": "00000000-0000-0000-0000-000000000000",
"ComponentType": 0,
"ComponentSubType": 0,
"ParentEntityId": "00000000-0000-0000-0000-000000000000",
"ParentEntityName": null,
"CRMErrorCode": -2147155691,
"RequiredComponents": []
}
]
}
}
After you have added required components to your model-driven app and validated it, you must publish it to make it available to users.
Use the PublishXml action or the PublishXmlRequest message to publish your model-driven app. The following request shows how to publish your model-driven app with ID: 00001111-aaaa-2222-bbbb-3333cccc4444:
POST [Organization URI]/api/data/v9.0/PublishXml HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"ParameterXml":"<importexportxml><appmodules><appmodule>00001111-aaaa-2222-bbbb-3333cccc4444</appmodule></appmodules></importexportxml>"
}
To provide users access to your apps so that they can access it from their Settings > My Apps area or the home page, you can associate security roles to your model-driven apps. Users assigned to the associated security roles and can see and use your model-driven apps in Dataverse.
Use the appmoduleroles_association navigation property of the AppModule table entity to associate a model-driven app with a security role. The following request shows how to associate a model-driven app with a security role:
POST [Organization URI]/api/data/v9.0/appmodules(00001111-aaaa-2222-bbbb-3333cccc4444)appmoduleroles_association/$ref HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"@odata.id":"[Organization URI]/api/data/v9.0/roles(<roleId>)"
}
To disassociate a security role from a model-driven app, you use the DELETE request with the same navigation property. For example:
DELETE [Organization URI]/api/data/v9.0/appmodules(00001111-aaaa-2222-bbbb-3333cccc4444)/appmoduleroles_association/$ref?$id=[Organization URI]/api/data/v9.0/roles(<roleId)
This section provides you information about retrieving your apps, updating app properties, retrieving app components, and deleting apps.
To retrieve published apps, use the following request:
GET [Organization URI]/api/data/v9.0/appmodules?$select=name,clienttype
To retrieve unpublished apps, use the RetrieveUnpublishedMultiple function. For example:
GET [Organization URI]/api/data/v9.0/appmodules/Microsoft.Dynamics.CRM.RetrieveUnpublishedMultiple()?$select=name,clienttype
To retrieve app components for a model-driven app, use the RetrieveAppComponents function or the RetrieveAppComponentsRequest message. For example:
GET [Organization URI]/api/data/v9.0/RetrieveAppComponents(AppModuleId=00001111-aaaa-2222-bbbb-3333cccc4444)
To retrieve the security roles associated with your model-driven app, use the $expand
system query option with the appmoduleroles_association navigation property. For example, here is the request to retrieve all the security roles associated to a model-driven app with ID: 00001111-aaaa-2222-bbbb-3333cccc4444:
GET [Organization URI]/api/data/v9.0/appmodules(00001111-aaaa-2222-bbbb-3333cccc4444)?$expand=appmoduleroles_association&$select=name,appmoduleroles_association
Use the DELETE request to delete a model-driven app. For example:
DELETE [Organization URI]/api/data/v9.0/appmodules(00001111-aaaa-2222-bbbb-3333cccc4444)
You can use the following client APIs to work with model-driven apps:
Events
Power BI DataViz World Championships
Feb 14, 4 PM - Mar 31, 4 PM
With 4 chances to enter, you could win a conference package and make it to the LIVE Grand Finale in Las Vegas
Learn moreTraining
Module
Get started with model-driven apps in Power Apps - Training
Model-driven app design is an approach that focuses on quickly adding components to your apps. These components include dashboards, forms, views, and charts. With little to no code, you can make apps that are simple or complex. Unlike in canvas app development, where the designer has total control over the app layout, much of the layout in model-driven apps is determined by the components you add. In other words, the emphasis is more on quickly viewing your business data and making decisions than on intrica
Certification
Microsoft Certified: Power Platform Developer Associate - Certifications
Demonstrate how to simplify, automate, and transform business tasks and processes using Microsoft Power Platform Developer.
Documentation
Customize forms (model-driven apps) - Power Apps
Forms provide the user interface (UI) that people use to create, view, or edit table records. Use the form designer in the customization tools to create and edit forms. This topic will provide information necessary to create or edit forms programmatically.
Web Resources (model-driven apps) - Power Apps
Web resources are virtual files that are stored in the Microsoft Dataverse database and that you can retrieve by using a unique URL address.
Sample: Import files as web resources(model-driven apps) - Power Apps
The sample provides a simplified example of importing files as web resources.