Given the central role that Office 365 occupies for more and more businesses, integration of the resources managed by Office 365 with other services is a challenge that Perficient often addresses for clients. The good news is that the Office 365 platform and the architecture of many other, key platforms provide countless integration possibilities, many of which can be leveraged without the need for custom coding.
Recently, I was asked to tackle an integration of Office 365 and Salesforce that serves as a good illustration of the possibilities. I described the problem and solution in an earlier post . In that post, I described how to expose Office 365 information within Salesforce. In this post, I would like to look at the problem from the opposite direction – how to expose Salesforce information within Office 365.
The Problem
In this case, the goal is to expose core Salesforce information within an Office 365 site. Ideally, the information would behave as if it was “native” to the site. In this case, “native” means web parts, lists, columns, etc. could all behave as expected. This integration could, of course, be accomplished via creation of an appropriate SharePoint application. As in the previous case, we are looking for a “no code” solution.
The Solution
Fortunately, Office 365 supports a technology designed to solve such external data integration scenarios – Business Connectivity Services (BCS) . This technology was originally developed as a component/service for On-Premises SharePoint but is also supported within Office 365.
BCS supports the notion of an external content type, which can be used to describe Salesforce entities in a manner which will allow SharePoint to present the data as if it were internal. Some of the information contained in a external content type for Salesforce includes the following:
- Connection / Authentication information for the source Salesforce Organization.
- A definition of the Entities, Fields, and data types (aka metadata).
- Allowed data operations, such as Create, Read, Update, Delete, and Query (also called CRUDQ).
- The identity field and display columns for an external content picker used to retrieve external data throughout the user interface.
As in SharePoint On-Premises, the BCS in Office 365 provides a means for importing the external content types definitions (see Import BDC Models):
With the external content type in place, all the Salesforce-specifics can be ignored by users.
Creating a BDC Model
In addition to the external content type definition, the BDC Model for Salesforce must contain information about how to connect to the Salesforce data. BCS can consume data sources that are exposed as WCF services, SQL Azure data services, OData endpoints, and web services; Salesforce provides Web Service API for external data access. So, the question is “how do we match the requirements of the BCS client and the Salesforce service?”
In the case of Salesforce data, Visual Studio and SharePoint Designer tools do not provide a straightforward integration. The good news is there are a number of 3rd party tool providers who solve this problem – e.g. RSSBus Salesforce Connector, BCS Meta Man . These tools provide an GUI-based tool for the generation of the BDC Models and External Content Types. Under the covers, these tools provide an OData proxy for Salesforce web services.
Dealing with Security
Another important consideration of a Salesforce integration is respecting security of the underlying sources system. What is needed is some mechanism of associating the Office 365 authenticated user with an appropriate Salesforce user. Fortunately, such mapping is supported by the Office 365 Secure Store service. After determining the best authentication/identity mode for Salesforce, a target Secure Store application is created containing desired credentials mapping (see below). Finally, the Secure Store application is associated with the Salesforce BDC Model.
The Payoff
Once the Salesforce external content types are defined, a wide variety of SharePoint elements can be used to create lists, columns, web parts, etc. using Salesforce data. See Salesforce demo for a quick example.