演练:使用业务数据在 SharePoint 中创建外部列表
通过业务数据连接 (BDC) 服务,SharePoint 可以显示来自后端服务器应用程序、Web 服务和数据库的业务数据。
本演练演示如何为返回示例数据库中联系人相关信息的 BDC 服务创建模型。 然后,使用此模型在 SharePoint 中创建外部列表。
本演练阐释了以下任务:
创建项目。
向模型中添加实体。
添加 Finder 方法。
添加特定的 Finder 方法。
测试项目。
系统必备
您需要以下组件来完成本演练:
支持的 Microsoft Windows 和 SharePoint 版本。 有关更多信息,请参见开发 SharePoint 解决方案的要求。
Visual Studio 2010 专业版或 Visual Studio Application Lifecycle Management (ALM) 的某个版本。
对 AdventureWorks 示例数据库的访问权限。 有关如何安装 AdventureWorks 数据库的更多信息,请参见 SQL Server Sample Databases(SQL Server 示例数据库)。
创建项目
首先,创建一个包含 BDC 模型的项目。
创建项目
启动 Visual Studio 2010。
打开**“新建项目”对话框,展开要使用的语言下的“SharePoint”节点,然后单击“2010”**。
在**“模板”窗格中,选择“业务数据连接模型”。 将项目命名为 AdventureWorksContacts,然后单击“确定”**。
这将显示**“SharePoint 自定义向导”**。 使用此向导可以选择用于调试项目的网站以及解决方案的信任级别。
单击**“完成”**以接受默认的本地 SharePoint 网站和默认的解决方案信任级别。
向项目添加数据访问类
向项目添加数据访问类
在**“工具”菜单上,单击“连接到数据库”**。
**“添加连接”**对话框随即打开。
添加一个到 SQL Server AdventureWorks 示例数据库的连接。 有关更多信息,请参见添加/修改连接 (Microsoft SQL Server)。
在**“解决方案资源管理器”**中,单击项目节点。
在**“项目”菜单上,单击“添加新项”**。
在**“已安装的模板”窗格中,选择“数据”**节点。
在**“模板”窗格中,选择“LINQ to SQL 类”**。
在**“名称”框中,键入 AdventureWorks,然后单击“添加”**。
.dbml 文件会添加到项目中,并打开对象关系设计器(O/R 设计器)。
在**“视图”菜单上,单击“服务器资源管理器”**。
在**“服务器资源管理器”中,展开代表 AdventureWorks 示例数据库的节点,然后展开“表”**节点。
将**“Contact(Person)”**表拖到 O/R 设计器上。
一个实体类将创建并显示在设计图面上。 该实体类的属性映射到“Contact(Person)”表的列。
从 BDC 模型中删除默认实体
**“业务数据连接模型”**项目向模型中添加一个名为 Entity1 的默认实体。 移除此实体。 然后添加一个新的实体。 以空模型作为入手点可以减少完成本演练所需的步骤数。
从模型中移除默认实体
在**“解决方案资源管理器”中,展开“BdcModel1”节点,然后双击“BdcModel1.bdcm”**文件。
业务数据连接模型文件将在 BDC 设计器中打开。
在该设计器中,右击**“Entity1”,然后单击“删除”**。
在**“解决方案资源管理器”中,右击 Entity1.vb(在 Visual Basic 中)或 Entity1.cs(在 C# 中),然后单击“删除”**。
右击 Entity1Service.vb(在 Visual Basic 中)或 Entity1Service.cs(在 C# 中),然后单击**“删除”**。
向模型添加实体
向模型添加实体。 您可以将实体从 Visual Studio 的**“工具箱”**拖到 BDC 设计器上。
向模型添加实体
在**“视图”菜单上单击“工具箱”**。
在**“工具箱”的“BusinessDataConnectivity”选项卡中,将“实体”**拖到 BDC 设计器上。
新实体随即显示在该设计器中。 Visual Studio 向名为 EntityService.vb(在 Visual Basic 中)或 EntityService.cs(在 C# 中)的项目中添加一个文件。
在**“视图”菜单上,单击“属性窗口**”。
在**“属性”窗口中,将“名称”**设置为“联系人”。
在设计器中,右击该实体,单击**“添加”,然后单击“标识符”**。
新标识符随即显示在该实体中。
在**“属性”**窗口中,将标识符的名称更改为“ContactID”。
在**“类型名称”下拉列表中,选择“System.Int32”**。
添加特定的 Finder 方法
若要启用 BDC 服务以显示特定联系人,必须添加特定的 Finder 方法。 当用户选择列表中的某一项,并单击功能区中的**“查看项”**按钮时,BDC 服务会调用特定的 Finder 方法。
使用**“BDC 方法详细信息”**窗口可以向联系人实体添加特定的 Finder 方法。 若要返回特定实体,请向该方法添加代码。
添加特定的 Finder 方法
在 BDC 设计器中,选择**“联系人”**实体。
在**“视图”菜单上单击“其他窗口”,然后单击“BDC 方法详细信息”**。
在**“BDC 方法详细信息”窗口的“添加方法”下拉列表中,选择“创建特定的 Finder 方法”**。
Visual Studio 将以下元素添加到模型中。 这些元素将显示在**“BDC 方法详细信息”**窗口中。
一个名为“ReadItem”的方法。
该方法的输入参数。
该方法的返回参数。
每个参数的类型描述符。
该方法的一个方法实例。
在**“BDC 方法详细信息”窗口中,单击为“联系人”类型描述符显示的下拉列表,然后单击“编辑”**。
**“BDC 资源管理器”随即打开。 该“BDC 资源管理器”**提供模型的分层视图。
在**“属性”窗口中,单击“TypeName”属性旁边出现的下拉列表,再单击“当前项目”选项卡,然后选择“联系人”**。
在**“BDC 资源管理器”中,右击“联系人”,然后单击“添加类型描述符”**。
名为**“TypeDescriptor1”的新类型描述符随即显示在“BDC 资源管理器”**中。
在**“属性”窗口中,将“名称”**属性设置为 ContactID。
单击**“TypeName”属性旁边的下拉列表,然后选择“Int32”**。
单击**“Identifier”**属性旁边的下拉列表,然后选择 ContactID。
重复步骤 6 以为下列每个字段分别创建一个类型描述符。
名称
类型名称
FirstName
System.String
LastName
System.String
Phone
System.String
EmailAddress
System.String
EmailPromotion
System.Int32
NameStyle
System.Boolean
PasswordHash
System.String
PasswordSalt
System.String
在 BDC 设计器的**“联系人”实体上,双击“ReadItem”**方法。
联系人服务代码文件随即在代码编辑器中打开。
在 ContactService 类中,用下面的代码替换 ReadItem 方法。 这段代码执行下列任务:
从 AdventureWorks 数据库的联系人表中检索记录。
将 Contact 实体返回到 BDC 服务。
提示
用您的服务器名称替换 ServerName 字段的值。
Public Shared Function ReadItem(ByVal contactID As Integer) As Contact Const ServerName As String = "MySQLServerName" Dim dataContext As AdventureWorksDataContext = _ New AdventureWorksDataContext("Data Source=" & ServerName & _ ";Initial Catalog=AdventureWorks;Integrated Security=True") Dim Contact As Contact = _ (From TempContacts In dataContext.Contacts.AsEnumerable().Take(20) _ Where TempContacts.ContactID = contactID _ Select TempContacts).[Single]() Return Contact End Function
public static Contact ReadItem(int contactID) { const string ServerName = "MySQLServerName"; AdventureWorksDataContext dataContext = new AdventureWorksDataContext ("Data Source=" + ServerName + ";" + "Initial Catalog=AdventureWorks;Integrated Security=True"); Contact Contact = (from contacts in dataContext.Contacts.AsEnumerable().Take(20) where contacts.ContactID == contactID select contacts).Single(); return Contact; }
添加 Finder 方法
若要启用 BDC 服务以在列表中显示联系人,必须添加 Finder 方法。 使用**“BDC 方法详细信息”**窗口可以向联系人实体添加 Finder 方法。 若要向 BDC 服务返回实体集合,请向该方法添加代码。
添加 Finder 方法
在 BDC 设计器中,选择**“联系人”**实体。
在**“BDC 方法详细信息”窗口中,折叠“ReadList”**节点。
从**“ReadList”方法下显示的“添加方法”下拉列表中,选择“创建 Finder 方法”**。
Visual Studio 将添加一个方法、一个返回参数和一个类型描述符。
在 BDC 设计器的**“联系人”实体上,双击“ReadList”**方法。
联系人服务代码文件随即在代码编辑器中打开。
在 ContactService 类中,用以下代码替换 ReadList 方法。 这段代码执行下列任务:
从 AdventureWorks 数据库的联系人表中检索数据。
将联系人实体列表返回到 BDC 服务。
提示
用您的服务器名称替换 ServerName 字段的值。
Public Shared Function ReadList() As IEnumerable(Of Contact) Const ServerName As String = "MySQLServerName" Dim dataContext As AdventureWorksDataContext = _ New AdventureWorksDataContext("Data Source=" & ServerName & _ ";Initial Catalog=AdventureWorks;Integrated Security=True") Dim Contacts As IEnumerable(Of Contact) = _ From TempContacts In dataContext.Contacts.Take(20) _ Select TempContacts Return Contacts End Function
public static IEnumerable<Contact> ReadList() { const string ServerName = "MySQLServerName"; AdventureWorksDataContext dataContext = new AdventureWorksDataContext ("Data Source=" + ServerName + ";" + "Initial Catalog=AdventureWorks;Integrated Security=True"); IEnumerable<Contact> Contacts = from contacts in dataContext.Contacts.Take(20) select contacts; return Contacts; }
测试项目
运行项目时,SharePoint 网站将会打开,Visual Studio 将向业务数据连接服务添加您的模型。 在 SharePoint 中创建引用 Contact 实体的外部列表。 AdventureWorks 数据库中联系人的数据随即显示在该列表中。
提示
您可能必须修改 SharePoint 中的安全性设置,然后才能调试解决方案。 有关更多信息,请参见设计业务数据连接模型。
测试项目
按 F5。
SharePoint 网站将打开。
在**“网站操作”菜单上,单击“更多选项”**
在**“创建”页面中,单击“外部列表”,然后单击“创建”**。
将该自定义列表命名为“联系人”。
单击**“外部内容类型”**字段旁边的“浏览”按钮。
在**“外部内容类型选取器”对话框中,选择“AdventureWorksContacts.BdcModel1.Contact”,然后单击“创建”**。
单击**“创建”**以创建联系人列表。
SharePoint 随即创建一个外部列表。 AdventureWorks 示例数据库中的联系人随即显示在该列表中。
若要测试特定的 Finder 方法,请单击该列表中的某一联系人。
在功能区上,单击**“项”**选项卡。
在**“项”选项卡中,单击“查看项”**。
所选联系人的详细信息随即显示在窗体中。
后续步骤
您可以通过以下主题了解有关如何在 SharePoint 中为 BDC 服务设计模型的更多内容: