close

BCS, External & LOB Systems Integration Strategies for SharePoint 2013 & Office 365

Posted by Errin O'Connor on Mar, 13, 2015 03:03

SharePoint Business Connectivity Services (BCS) provides for the ability to integrate with data that is stored outside of SharePoint in to SharePoint 2013 as well as Office 365 and Microsoft solutions.

The BCS enables for data to be integrated into SharePoint, Office 365, SharePoint Online and other Microsoft solutions in reports or lists for BI initiatives or into SharePoint 2013’s search to be able to provide your users with search results from data across the enterprise using native elements such as the SharePoint 2013 search’s connector framework, as shown in image below.

The following image is an overview of SharePoint 2013 search’s connector framework and its integration with the BCS:

BCS, External & LOB Systems Integration Strategies for SharePoint 2013 & Office 365

SharePoint Business Connectivity Services (BCS) provides for the ability to integrate with data that is stored outside of SharePoint in to SharePoint 2013 as well as Office 365 and Microsoft solutions.

The BCS enables for data to be integrated into SharePoint, Office 365, SharePoint Online and other Microsoft solutions in reports or lists for BI initiatives or into SharePoint 2013’s search to be able to provide your users with search results from data across the enterprise using native elements such as the SharePoint 2013 search’s connector framework, as shown in image below.

The following image is an overview of SharePoint 2013 search’s connector framework and its integration with the BCS:

The BCS provides for the management of managing of authentication to external systems and can also indexing data in external systems for searching on through SharePoint 2013 while being able to still “security trim” search results to only users with access to “their specific data.”

There has also been a major update around the BCS being compatible with the cloud and hybrid cloud to be able to provide support for the notification of events in external systems as well as the inclusion of BCS support in apps.

Office 365 supports both WCF and OData based BCS entities which are the most scalable approach and architecture for systems that are on separate environments and accessed via HTTP or HTTPS.

Office 365 also support the secure store service and the BCS and secure store are managed at a tenant level which will meet your scalability as well as hybrid cloud federated security requirements for any future initiatives.

BCS and External Events “from the Trenches”

SharePoint 2013 adds a model for subscribing to events triggered in external systems as you can develop custom code for these event receivers in a similar manner to how a SharePoint event receiver would be developed.

With the ability to subscribe to events triggered in external systems with custom event receivers as well as thee capability to access applications and data sources that are exposed and accessible via WCF services as well as OData endpoints, as shown in image below, you now have the ability to take most any BI, reporting or enterprise-wide search initiative.

SharePoint 2013 apps can include external content type definitions and the accompanying BCS models within them although they are limited to one per app and you should keep in mind that the OData connector is the only connector allowed for this type of connection.

The image below is an overview of the BCS connecting with external events.

The BCS and OData

There are several factors to keep in mind when planning the user of OData with the BCS which are as follows:

?  OData is an available source in Visual Studio but is not available in SharePoint Designer 2013

?  OData provides the ability for a lighter payload of data which benefits the underlying network latency and cloud, hybrid cloud as well as mobile initiatives

?  An OData feed can be created via a WCF data Service as well as via a WebAPI

[gravityforms id=41 title=”true” description=”false”]
<div class='gf_browser_chrome gform_wrapper exit_intent_popup_wrapper' id='gform_wrapper_41' ><form method='post' enctype='multipart/form-data' id='gform_41' class='exit_intent_popup' action='/bcs-external-lob-systems-integration-strategies-for-sharepoint-2013-office-365/'> <div class='gform_heading'> <h3 class='gform_title'>Exit Intent</h3> <span class='gform_description'></span> </div> <div class='gform_body'><ul id='gform_fields_41' class='gform_fields top_label form_sublabel_below description_below'><li id='field_41_1' class='gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible' ><input name='input_1' id='input_41_1' type='hidden' class='gform_hidden' aria-invalid="false" value='https://www.epcgroup.net/bcs-external-lob-systems-integration-strategies-for-sharepoint-2013-office-365/' /></li><li id='field_41_9' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_41_9' >Full Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_9' id='input_41_9' type='text' value='' class='medium' placeholder='Full Name' aria-required="true" aria-invalid="false" /></div></li><li id='field_41_6' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_41_6' >Email<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_email'> <input name='input_6' id='input_41_6' type='text' value='' class='medium' placeholder='Email Address' aria-required="true" aria-invalid="false" /> </div></li><li id='field_41_7' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_41_7' >Phone<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_phone'><input name='input_7' id='input_41_7' type='text' value='' class='medium' placeholder='Phone Number' aria-required="true" aria-invalid="false" /></div></li><li id='field_41_10' class='gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_41_10' >Company Name<span class='gfield_required'>*</span></label><div class='ginput_container ginput_container_text'><input name='input_10' id='input_41_10' type='text' value='' class='medium' placeholder='Company Name' aria-required="true" aria-invalid="false" /></div></li><li id='field_41_8' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_41_8' >Message</label><div class='ginput_container ginput_container_textarea'><textarea name='input_8' id='input_41_8' class='textarea medium' placeholder='Type your message here...' aria-invalid="false" rows='10' cols='50'></textarea></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_41' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_41"]){return false;} window["gf_submitting_41"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_41"]){return false;} window["gf_submitting_41"]=true; jQuery("#gform_41").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_41' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='41' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_41' value='WyJbXSIsIjEwNTJhNGVmMWMyNzI3YTJmMjdiZTA1NjU4ZDMzYzY3Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_41' id='gform_target_page_number_41' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_41' id='gform_source_page_number_41' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 41) {if(typeof Placeholders != 'undefined'){ Placeholders.enable(); }jQuery('#input_41_7').mask('(999) 999-9999').bind('keypress', function(e){if(e.which == 13){jQuery(this).blur();} } );} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [41, 1]) } ); </script>