I am currently working on a project where we are going to need functionality to synchronize master data (g/l accounts and dimensions as a minimum) from a corporate master data company to their subsidiaries.
I have previously developed a custom function to do this. But that was using NAV 5.0, and would require a lot of work to be usable with NAV 2016.
I’m sure that a lot of companies have the same requirement, and I would love to hear from anyone who knows of such a solution made by one of the many partners world wide.
I came across an add-on that allows global multi-company sync. I’m not sure if it will fully answer your needs but it seems close to what you are asking for. I have a colleague that has heard about the company that provides this add-on and his feedback is good.
Thanks Hassan, it does full-fill some of my requirements for such a solution in 2016 - using web services to communicate with entities. Does look like I should take a look at them.
Does anyone else knows and can recommend Chicago US based EmergeNext and this NAV Data Synchronization tool?
I don’t know exactly your requirements n, but for that goal I never used an add-on. I think that I have implemented master synchronization between a NAV instances using Xmlports, Codeunit’s , Web Services and even MSMQ.
Only once I have used Microsoft SQL Server native tool ( Master Data Management ) but it is a complex tool and It can’t fire NAV triggers in destination systems.
Well the SQL master data management is surely not what we are going for. Although I’ve not looked at for almost 10 years (since SQL 2008).
The way I look at it, then it is going to be something with XMLPorts, Codeunits and Web Services (they are not all going to be in the same instances or even domain). Not sure MSMQ is going to be needed anymore.
I’ve used different “home made” solutions before, just for that one purpose. And was looking for something more generic.
Maybe even the new data exchange framework could be used?
Additionally, I never use it directly in NAV but it’s common practice among most companies implement a bus queue architecture. The master ERP, send a message to the bus notifying a data change. Slave instances, subscribes to the message and updates locally data. This architecture is quite resilient because if fault tolerant because it accepts that master / salves aren’t always online.
If I were to do this myself, then I think I would rather go for a “pull” setup, where the entities are subscribing to the updates. Although pushing them could also be an option for other data types.
The time where you could do this just with the use of CHANGECOMPANY inside NAV is no longer an option, when the databases are all over the world. But 15+ years ago I also created a synchronization feature that way. Very easy… Or by having the “master data” in tables shared by all companies.
I recognize I’m moving away from your original point, but I will try detail what I have implemented in a customer but in other major ERP ( I never used an add-on, sorry about that. )
This solution covered multiple countries and not all countries were always online and there were multiple ERP vendors in the project.
For each customer Update, the record was marked as “To be synchronized”. A few seconds later, a job started in background sending the master data in xml format to the queue ( It is possible to use the old MSMQ, Azure Queue or my favourite one RabbitMQ). Salves ERP’s, when had connectivity to queue were watching notifications from master. Received the XML and updated their data.
The queue was configured to be clustered to avoid any data loss.
I can confirm you that this project is running live about 1 year without any issues.
Since v3.60 we implemented a world sync between NAV servers in 20 countries. Just add a sync-transact table triggered by table triggers in each instance. NAS runs in each and process what is relevant for its level : HQ or Country. Files are transfered via ftp. Sync of type Insert/Modify/Delete/Rename are handled efficiently and without errors. A log is also sync and can show what happened in each level. Best Regards.