20 July, 2011

Three points to consider when using the SharePoint BCS

The SharePoint Business Connectivity Services (BCS) is an integration feature of SharePoint 2010 which provides read/write access to line-of-business data in external systems. Once an external system has been modelled in the BCS, a SharePoint user or developer can compose solutions that use external data directly without having to possess expert knowledge about the API of the back-end system.

There are many options when it comes to architecting a SharePoint solution that is integrated with an external system. In some scenarios the BCS will be a valuable constituent of a solution, in other cases it may not be a good fit. If you are looking to connect SharePoint with an ERP system or other line-of-business system, there are some important points to consider when deciding whether the BCS should be part of your solution architecture.

Up to 20 operations need to be supported
The BCS provides a back-end neutral framework for integration by requiring the API of the back-end system to be mapped to 20 stereotyped operations. Many APIs of business applications are not very BCS-friendly and it may require substantial effort to distill the APIs into services that can be mapped to the stereotyped BCS operations. This is not a problem when connecting to simple data sources like SQL Server databases, but more complex business applications often have APIs that are very hard to decipher for outsiders (e.g. SAP has a very granular generic API which presents a significant challenge in this regard).

Data is retrieved on-demand
Business data accessed through the BCS is exposed through what is called external lists in SharePoint. These external lists share many of the characteristics of the traditional SharePoint lists. However, one important difference is that the data is not stored in SharePoint. This is often a positive thing because you generally do not want to replicate business data across multiple storages unless you have to. But there are also common scenarios where data caching is required. For example, the administrator of your ERP system might not be too happy if you are frequently hitting the system live to retrieve data that rarely changes.

Workflows cannot be associated with external lists
SharePoint workflow generally works by reacting to items in a list being added or changed. Items in external lists are fetched on-demand and are not stored in SharePoint and therefore workflows cannot be directly associated with external lists. If you consider a use case where you want to trigger a business process every time a new item is added to a table on the back-end then the BCS is not a good option. You can still query data in an external list as part of a workflow running on a document library or an “internal” list, but items in an external list cannot be the primary object of the workflow.

These are all important things to consider when deciding whether the BCS should be part of your solution architecture. There are solutions where the BCS is a natural fit and there are solutions where you will have to come up with an alternative way of bringing the line-of-business data into SharePoint. As always, if you have any experiences with this please share your thoughts below.


William van Strien said...

i Kristian,

Good post, with valid points/eye-openers for anyone critical considering BCS as integration approach.

A remark on the 1st point. Not all of the 20 supported BCS operations are in each situation required. Only when utilizing the ExternalList UI, 2 operations are at minimum and always required by BCS functioning: ReadList/Finder and ReadItem/SpecificFinder.
Whether any of the other 18 are applicable, depends on the specific use case; E.g. in a read/write scenario you also need
Update, Create and/or Delete operations implemented at the external system. The AccessChecker is needed when programming restrictive security; the Navigation operations might be applicable only in case of associative data relationsships, that also need to be traversed in the business use case, and via the out-of-the-box ExternalList.

Abdul Workman said...

The Routing functions might be appropriate only in situation of associative information connections, that also need to be traversed in the company use situation.