Dataverse Solution Components: A 2026 Quick Reference
When working with unmanaged solutions in Dynamics 365 and Power Platform, understanding solution component types is essential for troubleshooting import errors, managing dependencies, and scripting deployments.
Common Component Type Codes
Here are the component types you will encounter most often in solution.xml and the Solution API:
| Code | Component Type | Example |
|---|---|---|
| 1 | Entity (Table) | Account, Contact, custom tables |
| 2 | Attribute (Column) | firstname, custom_field |
| 3 | Relationship | Many-to-one, many-to-many |
| 9 | Option Set (Choice) | Global choice columns |
| 10 | Entity Relationship | Lookup relationships |
| 24 | Security Role | Sales Manager, System Admin |
| 25 | Privilege | prvReadAccount |
| 26 | Role Privilege | Links role to privilege |
| 29 | Workflow (Classic) | Classic workflows |
| 60 | System Form | Main form, quick create |
| 61 | Web Resource | JavaScript, HTML, images |
| 62 | Site Map | App navigation |
| 63 | Connection Role | Stakeholder, Team Member |
| 65 | Assembly (Plugin) | Plugin DLL registrations |
| 66 | Plugin Step | SDK message processing step |
| 70 | Field Security Profile | Column-level security |
| 91 | Plugin Type | Individual plugin classes |
| 300 | Canvas App | Power Apps canvas apps |
| 371 | Connector | Custom connectors |
| 372 | Environment Variable Definition | Config variables |
| 380 | AI Model | AI Builder models |
| 10076 | Cloud Flow | Power Automate cloud flows |
Reading solution.xml
Root components appear in the <RootComponents> section:
<RootComponents>
<RootComponent type="1" schemaName="account" />
<RootComponent type="60" id="{GUID}" />
<RootComponent type="29" id="{GUID}" />
</RootComponents>
The type attribute maps to the table above. The id is the component's unique identifier in Dataverse. For entities, the schemaName is used instead.
Using the Solution API
Query components programmatically:
GET /api/data/v9.2/solutioncomponents?$filter=_solutionid_value eq '{solution-id}'&$select=componenttype,objectid
Or with PowerShell:
$components = Get-CrmRecords -EntityLogicalName solutioncomponent `
-FilterAttribute solutionid -FilterOperator eq -FilterValue $solutionId `
-Fields componenttype, objectid
$components.CrmRecords | Group-Object componenttype |
Select-Object @{N='Type';E={$_.Name}}, Count |
Sort-Object Count -Descending
Troubleshooting Import Errors
When a solution import fails with a missing dependency:
- Check the
MissingDependenciessection in the import log - Note the
typeandidof the missing component - Look up the type in the table above to understand what is missing
- Find which solution contains that component and import it first
Common causes:
- Missing base table that a flow references
- Security role referencing a privilege from an uninstalled solution
- Plugin step registered against a message that does not exist in the target
Key Takeaway
Bookmark this table. You will reach for it every time you debug a solution import error or script a deployment. The component type codes haven't changed in years — this reference stays valid.
Comments
No comments yet. Be the first!