We’re using Power Automate to create asset records in D365 Finance & Operations from an external asset tracking system. The flow works for simple text fields, but consistently fails when mapping lookup fields like AssetGroup and Location.
The error we’re getting:
Error: Cannot resolve entity reference
Field: AssetGroup
Value provided: AG-001
I’ve verified the AssetGroup ‘AG-001’ exists in the system. The Power Automate connector seems to have limitations with OData binding for lookups. I’ve tried passing just the ID value, the display name, and even the full entity reference format from the Dataverse API documentation, but nothing works.
Has anyone successfully mapped lookup fields through Power Automate for asset creation? What’s the correct format for these entity references?
I had similar issues and eventually found a working pattern that addresses all the connector limitations and OData binding challenges.
Step 1: Query for RecId using OData
Add a ‘List rows’ action before your asset creation. Filter by the AssetGroup display name:
Entity: AssetGroups
Filter: AssetGroupId eq 'AG-001'
Select: RecId
Step 2: Extract RecId from response
The response will contain a RecId field (numeric value like 5637144576). Store this in a variable. Important: This is the internal database identifier, not the business key.
Step 3: Map to asset creation
In your ‘Add a new row’ action for Assets, map the lookup field using this exact format:
AssetGroup@odata.bind: /AssetGroups(5637144576)
The key is the ‘@odata.bind’ annotation with the entity set name and RecId in parentheses. This follows the Dataverse API reference pattern for entity associations.
Additional considerations:
- Always validate the RecId exists before attempting the bind (handle null responses from the query)
- For multiple lookups (Location, ResponsiblePerson, etc.), repeat this pattern for each
- Cache RecId values if you’re processing batches to reduce API calls
- Test with a single record first, then scale to batch processing
Pre-sync validation:
Add a condition after your RecId query to check if the value exists:
Condition: length(outputs('List_AssetGroups')?['body/value']) greater than 0
If no: Send notification and terminate flow
If yes: Proceed with asset creation
This approach has been working reliably for us across 500+ asset records daily. The external ID mapping configuration in the Data Management framework is an alternative for bulk imports, but for real-time integration, the OData bind pattern is your best bet.
One final tip: Enable detailed logging in Power Automate to capture the actual RecId values being passed. This helps troubleshoot when records aren’t linking correctly.
Look for the field that ends with ‘@odata.etag’ in the response - the RecId is usually in a field named just ‘RecId’ (case-sensitive). However, for AssetGroup specifically, you might need to use ‘AssetGroupRecId’ depending on how the entity is exposed. I recommend using the F&O OData metadata endpoint to check the exact field names: https://yourinstance.operations.dynamics.com/data/$metadata. Search for your entity definition there to see all available fields and their types.
I’ve hit this exact issue. The Power Automate connector for F&O doesn’t handle lookup fields the same way as Dataverse connectors. You need to use the internal RecId value, not the display name or external ID. The connector limitation is that it expects the numeric RecId for entity references.
To get the RecId, you’ll need an additional step in your flow. Before creating the asset, query the AssetGroup entity using the display name or external ID to retrieve the RecId. Then pass that RecId value to the asset creation step. It’s not intuitive, but it’s the only reliable way I’ve found to work with F&O lookups through Power Automate.