I've been developing system integrations for so long that I sometimes forget that some parts of system integration design may not be obvious to customers I work with.
I have been working with a company that is integrating their document management solution into Dynamics GP. Their software will capture a scan of a document, such as a vendor invoice, their workflow will route the document image, a user will verify the vendor and the expense accounts, and once the workflow is complete, the software will import the invoice data into Dynamics GP using eConnect. Once the invoice is imported, a GP user can view the Payables Transaction invoice in Dynamics GP, and also open the scanned invoice image directly from GP.
Okay, that sounds pretty straightforward...
The initial version of the integration with Dynamics GP is asynchronous, using XML files. The document management system exports an XML file containing the "metadata" for the vendor invoice, and the GP import is a scheduled task that regularly picks up those XML files and imports the data into Dynamics GP as transactions. (Aside: This design was chosen for its simplicity, as the initial version of the integration was a prototype--a proof of concept to explore how the system could be integrated with Dynamics GP.)
Okay, so...your point is...?
In an asynchronous integration like this, how does the document management system know that the invoice imported successfully? If it did import successfully into GP, how can the document management system know that? Or if the import failed, how will the document management system know that too?
Ahhhhh...I see where you're going with this...
The non-technical customer contact, who does not regularly design or work with system integrations, hadn't thought about those questions. Once he thought about them, he realized the value.
What if the Dynamics GP eConnect integration, after it imports each invoice, is able to call the API of the document management system to tell it that the AP invoice imported successfully? And in the process, the GP integration can also send over the unique GP Voucher Number to the document management system, providing a unique link between the data in both systems. If the import failed, the GP integration could also send a message back letting it know that an error occurred, and include an error message explaining the cause (vendor not found, GL account not found, etc.).
If that process were added to the integration, the GP integration could "close the loop" with the document management system.
A user in the document management system could then see that an invoice was successfully imported into GP. The workflow in the document management system could know if an invoice error occurred and re-route the document for review and correction of the data.
A query or report could verify that all of the AP invoices in the document management system had been imported into GP, or could find any invoices that were still not successfully imported. A query could compare the data in both systems to ensure that all of the voucher numbers stored in the document management system existed in Dynamics GP--because it is possible that an invoice or batch could be accidentally deleted in Dynamics GP.
Okay, cool, that makes sense.
And while discussing the capabilities of the document management system API, I realized that the integration could be enhanced to be synchronous, and could be handled completely by the Dynamics GP integration.
The GP integration could query the document management system API, asking for all new invoices, or all invoices that do not yet have a Voucher Number assigned. It could then retrieve the metadata for each invoice, import each as an AP voucher in GP, and then save the Voucher Number back to the document management system.
That sounds appealing, but there may be reasons to not get that fancy. This document management system offers both an on premises version and a cloud version of their product, so the synchronous design may not work, or may not work as well, with the cloud version.
But I offered it as something to consider if there was some benefit of that design.
So when you are integrating a system with Dynamics GP, consider whether you should close the loop between the two systems.