
I am currently working on MES integration and there are many challenges everyday to block one or other issue.
The integration seems to be simple where the data exchange is automated and near real-time. So the data is available in both the systems up to date ,with minimal manual intervention.
The following diagram is an extract from Microsoft Documentation illustrating the message exchanges and the approach.
How the data exchange is facilitated?
Business events – For instance , when the Production order is released .
OData and Data Entities – Third party can consume the data using Odata or FO can trigget the export using data entities.
API – Inbound to FO from the third party system happens via standard API calls .
Business event when the Production order is released
Standard business event can be leveraged to send the data to the 3rd Party when the production order is released.
Go to System Adminstration -> Set up -> Business event -> Business event catalog

The payload with this business event is defined on the right side of the form which is displayed upon selecting the business event

It is possible to extend the business event to add custom fields or create a new custom business event . I would recommend for extension of standard event.
How to send the data in business event?
Data can be exchanged via business events in various approaches.
When you create an endpoint, there are various option to display

It is possible to create
Consuming data via Odata Entities
Using a GET request to retrieve all the production orders which are having the status as ‘Released’
https://fourl/data/ProductionOrderHeaders?$filter=ProductionOrderStatus eq Microsoft.Dynamics.DataEntities.ProdStatus'Released'
Get the details of a particular production order
https://fourl/data/ProductionOrderHeaders?cross-company=true&$filter=dataAreaId eq 'usrt'&$ProductionOrderNumber eq PC-USMF01-0000002'
Get the details of Routes
Data entity exposed as Odata here is ProdProductionOrderRouteOperationEntity
https://fourl/data/ProductionOrderRouteOperations?$filter= ProductionOrderNumber eq 'PC-USMF01-0000002'
Get the Route Operations
Data entity exposed as Odata here is RouteRouteOperation
https://fourl/data/RouteOperations?$filter= RouteId eq 'PC-RN-USMF-0001154'
Get the properties of Route operations
Data entity exposed as Odata here is RouteOperationPropertiesV2Entity
https://fourl/data/RouteOperationsProperties?$filter= RouteId eq 'PC-RN-USMF-0001154'
Get the details of Route Version
Data entity exposed here is RouteVersionODataV2Entity
https://fourl/data/RouteVersionsV2?$filter= RouteId eq 'PC-RN-USMF-0001154'
Get the details of Route job
Data entity exposed as Odata here is ProdProductionOrderRouteJobEntity
https://fourl/data/ProductionOrderRouteJobs?$filter= ProductionOrderNumber eq 'PC-USMF01-0000002'
To get the BOM details
Data entity exposed as Odata here is BOM
https://fourl/data/ProductionOrderBillOfMaterialLines?$filter= ProductionOrderNumber eq 'PC-USMF01-0000002'
To get the Resource requirements details
Data entity exposed as Odata here is RouteOperationPropertiesResourceRequirementEntity
https://fourl/data/RouteOperationPropertiesResourceRequirements?$filter= RouteId eq 'PC-RN-USMF-0005854'
The above APIs are available in my Githib Handle – MES Integration
In my next post, I will cover about Inbound APIs for MES-FO
Original Post https://anithasantosh.wordpress.com/2025/10/26/mes-integration-integrate-d365fo-with-third-party-integration-system/