Recently in my last client engagement I was involved in an Integration project which had Salesforce.com as one of the Enterprise System.
The company was using SFDC as their CRM system. Our team consisted of 3 members. One Salesforce.com guy, me as BizTalk/.Net guy and a core .Net/SQL guy. Our requirement was embed data flow in both direction i.e. from Salesforce.com and company db say “xxx” and from xxx to Salesforce.com. This was to be done in both real-time and scheduled or batch basis.
Initially we did lot of research about SFDC adapter available in market but we just found on company called Two Connect which had developed those adapters. We even spoke with many of the Salesforce.com guys working since years and if they have anytime involved in such a integration project.
Anyways, TwoConnect has pretty decent adapters but few factors due to which we did not use them.
One of them was their cost and was not fitting company budget.
Secondly, when I was in that project MS had released BizTalk 2009 version and the company had BizTalk 2006R2 version and that company may anytime upgrade to 09 version. Then what about the adapter compability with the newer server. May be there would be a patch out and they would tell us to install and all. I was the only BizTalk guy there and me being the contractor, the company did not want to go in such hassle so we did not opt using the TwoConnect SFDC Adapter.
If I go in more details about the TwoConnect SFDC Adapter than it was very straight forward (“looking at their documentation and videos”), similar like you use a SQL Adapter, i.e. Add generated Items and wizard pops up and few configuration parameters, like which methods of the SFDC Apex API you need to call and stuff similar.
Now coming back to the architecture we opted: For the first scenario i.e. data coming from Salesforce.com to xxx (company db), we had a WCF Svc sitting in between xxx and BizTalk. So I consumed the WCF Svc and I had my receive and send ports exposed as Web Svc, which later on the Salesforce.com API consumes. There is huge internet cloud sitting in between and lot of firewalls and IP configuration issues we came up. But eventually resolved.
HLD architecture : Salesforce.com - Apex API - BizTalk - WCF Svc - xxx
(Here Biztalk exposed as WS and Apex API consumes it, initially we had exposed it as a WCF Svc and later on found out that somehow the APEX Api does not like WCF so had to step down on Web Service.)
Next is for the data going from xxx to SFDC, this was a challenge as in order to communicate with SFDC Apex API lot of stuff had to be done dynamically. Also we had time and budget constraints. Simplest BizTalk design is having a master orchestration which talks with the API and later on calling other child orchestrations according to function performed i.e. either update, insert, delete, create etc. Here for the first time BizTalk talks with apex API and it responds back with a URL and BizTalk has to dynamically next time send actually data to this URL so some dynamic bindings we did. And for getting the data from xxx, there was a WCF Svc sitting there BizTalk talks with that svc which is pretty much straight forward.
HLD architecture: xxx – WCF Svc – BizTalk – Apex API – Salesforce.com
(Here BizTalk exposed as WCF Svc and the other WCF Svc talks with endpoint)
One the most quickest option to complete this integration is having 2 WCF svc’s or WS sitting around BizTalk and BizTalk acting just as a pipeline in between. Here we did not do any transformation nor applied any business rules or any other process on the data. Just a pure messaging solution.
So the architecture will be like: XXX – WCF Svc – BizTalk Server – WCF Svc – Apex API – Salesforce.com .
It was a challenge for the data going from xxx to SFDC but was fun though. That was my experience working with Salesforce.com
If you anyone has done integration with SFDC than I would love to hear their experiences.