Friday 18 May 2012

SharePoint 2010: Connecting to WCF service as External Content Type

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
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:
iservice
Step 2 : Open Service.cs and implement the ‘IService’
 interface in Service class:
iservice-implementation
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:
sp2010-wcf
 

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:
edit-sharepoint-designer
Step 2: The SharePoint 2010 Designer will open with the Site. Click on the ‘External Content Type’ from the left pane as shown below:
external-content-type
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:
new-content-type
Set the Name of the External Content Type as shown below, the Office Item Type is set to ‘Generic List’
office-item-type
Click on ‘Click here to discover external data sources and define operations’ and you will get the ‘Add Connection’ as shown below:
add-connection
Click on ‘Add Connection’. You will see the ‘External Data Source Type Selection’ window. Select WCF from it as shown below:
select-wcf-service
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.
wcf-connection
The WCF Service will be added in the SharePoint 2010 Designer as shown below:
data-source-explorer
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’:
new-read-list
This will start the ‘Read List Wizard’ as shown below:
read-list-wizard
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:
return-parameter
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:
new-read-item-operation
 
This will bring up the ‘Read Item‘ Wizard window
read-item-wizard
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:
input-parameter-config
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:
map-to-identifier
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:
new-create-operation
This will start the ‘Create’ Wizard as shown below:
create-wizard
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:
input-param-config
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:
external-operatios
 
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:
create-list-form
In the ‘Create List and Form for EmployeeWCFServiceList’ window, enter the List Name as shown below:
create-list-form-2
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
quick-launch
Step 9: Click on the List and you will see the following result
employee-wcf-listdata
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:
sharepoint-bcs-architecture
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:
service-app-info
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:
set-object-permissions
Step 11: Refresh the Web Site. The result will be as shown below:
list-data
Step 12: Select a Record on the List and click on ‘View Item’ as shown below:
view-item
employee-data-list-item
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:
list-data-new-item
Step 14: The New Item Window appears. Enter the record info in it as shown below:
add-record
Click on ‘Save’ and the newly added record appears in the List
newly-added-record
Like wise, you can implement the Update and Delete methods also.
Conclusion
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

No comments:

Post a Comment