本文将带领大家使用SharePoint Designer创建基于WCF服务的外部内容类型。
步骤
1、检查你的WCF服务已经宿主并可用。本文将使用封装AdventureWorks2000数据库的Contact表得到的WCF服务。 首先打开你的IIS管理器,导航到宿主你的WCF服务的网站,确保其正常运行。
2、打开IE浏览器并导航到该服务的.svc文件。 你应该能够看到类型如下的页面,表示该WCF服务正在工作。
WCF的检查工作结束。现在我们开始基于该WCF在SPD中创建我们的外部内容类型。
3、打开SharePoint Designer 2010并点击“打开网站”大按钮。
4、输入你的SharePoint站点URL地址并回车。SPD将会连接到该站点并获取信息。
5、从左侧导航窗格中点击外部内容类型。可以看到顶部的功能区也进行了相应的改变,反映当前的工作状态。
6、在功能区中,点击新建中的外部内容类型。
7、打开的摘要页面中,可以编辑和管理外部内容类型。
这里有一些类似超链接的标签,点击可设置值 。最上面的两个是名称和显示名称,设置其值为:
名称:联系人
显示名称:联系人
接下来,我们选择一个外部数据源来进行连接。点击链接“点击此处发现数据源并定义操作”。
8、进入操作设计器视图。点击添加连接按钮。
9、选择数据源类型为 “WCF服务”
10、WCF连接窗口打开。这里我们需要填写有关我们WCF服务的一些连接信息,以便SharePoint Designer进行连接。根据上面我们检查到的WCF宿主情况,这里我填入:
服务元数据URL:http://contact/service.svc?WSDL
服务终结点URL:http://contact/service.svc
11、配置好WCF连接后,点击确定。这时将尝试连接到你的WCF服务。如果一切正常,你会看到所有可用的Web方法。
12、我们需要创建相应的BCS操作。本例中,我们将使用GetContactFinder作为“读取列表”操作,使用GetContactSpecificFinder作为“读取项”操作。
13、右击 GetContactFinder并选择“新建读取列表”操作。
14、在弹出的向导中,“返回参数” 一节中会提示一个错误信息,“应至少指定一个标识符”。选择ContactID并勾选“映射到标识符”。在标识符下拉框中选中ContactID。点击完成,创建好了读取列表操作。
15、右击GetContactSpecificFinder并选择新建“读取项”操作。
16、在操作属性窗口中,输入参数一节我们需要映射该输入参数到标识符。选中contactid并在右侧的面板中勾上“映射到标识符”,并在标识符下拉框中选中ContactID。点击下一步。
17、在返回参数一节,也包含一条错误提示指出需要映射标识符。为了修复该错误,在左侧选择ContactID,右侧勾选“映射到标识符” 并在标识符下拉框中选中ContactID。点击完成按钮。
18、现在,右侧的ECT操作中已经有两个操作了。你也可以根据需要添加其他操作,如创建,更新等等。
19、按“Ctrl+S”键保存该ECT。
20、我们可以打开SharePoint站点,创建外部列表绑到我们的外部内容类型。
21、它会调用“读取列表”操作 (WCF中的Finder方法)来获取数据。
22、选中任意一条数据,然后点击“项目”功能区,其中的“查看项目”操作会调用WCF的Specific Finder方法,在弹出框中显示选中的项。
附上本例中涉及的WCF相关代码,以备参考。
1、IAdventureWorks2000WCFService.cs
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public interface IAdventureWorks2000WCFService
{
[OperationContract]
List<Contact> GetContactFinder();
[OperationContract]
Contact GetContactSpecificFinder(Int32 contactid);
[OperationContract]
List<Int32> GetContactIdEnumerator();
}
[DataContract]
public class Contact
{
[DataMember]
public Int32 ContactID
{
get;
set;
}
[DataMember]
public String Salutation
{
get;
set;
}
[DataMember]
public String FirstName
{
get;
set;
}
[DataMember]
public String MiddleName
{
get;
set;
}
[DataMember]
public String LastName
{
get;
set;
}
[DataMember]
public Boolean NameStyle
{
get;
set;
}
[DataMember]
public String Phone
{
get;
set;
}
[DataMember]
public String Suffix
{
get;
set;
}
[DataMember]
public String EmailAddress
{
get;
set;
}
[DataMember]
public String Password
{
get;
set;
}
[DataMember]
public Int32 EmailPromotion
{
get;
set;
}
[DataMember]
public DateTime ModifiedDate
{
get;
set;
}
[DataMember]
public Guid rowguid
{
get;
set;
}
[DataMember]
public String AdditionalContactInfo
{
get;
set;
}
}