Wednesday, September 30, 2009

Bidirectional data connection between Sitecore (CMS) and Salesforce (CRM)

I've been working a product called (S4S) that provides a number of ways to integrate Sitecore and Salesforce. This parallels the Sitecore (Microsoft) CRM Membership Provider but with Salesforce rather than Microsoft CRM.

One part (the Security Connector) provides custom ASP.NET Security Providers (Membership, Role and Profile) that uses the Salesforce Partner API to expose Contacts and Accounts as Users and Roles in Sitecore respectively. This is useful for companies who want to provide extranet logins in Sitecore for their Salesforce contacts. Using the standard ASP.NET providers makes the integration seemless for sitecore admins. I.e. You can use Salesforce derived users and roles within Sitecore in the same way you would use a native user and/or role. You use the same admin tools from the Sitecore Shell. The profile connection can be used to expose Salesforce Contact fields to Sitecore.

Some other goodness (the Data connector) makes bidirectional data transfer easier. At its core it is a entity based .NET wrapper around the Salesforce partner and metadata API's. This makes strongly typed CRUD (Create, Retrieve, Update, Delete) operations really simple. Internally we handles compressing the outbound and inbound API calls and caching the meta data to improve performance. There is also query building to produce dynamic SOQL. I've done some quick demos with standard ASP.NET GridViews and FormViews round tripping Salesforce data through Sitecore (remember to set typesThatShouldNotBeExpanded in the web.config first!). The is also a Generic entity service that can accommodate any Salesforce object. This is useful if the field definition is unknown or likely to change.

Finally there is the Report and Dashboard Connector that provides .NET API access to Salesforce Reports and Dashboards. With reports you can pull out the HTML or have it converted to a DataSet. By surfacing the graphs and charts from Salesforce rather than using static content keeps everything up to date with changes in the Salesforce data.