One of my clients here at Infinity Info Systems has been involved in an elaborate integration between Microsoft Dynamics GP and Microsoft Dynamics CRM that I built in Scribe 6.4 and have been tweaking ever since. The client is a medical component parts supplier with over 9000 component parts in stock, and thousands more that they source on a yearly basis.
The original GP to CRM integration I designed used an hourly batch process to migrate their data from GP (SQL direct) to CRM. This, while acceptable, was not the preferred solution due to lag-time between data entry in GP and usage in CRM, as well as a lack of true net-change management.
With the additional stability offered in Scribe 6.5.2 and the GP adapter enhancements in version 3.9, the client finally agreed to implement the adapter in their production environment. Earlier this year, I moved the client to a transactional integration using the GP publisher and MSMQ for Accounts, Contacts, Products, Units, Unit Groups and Price Lists. The effectiveness of the GP Publisher instilled confidence in the client and allowed us to move forward, tackling some of the more complex problems that we were facing.
One of the more challenging tasks I was assigned was the concept of implementing a “New Product Release” process. This process would allow the client to replace an aging database used to source new products that they do not currently carry in stock. Since this customization set was already in place in CRM, the client wanted to leverage it to store these “non-inventory” items and then convert them to GP inventory when a certain threshold was met. This would reduce repetitive data entry in multiple systems, and allow end users to work in CRM where they felt comfortable, rather than the legacy database.
The two major challenges with this process were that the client wanted the process to be nearly instantaneous using MSMQ, and the client wanted to empower the end user to troubleshoot conversion issues themselves to reduce IT Department burden.
Unfortunately, if there was a problem on any step in the process, I was limited to one set of data from the Message published from the MSMQ to write error specific information to the end user. This frustrated me to no end, because in order to be successful with this process, the client wanted to be able to write back detailed failure information to CRM if there was a problem, such as:
- Error Reason
- (CRM) Item ID
- (CRM) Item Description
- (CRM) Item Created On
- (GP) Item Number
- (GP) Item Description
- (GP) Item Created On
- (CRM) Conversion Attempted On
- (CRM) Conversion Attempted By
This information was difficult to write back, because of the limited source update capabilities using MSMQ. In addition to the limitations, the process felt extremely clunky and prone to error due to the back and forth of the message handoffs between DTS files on success of each job. The only way for me to do this was to create multiple jobs to handle failures, creating a temporary table in Scribe Internal to gather information about the failure, get information from GP and CRM, and then push that information to CRM after the processing was complete.
With the release of Scribe 7, I attended one of the multi-target webinars, and one night while in the shower (where my brain tends to do most of its intense thinking), had one of those “Holy Cow!” moments where I realized the power of multi-target and the huge reduction in overhead it could provide. I decided to install and configure Scribe 7 in our test environment to see if I could reduce the complexity of this process by leveraging multi-target.
After redesigning the process, I was able to take 8 individual DTS files performing multiple tasks, and merge them down into one DTS that has multiple steps going against GP and CRM. The new DTS gets its source from the same message as the old process; however the resulting complexity has been reduced by a significant factor, cutting out temp tables and multiple message handoffs.
Multi-target has also provided us the ability to write back to CRM with failure info from GP (Steps 7 and 8 in Exhibit 1), should we find duplicates in GP or if the insert fails. Using temporary variables (Exhibit 2) I can capture CRM and GP data points for each record, writing back robust error information to CRM if the job encounters issues.
Additionally, upgrading to 7 from 6.5.2 for the existing processes was seamless. I took the 20+ DTS files and two publishers related to the other pieces of the GP-CRM integration and updated them all in a manner of an hour. The only issue I ran into was that I had to update my DBLOOKUP statements, because with the addition of multi-target, you now do DBLOOKUP against the connection name, not “S, T or I”.
Once I realized the power of multi-target, I haven’t looked back. I am pushing all my clients to Scribe 7.0.1 if they need any kind of new DTS development, because it makes their systems more efficient and makes my life significantly easier.
Exhibit 1
Exhibit 2