In the recent updates of Dual Write, Microsoft released a pricing and inventory on hand integration in CE. Real time pricing calculation and inventory on hand as per FinOps business logic. In this post, I wanted to cover how it seems to magically work.
As you know by now, Dual Write uses a push architecture. Where either FinOps pushes to CE or CE pushes to FinOps. Both call a web service on the other side to sync data. Any errors that occur are presented to the user in real time. However, the pricing and inventory on-hand feature is different. These two features pull limited calculated data as needed. Watch the "Prospect to cash in dual write" tech talk from Microsoft and you will see why.
You wouldn't want to integrate (replicate) inventory levels or pricing logic in CE. The reason this is done this way is because integrating this kind of data would cause performance problems or a lot of chattiness. So, what Microsoft has done is a pull the data as needed (pull architecture).
In the below screenshot, you can see there are two new buttons on the Quote or Order form.
1. On-hand inventory - Shows real time inventory on hand information in a pop up form.
2. Price Quote/Order - Recalculates the price on the quote or order on the lines
The Inventory On-hand form shows calculated data from FinOps.
Now lets have a look at the back end that makes this work.
There is a bit of javascript that is used in CE to call OData Action methods. Below you can see the javascript resource file in the solution. You can see how the PriceOrder method calls a web service by passing in 4 parameters. The Entity name (hopefully this is fixed as it is using the label), the sales order number, the company and the action method to call.
Following this through in FinOps. You can see the DualWriteProjectConfigurationEntity has a RunDocumentAction method which takes the same 4 parameters.
If you dig deeper, this then triggers a method on the entity that was specified. Dirtying up the record to force a sync back to CE.
Maybe another time I can dig deeper and give some feedback.