When you develop a SharePoint 2010 portal for an Organization, your portal may need to connect to an external software system for e.g. an already available accounting software system. To establish such communications in SharePoint 2010, we can use the Business Data Connectivity Web Service. This service helps to establish communication between the SharePoint 2010 portal and an external data source like SQL Server, WCF and other .NET types.
In this article, I am going to explain how to establish connection between SharePoint 2010 portal and WCF service. To consume WCF service, I have used SharePoint Designer 2010.
Note: To learn how to establish connection between SP2010 and SQL Server, read my previous article
SharePoint 2010: Connecting to SQL Server Using the External Content Type Feature
For this article, I already have created a Web Site ‘http://MyServer/sites/ss’.
Step 1: Open VS2010 and create a new WCF Service Application, rename ‘IService1.cs’ to ‘IService.cs’ and ‘Service1.cs’ to ‘Service1.cs’. Open ‘IService.cs’ and add the following method and class in it:
Step 2 : Open Service.cs and implement the ‘IService’ interface in Service class:
Step 3: Open Service.svc in markup by right-clicking on it and change the Service attribute as shown below:
<%@ ServiceHost Language="C#" Debug="true" Service="WCF_For_SPS.Service" CodeBehind="Service.svc.cs" %>
Step 4: Publish the Service on IIS (IIS 7.0). The communication will happen in the following manner:
Communication from Website to WCF
Now to communicate from the Web Site to WCF, follow these steps
Step 1: Navigate to the ‘http://MyServer/sites/ss’ web site. Click on ‘Site Actions’ on the top left, and select ‘Edit in SharePoint Designer’ as below:
Step 2: The SharePoint 2010 Designer will open with the Site. Click on the ‘External Content Type’ from the left pane as shown below:
This action will open the ‘External Content Types’ window.
Step 3: Click on the ‘External Content Type’ on the top left. This will open the ‘New External Content Type’ window as shown below:
Set the Name of the External Content Type as shown below, the Office Item Type is set to ‘Generic List’
Click on ‘Click here to discover external data sources and define operations’ and you will get the ‘Add Connection’ as shown below:
Click on ‘Add Connection’. You will see the ‘External Data Source Type Selection’ window. Select WCF from it as shown below:
A ‘WCF Connection’ window appear where you can enter the WCF Service Metadata URL and Service EndPoint URL as shown below:
Note: Instead of the localhost please specify IP address or name of the server.
The WCF Service will be added in the SharePoint 2010 Designer as shown below:
Step 4: Now once the WCF Service is configured with the Site, we need to define Operations for the List generated. Right Click on the ‘GetEmployees’ method and select ‘New Read List Operation’:
This will start the ‘Read List Wizard’ as shown below:
Click on ‘Next’ and you will get the ‘Input Parameters Configuration’ window. Since there is no input parameter for the method, you can simply click on ‘Next’. You will get the ‘Return Parameter Configuration’ screen. Since the method returns an Employee List, we need to set an identifier as shown below:
Click on ‘Finish’. You will get the ‘GetEmployee’ operation List.
Step 5: Right Click on ‘GetEmployeeByEmpNo’ and select ‘New Read Item Operation’ as shown below:
This will bring up the ‘Read Item‘ Wizard window
Click on ‘Next’ and you will see the ‘Input Parameters Configuration’ window, for this method the input parameter is ‘EmpNo’, we need to map it with Identifier as below:
Click on ‘Next’ again. Since the return parameter for this method is an ‘Employee’ object, we need to set ‘EmpNo’ as map to the Identifier as shown below:
Click on ‘Finish’ and you will get the ‘GetEmployeeByEmpNo’.
Step 6: Let’s move to add Insert operation. To do this, right –click on ‘InsertEmployee’ method and select ‘Create New Operation’ as below:
This will start the ‘Create’ Wizard as shown below:
Click on ‘Next’ to see the ‘Input Parameters Configuration’ window. Once again, since the input parameter for this method is the Employee object, we need to set ‘EmpNo’ as Map to the Identifier as shown below:
Click on ‘Next’. Since there is no output parameter for this method, you can simply click on Finish. You should get all the operations listed as shown below:
Save the configuration by clicking ‘Save’ button on the top left of the SharePoint 2010 Designer.
Step 7: Now to create a List, click on the ‘Create List & Form’ on the Ribbon of the SharePoint 2010 designer as shown below:
In the ‘Create List and Form for EmployeeWCFServiceList’ window, enter the List Name as shown below:
This creates a List on the Web Site.
Step 8: Open the Web Site and you will find the ‘EmployeeEWCFListData’ list created in the Quick Launch bar
Step 9: Click on the List and you will see the following result
You must be wondering why do you get the ‘Access denied by business data connectivity’ error? The reason can be understood by this simple architecture diagram shown below:
Since the user has to be impersonated by the WCF Service, we need to set the access rights for the user.
Step 10: To set the Access rights, Open SharePoint Central Administration > ‘Application Management’ > select ‘Service Applications’ and click on ‘Manage Service Applications’. You will see the ‘Business Data Connectivity Service’. Click on it and you will get the External Lists as shown below:
Select ‘EmployeeWCFServiceList’ and click on the ‘Set Object Permissions’ on the Ribbon. The ‘Set Object Permissions’ window appears. Add the user in it as shown below:
Step 11: Refresh the Web Site. The result will be as shown below:
Step 12: Select a Record on the List and click on ‘View Item’ as shown below:
Step 13: To insert a record, click on ‘List Tools’ on the Ribbon and select ‘Items’ from it. Then click on ‘New Item’ as shown below:
Step 14: The New Item Window appears. Enter the record info in it as shown below:
Click on ‘Save’ and the newly added record appears in the List
Like wise, you can implement the Update and Delete methods also.
With the External Content Types feature provided in SharePoint 2010, communication between two systems can be achieved easily. By using WCF Service with Business Data Connectivity, a SharePoint 2010 portal can easily connect to any external system within the organization or even to an external software system outside the organization.
The entire source code of this article can be downloaded over here