How Do I Resolve the Parent Child Lookup Issue in Dataverse for Dynamics 365 Finance & Operations

How Do I Resolve the Parent Child Lookup Issue in Dataverse for Dynamics 365 Finance & Operations

What makes it so important to remember?

Simply put, it keeps you and your project execution happy and in a healthy state ☺️.

Business scenario:

Think about the scenario where you and your team have designed & developed several custom data entities as the parent-child relationship for customized business processes.

Integration requires sending both records such as retail, and business documents (Sales order, Purchase order) together. The sales order or purchase order document and its associated order lines are created in the same transaction scope. However, you found that you often had issues with lookups.

Error description

Unable to write data to an entity. Unable to lookup with values {DC00...}. Unable to look up salestable with values {DC00...}. Writes to failed with error message Exception message: The remote server returned an error: (400) Bad Request.

This error gets when Live-sync happens from Dynamics 365 FO to Dataverse.

For any transaction, Dynamics 365 FO creates data in a batch and sends it as a batch to Dataverse. If two records are created as part of the same transaction, and they reference each other, you might receive an error message that resembles as described in the above example.

Such as sales order header and line or custom entities having header and child records.

Date entity relationship with Dynamics 365 FO to indicate the dual-write platform that the two entities are linked and some relationships exist between the two records within the same transaction.

Dual-write batching depends on entity relationships explicitly defined on related entities. If a Dynamics 365 FO business process involves a multitude of entities and has to be enabled as a batch mode for Dataverse, it expects the relationships to be identified and defined on the entity.

How it works?

As a result, the sales line record gets inserted without finding the sales order record that corresponds to it. i.e., parent sales order and that is basically because on the entity, you might be missing a relationship.

One of the examples in a standard entity is SalesOrderLineV2Entity and if you see here, we have a relationship to the SalesOrderHeaderV2Entity.

image.png

Therefore, in this scenario, both records go into a single transaction scope, and they are executed sequentially.

Hence, we no longer have any lookup-related issues since sales order records come first, followed by sales order lines.

Special tips: 💪

The same approach can also be applied to Virtual entities. However you need to perform additional step to enable the related Virtual entity in Dataverse.

Isn't it interesting how something so simple can be so important?

I hope this article was a good read for you. Do share it with your friends and other peers.

Thank you for Reading - Let's Connect!

Enjoy my blog? For more such awesome blog articles - follow, subscribe and let's connect on LinkedIn, Twitter, YouTube

Stay tuned!